• Aucun résultat trouvé

Algo Design

N/A
N/A
Protected

Academic year: 2022

Partager "Algo Design"

Copied!
40
0
0

Texte intégral

(1)

Algo Design

Cours 5-1

Recherche en table et Arbres

(2)

Recherche en table

• Problème : Trouver une information à laquelle est associée une « clé »

• Exemple : Annuaire, Bibliothèque, …

Fonctions :

– recherche, – insertion,

– suppression.

• Quelle structure de données utiliser ?

(3)

Notations

• Les clés sont prises dans un ensemble isomorphe à [0,m-1] (m très grand)

• On souhaite stocker n paires de la forme [clé, information] (en général n<<m)

• Pour chaque méthode, on s’intéresse à

– la complexité spatiale du stockage – la complexité temporelle de chaque

(4)

Table à adressage direct

• On utilise un tableau T à m entrées 8Stockage en Θ(m)

Recherche(clé) : retourner T [clé]

8complexité Θ(1)

Insertion(clé,info) : T [clé]=info 8complexité Θ(1)

Suppression(clé) : T [clé]=Nil

0 1 2 3 99

6 90 94

2 3

(5)

Complexité spatiale

• Il y a 2.1011 mots de 8 lettres majuscules

• 1 Mega-octet = 106 octets

• 1 Giga-octet = 109 octets

• Conclusion :

un complexité spatiale en Θ(m) est irréaliste en général

(6)

Recherche séquentielle

• On utilise un tableau T à n entrées 8Stockage en Θ(n)

Recherche(clé) : parcours de T 8complexité Θ(n)

Insertion(clé,info) : (recherche préalable ?)

8complexité Θ(1)

Suppression(clé) : recherche+décalage 8complexité Θ(n)

0 1 2 3 99

6 90 3 2 94

(7)

Complexité temporelle

• Un dictionnaire contient de l’ordre de 107 mots.

• Si un test prend en moyenne un centième de seconde (0,01 s), une recherche

complète prend 2 minutes.

(8)

Recherche dichotomique

• On utilise un tableau T à n entrées classées par ordre croissant

8Stockage en Θ(n)

Recherche(clé) : parcours de T 8complexité Θ(log(n))

Insertion(clé,info) : recherche+décalage 8complexité Θ(n)

Suppression(clé) : recherche+décalage

0 1 2 3 99

6 90 94 2 3

(9)

Complexité temporelle

• Un dictionnaire contient de l’ordre de 107 mots.

log2(107) = 24

• Si un test prend en moyenne un centième de seconde (0,01 s), une recherche

complète prend 0,2 secondes ! (accès ?)

(10)

Les Arbres

(11)

Les arbres : vocabulaire

• Nœud, fils, père, racine, feuille, nœud interne, ancêtre, descendant

• Sous-arbre, hauteur d’un arbre, profondeur d’un nœud

• degré d’un nœud, arité d’un arbre, arbre k-aire

(12)

Les arbres binaires

• Chaque nœud a (éventuellement) un fils gauche et/ou un fils droite

• Implémentation :

struct noeud {

type_element cle;

struct noeud *gauche;

struct noeud *droit;

};

typedef struct noeud *arbre_binaire;

clé

(13)

Parcours récursif d’arbre

15 11

7

1 4

3

5 void f(Arbre A) 10

{if (A!=NULL)

{f(A->gauche);

f(A->droit);

}}

(14)

Parcours préfixé

15 11

7

1 4

3

5

10 void préfixe(Arbre A)

{if (A!=NULL) {print(racine);

préfixe(A->gauche);

préfixe(A->droit);

}}

10 5

7

4 3

1

11

15

(15)

Parcours infixé

15 11

3 7

5

10 10 5

3 7

11

15 void infixe(Arbre A)

{if (A!=NULL)

{infixe(A->gauche);

print(racine);

infixe(A->droit);

}}

(16)

Parcours postfixé

15 11

7

1 4

3

5

10 10 5

7

4 3

1

11

15 void postfixe(Arbre A)

{if (A!=NULL)

{postfixe(A->gauche);

postfixe(A->droit);

print(racine);

}}

(17)

Dérivation formelle

• Représentation de toute expression arithmétique sous forme d’arbre de syntaxe abstraite

• Dérivation = ensemble de règles de

transformation appliquée aux arbres de syntaxe abstraite

(18)

(x+1).2+cos(x)

x cos 2

1 x

+

x

+

(19)

Règles de dérivation

• D(x)=1

x 1

(20)

Règles de dérivation

• D(x)=1

• D(c)=0

c 0

(21)

Règles de dérivation

• D(x)=1

