Dictionnaire - PowerPoint PPT Presentation

About This Presentation
Title:

Dictionnaire

Description:

Dictionnaire On veut une structure permettant d ins rer, d enlever et de rechercher des enregistrements. Concepts importants: Clef de recherche: D crit ce que ... – PowerPoint PPT presentation

Number of Views:62
Avg rating:3.0/5.0
Slides: 25
Provided by: Franco106
Category:

less

Transcript and Presenter's Notes

Title: Dictionnaire


1
Dictionnaire
  • On veut une structure permettant dinsérer,
    denlever et de rechercher des enregistrements.
  • Concepts importants
  • Clef de recherche Décrit ce que nous
    recherchons.
  • Clef de comparaison
  • Égalité recherche séquentielle
  • Ordre total tri
  • Comparaison denregistrements

2
Exemple (1)
  • Class Dossier
  • public
  • int ID
  • char nom
  • class IDCompare
  • public
  • bool lt(Dossier x, Dossier y)
  • return x.ID lt y.ID
  • bool eq(Dossier x, Dossier y)
  • return x.ID y.ID
  • bool gt(Dossier x, Payroll y)
  • return x.ID gt y.ID

3
Exemple (2)
  • class NomCompare
  • public
  • bool lt(Dossier x, Dossier y)
  • return strcmp(x.nom, y.nom) lt 0
  • bool eq(Dossier x, Dossier y)
  • return strcmp(x.nom, y.nom) 0
  • bool gt(Dossier x, Dossier y)
  • return strcmp(x.nom, y.nom) gt 0

4
Exemple (3)
  • class NDCompare
  • public
  • bool lt(char x, Dossier y)
  • return strcmp(x, y.nom) lt 0
  • bool eq(char x, Dossier y)
  • return strcmp(x, y.nom) 0
  • bool gt(char x, Dossier y)
  • return strcmp(x, y.nom) gt 0

5
Dictionnaire classe abstraite
  • // Classe abstraite pour le dictionnaire.
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • class Dictionary
  • public
  • virtual void clear() 0
  • virtual bool insert(const Elem) 0
  • virtual bool remove(const Key, Elem) 0
  • virtual bool find(const Key, Elem)
  • const 0
  • virtual int size() 0

6
Dictictionnaire liste non triée
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • class UALdict public
  • DictionaryltKey,Elem,KEComp,EECompgt
  • private AListltElemgt list
  • public
  • UALdict(int sizeDefaultListSize)
  • list new AListltElemgt(size)
  • UALdict() delete list
  • void clear() list-gtclear()

7
Dictictionnaire liste non triée
  • bool insert(const Elem e)
  • return list-gtappend(e)
  • bool remove(const Key K, Elem e)
  • for(list-gtsetStart() list-gtgetValue(e)
  • list-gtnext())
  • if (KECompeq(K, e))
  • list-gtremove(e)
  • return true
  • return false

8
Dictictionnaire liste non triée
  • bool find(const Key K, Elem e) const
  • for(list-gtsetStart() list-gtgetValue(e)
    list-gtnext())
  • if (KECompeq(K, e)) return true
  • return false
  • int size()
  • return list-gtleftLength()
  • list-gtrightLength()

9
Coût des opérations
  • Chercher Ajouter Enlever
  • Liste non triée O(n) O(1) O(1)
  • Liste trié O(n) O(n) O(1)
  • Tableau non trié O(n) O(1) O(n)
  • Tableau trié O(lg n) O(n) O(n)

10
Arbres binaires de recherche
  • Propriétés des ABR Soit N, un nœud de valeur K.
  • Tous les éléments stockés dans le sous-arbre de
    gauche de N ont une valeur lt K.
  • Tous les éléments stockés dans le sous-arbre de
    droite de N ont une valeur ? K.

11
ABR implémentation (1)
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • class BST public DictionaryltKey, Elem,
  • KEComp, EECompgt
  • private
  • BinNodeltElemgt root // Racine
  • int nodecount // Nombre de noeuds
  • void clearhelp(BinNodeltElemgt)
  • BinNodeltElemgt
  • inserthelp(BinNodeltElemgt, const Elem)

12
ABR implémentation (2)
  • BinNodeltElemgt deletemin(BinNodeltElemgt,
  • BinNodeltElemgt)
  • BinNodeltElemgt removehelp(BinNodeltElemgt,
  • const Key, BinNodeltElemgt)
  • bool findhelp(BinNodeltElemgt, const Key,
  • Elem) const
  • void printhelp(BinNodeltElemgt, int) const

13
ABR implémentation (3)
  • public
  • BST() root NULL nodecount 0
  • BST() clearhelp(root)
  • void clear() clearhelp(root) root NULL
  • nodecount 0
  • bool insert(const Elem e)
  • root inserthelp(root, e)
  • nodecount
  • return true

14
ABR implémentation (4)
  • bool remove(const Key K, Elem e)
  • BinNodeltElemgt t NULL
  • root removehelp(root, K, t)
  • if (t NULL) return false
  • e t-gtval()
  • nodecount--
  • delete t
  • return true

15
ABR implémentation (5)
  • bool removeAny(Elem e) // Delete min value
  • if (root NULL) return false // Empty
  • BinNodeltElemgt t
  • root deletemin(root, t)
  • e t-gtval()
  • delete t
  • nodecount--
  • return true

16
ABR implémentation (6)
  • bool find(const Key K, Elem e) const
  • return findhelp(root, K, e)
  • int size() return nodecount
  • void print() const
  • if (root NULL)
  • cout ltlt Larbre est vide.\n"
  • else printhelp(root, 0)

17
ABR rercherche
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • bool BSTltKey, Elem, KEComp, EECompgt
  • findhelp(BinNodeltElemgt subroot,
  • const Key K, Elem e) const
  • if (subroot NULL) return false
  • else if (KEComplt(K, subroot-gtval()))
  • return findhelp(subroot-gtleft(), K, e)
  • else if (KECompgt(K, subroot-gtval()))
  • return findhelp(subroot-gtright(), K, e)
  • else e subroot-gtval()
  • return true

18
ABR insérer (1)
19
ABR insérer(2)
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • BinNodeltElemgt BSTltKey,Elem,KEComp,EECompgt
  • inserthelp(BinNodeltElemgt subroot,
  • const Elem val)
  • if (subroot NULL)
  • return new BinNodePtrltElemgt(val,NULL,NULL)
  • if (EEComplt(val, subroot-gtval()))
  • subroot-gtsetLeft(inserthelp(subroot-gtleft(),
  • val))
  • else subroot-gtsetRight(
  • inserthelp(subroot-gtright(), val))
  • return subroot

20
Enlever la plus petite valeur
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • BinNodeltElemgt
  • BSTltKey,Elem,KEComp, EECompgt
  • deletemin(BinNodeltElemgt subroot,
  • BinNodeltElemgt min)
  • if (subroot-gtleft() NULL)
  • min subroot
  • return subroot-gtright()
  • else
  • subroot-gtsetLeft(
  • deletemin(subroot-gtleft(), min))
  • return subroot

21
ABR enlever (1)
22
ABR enlever (2)
  • template ltclass Key, class Elem,
  • class KEComp, class EECompgt
  • BinNodeltElemgt BSTltKey,Elem,KEComp,EECompgt
  • removehelp(BinNodeltElemgt subroot,
  • const Key K, BinNodeltElemgt t)
  • if (subroot NULL) return NULL
  • else if (KEComplt(K, subroot-gtval()))
  • subroot-gtsetLeft(
  • removehelp(subroot-gtleft(), K, t))
  • else if (KECompgt(K, subroot-gtval()))
  • subroot-gtsetRight(
  • removehelp(subroot-gtright(), K, t))

23
ABR enlever (3)
  • else // Lélément est trouvé
  • BinNodeltElemgt temp
  • t subroot
  • if (subroot-gtleft() NULL)
  • subroot subroot-gtright()
  • else if (subroot-gtright() NULL)
  • subroot subroot-gtleft()
  • else // Les deux fils sont non vides
  • subroot-gtsetRight(
  • deletemin(subroot-gtright(), temp))
  • Elem te subroot-gtval()
  • subroot-gtsetVal(temp-gtval())
  • temp-gtsetVal(te)
  • t temp
  • return subroot

24
Coût des opérations
  • Arbre balancé Arbre non balancé
  • Trouver O(lg n) O(n)
  • Insérer O(lg n) O(n)
  • Enlever O(lg n) O(n)
Write a Comment
User Comments (0)
About PowerShow.com