• D(c)=0

• D(A+B)=D(A)+D(B)

+ +

(22)

Règles de dérivation

• D(x)=1

• D(c)=0

• D(A+B)=D(A)+D(B)

• D(A.B)=A.D(B)+D(A).B

x

A B

+

A’

x

A

x

(23)

Règles de dérivation

• D(x)=1

• D(c)=0

• D(A+B)=D(A)+D(B)

• D(A.B)=A.D(B)+D(A).B

• D(f(A))=D(A).f’(A)

f

A’

x

f’

(24)

Règles de dérivation

• D(x)=1

• D(c)=0

• D(A+B)=D(A)+D(B)

• D(A.B)=A.D(B)+D(A).B

• D(f(A))=D(A).f’(A)

• Ces règles s’appliquent récursivement aux arbres de syntaxe abstraite

(25)

Règles de simplification

• Il n’y a pas une liste close de règles…

• Problème de définition de la forme simplifiée

(a+b)(a-b) = a2-b2

• On peut quand même appliquer des règles simples :

– S(0+A)=A – S(1.A)=A

(26)

Arbre binaire de recherche

• Structure d’arbre binaire

• Chaque nœud contient une clé

• Toute clé d’un nœud de l’arbre est

– supérieure à celles des descendants de son fils gauche

– inférieure à celles des descendants de son fils droit

(27)

Exemple d’ABR

15 11

7

1 4

3

6

10

(28)

Recherche de 4

15 11

7

1 4

3

6

10

4

4<10 4<6

4>3

4=4

(29)

Recherche de 5

15 11

7

1 4

3

6

10 5<10 5<6

5>3

5>4

(30)

Recherche dans un ABR

• Recherche de v dans l’ABR A

– si A==Vide, retourner Echec

– si v==Clé(A), retourner l’information associée – si v<Clé(A)

• retourner Recherche(Gauche(A),v) – sinon

• retourner Recherche(Droite(A),v)

(31)

typedef struct noeud{

int cle;

struct noeud *gauche;

struct noeud *droit;

}*ABR;

int recherche(ABR A, int v) { if (A==NULL)

return 0;

if (A->cle==v) return 1;

if (A->cle<v)

return recherche(A->droit,v);

Recherche dans un ABR

(32)

Insertion de 5

15 11

7

1 4

3

6

10 5<10 5<6

5>3

5>4

(33)

Suppression de 4

15 11

7

1 4

3

6

10 4<10 4<6

4>3

4=4

(34)

Suppression de 4

15 11

7 1

3

6

10

(35)

Suppression de 11

15 11

7

1 4

3

6

10

11>10 11=11

(36)

Suppression de 11

15 7

1 4

3

6

10

(37)

Suppression de 10

15 11

7

1 4

3

6

10

(38)

Suppression de 10

15 11

7

1 4

3

6

7

(39)

Suppression de 10

15 11

1 4

3

6

7

(40)

Complexité des ABR

• stockage en Θ(n)

• recherche en Θ(log(n))

• insertion en Θ(log(n))

• suppression en Θ(log(n))

Solution au problème de la recherche en table

• Dans le pire cas, les complexités sont mauvaises → structure d’arbre équilibré

Références

Documents relatifs

Il fait également preuve d’un art tout entier fondé sur la rigueur et la clarté du scénario, sur la force des personnages traités avec chaleur et humanité, ainsi que sur une

 Le spreading code étale le signal sur une plus large bande de fréquence.  l’étalement est directement proportionnel au nombre de bits

Ainsi, lorsque du C3b se dépose au niveau des surfaces de l'hôte, le jeu combiné des protéines membranaires de régulation et du facteur H contribue à empêcher

« Hugo déplace […] l’accent sur les figures de marginalité (la Bohémienne, mais aussi le monstre “bossu, borgne et boiteux”, les truands de la Cour des Miracles)

dès lors appliquer (i34), en remplaçant p par im. Ses ^éros sont isolés ; donc, z ne saurait être infiniment petit; ce qui aurait lieu si XQ était fini... SUR LES VIBRATIONS DES

Si tu peux être amant sans être fou d'amour, Si tu peux être fort sans cesser d'être tendre, Si tu peux être dur sans jamais être en rage, Si tu peux être brave et jamais

En effet, Giovanni est tout d’abord incapable d’annoncer la mort de son fils à ses amis par téléphone ; il ne le peut pas davantage dans la lettre qu’il tente en

Développé pour la création de réseaux locaux sans fil, liaison possible jusqu'à 100km environ, de 2mbps à 11mbps pour la norme 802.11b jusqu'à 54mbps voir 108mbps pour la