Embed
Email

Table de vérité

Document Sample

Shared by: benchaikh fatiha
Categories
Tags
Stats
views:
0
posted:
1/20/2012
language:
pages:
44
www.9ra.info

Cours d’algorithmique et structures

de données

MI2 2005/2006



Fabrice Huet

(fabrice.huet@sophia.inria.fr)





Version étudiants Unice

www.9ra.info

Plan

• Algorithmes de recherche

– Recherche Associative, Dictionnaire

– Recherche séquentielle dans un tableau

– Recherche dichotomique

– Arbres, arbre équilibrés

– Implémentation d’un dictionnaire avec une table de hachage

• Algorithmes de tri

– Importance du problème de tri

– Borne de complexité optimale

– Tri peu efficaces: à bulle et par insertion

– Tri optimal en moyenne: quicksort

• Exemples d’algorithmes classiques

– Recherche d’une sous chaîne

– Simplex

– Sécurité et Cryptographie

Version étudiants Unice

www.9ra.info

Cours 7



Recherche séquentielle

Recherche dichotomique

Arbres Binaires de Recherche





Version étudiants Unice

www.9ra.info

Ensembles dynamiques et dictionnaire

• Les ensembles manipulés par les algorithmes

peuvent croître, diminuer ou subir d’autres

modifications

• De tels ensembles sont dit dynamiques

• Un dictionnaire est un ensemble dynamique qui

supporte

– L’insertion

– La suppression

– La recherche

• D’autres ensembles supportent des opérations plus

complexes, comme la recherche du plus petit

élément.



Version étudiants Unice

www.9ra.info

Ensembles dynamiques et dictionnaire

• Pour implémenter un ED, on utilise des objets

• Dans certains cas, l’objet possède un champs

clé

– Il sert a discriminer entre les objets

• Il est aussi possible d’avoir des références

vers d’autres objets de l’ED









Version étudiants Unice

www.9ra.info

Opérations sur les ED

• On suppose l’existence d’un ED S

• Rechercher(clé k): retourne une ref. sur l’objet x tel

que x.clé=k, ou NIL si il n’y en a pas

• Insérer(objet x): ajoute à S l’objet x

• Supprimer(objet x): élimine l’objet x de l’ensemble S

• Minimum(): retourne l’objet de S qui a la plus petite

clé

• Maximum(): retourne l’objet de S qui a la plus

grande clé

• Successeur(objet x): retourne le prochain élément

de S plus grand que x ou NIL si x est le plus grand

• Prédécesseur(objet x): retourne le prochain élément

de S plus petit que x ou NIL si x est le plus petit

Version étudiants Unice

www.9ra.info

Recherche séquentielle dans un tableau

• Nous allons chercher un élément dans un

ensemble fixe.

• Cet ensemble sera représenté par un tableau



truc tablo[1..N];



• Nous supposerons que le type truc ne

contient pas de clef, i.e. il est la clef







Version étudiants Unice

www.9ra.info

Recherche séquentielle dans un tableau

• Comment chercher un élément a dans ce tableau?

• Problèmes:

– truc n’a pas de propriété spéciale

– Le tableau n’est pas ordonné

• Solution: parcourir le tableau pas à pas, c’est une

recherche séquentielle.

• Deux conditions d’arrêt

– On a trouvé l’élément

tablo[i] = a

– On a parcouru tout le tableau sans trouver l’élément





Version étudiants Unice

www.9ra.info

Recherche séquentielle dans un tableau

• On a donc l’algorithme suivant

entier i ←1;

tant que ((i ≤ N) et (tablo[i] ≠ a)) {

i ← i+1;

}

• Invariant de boucle:



• Sortie de boucle:







Version étudiants Unice

www.9ra.info

Recherche séquentielle dans un tableau

• On trouve l’élément avec le plus petit indice



• La répétition se termine, i est incrémenté, il atteindra

donc N



• Chaque étape nécessite

– Évaluation d’une expression booléenne

– Incrémentation



• Peut-on accélérer la recherche?



Y réfléchir pour la semaine prochaine

Version étudiants Unice

www.9ra.info

Recherche dichotomique

• On ne peut pas optimiser sans plus

d’informations sur les données

• On sait que chercher une informations est

plus facile si l’ensemble est ordonné

– Recherche d’un mot dans le dictionnaire

– Recherche dans l’annuaire

• On suppose donc notre tableau ordonné

∀k∈ [2,N] , tablo[k-1] ≤ tablo[k]

• Il faut aussi un ordre total

∀x,y∈ [1,N] , tablo[x] ≤ tablo[y] ou tablo[y] ≤ tablo[x]



Version étudiants Unice

www.9ra.info

Recherche dichotomique

exemple

Recherche de l’élément 78

1 3 5 6 10 11 14 25 26 40 41 78





1 3 5 6 10 11 14 25 26 40 41 78 11 ≤ 78





14 25 26 40 41 78 26 ≤ 78





40 41 78 41 ≤ 78





78 78 = 78

4 opérations pour trouver le bon élément

Combien pour une recherche séquentielle?



Version étudiants Unice

www.9ra.info

Recherche dichotomique - Algorithme

• On recherche l’élément x

• Si tableau vide, fin

• Prendre un élément au hasard (ak)

• Comparer cet élément à celui recherché

– x == ak : élément trouvé

– x ≤ ak : chercher l’élément avant

– x ≥ ak : chercher l’élément après









Version étudiants Unice

www.9ra.info

Recherche dichotomique - Algorithme

entier g ←1;

entier d ← N;

entier indiceTest ←1;

booléen trouve ← faux;

tant que ((g ≤ d) et (~trouve)) {

indiceTest ← (d-g)/2;

si (tablo[indiceTest] = x)



si (tablo[indiceTest] x)



}

Version étudiants Unice

www.9ra.info

Recherche dichotomique - Algorithme

• Invariant de boucle

(g ≤ d)

et

et

• Sortie de boucle

trouve ou ((g > d)

et

et

• Ce qui implique



Version étudiants Unice

www.9ra.info

Recherche dichotomique - Complexité

• Soit un tableau de taille N

• La première moitié du tableau aura pour taille

N/2

• La prochaine recherche se fera sur un tableau

de taille ½ * N/2 = N/2 2

• Le nombre maximum de recherches est donc

le plus grand entier p tel que 2p ≤ N

– « Combien de fois peut-on couper N en 2 ?»

• On en conclut p≈

• D’où une complexité dans le pire des cas en

Version étudiants Unice

www.9ra.info

Arbres binaires de recherche - 1

• Chaque nœud de notre arbre est représenté

par un objet

• Chaque nœud possède

– Un champs clé

– Un pointeur vers son fils gauche: gauche

– Un pointeur vers son fils droit: droit

– Un pointeur vers son parent: parent

• L’arbre T est référencé par sa racine

– Si T.racine = NIL l’arbre est vide



Version étudiants Unice

www.9ra.info

Arbre binaire de recherche - 2

• Un ABR a la propriété suivante:

Pour chaque nœud x, tous les éléments du sous arbre

gauche (resp. droit) ont des clés inférieures (resp.

supérieurs) ou égales à celle de x.



• Rappels

– La hauteur d’un arbre est la profondeur maximum de ses

nœuds

– Un arbre complet de hauteur h a 2h+1-1 nœuds



• Successeur:

Le successeur de x est le plus petit y tel que y > x

• On cherche dans un ABR en utilisant une méthode

de dichotomie

Version étudiants Unice

www.9ra.info

Cherchez l’ABR

• Des arbres suivants, lesquels sont des ABR?

5 7 5



2 7 2 5 2 7





1 3 6 8 1 3 6 8 1 6 8







5 5 5



2 9 4 7





1 3 3 10 1 6 6 8

Version étudiants Unice

www.9ra.info

Parcours infixe

• Comment afficher les éléments du plus petit au plus

grand?



parcoursInfix(noeud x) {

si x ≠ NIL

parcoursInfix(x.gauche);

afficher(x);

parcoursInfix(x.droit);

}



• Complexité?

• Autres parcours?



Version étudiants Unice

www.9ra.info

Recherche

• La recherche se fait par dichotomie

rechercher(noeud x, clé k) {

si x = NIL ou x.clé = k

alors retourne x;

si k nk-1

• Supposons que les deux sous arbres de Th sont Th-1

et Th-1

– alors on pourrait en remplacer un par Th-2 et garder la

propriété d’équilibrage

– on aurait alors moins de nœuds car nh-1 > nh-2

– notre arbre ne serait donc pas minimal:

CONTRADICTION!

Version étudiants Unice

www.9ra.info

Hauteur d’un arbre équilibré - 4

• Th a donc a un sous arbre Th-1 et un autre Th-2



Th = nh = nh-1 + nh-2 +1

Th-1 Th-2



• Ça ressemble étrangement à la suite de

Fibonacci!

• On montre (pas ici) que

h+2 h+2

1 1+ 5  1 1− 5 

nh =   −   −1

5 2 

  5 2 

 

Version étudiants Unice

www.9ra.info

Hauteur d’un arbre équilibré - 5

• Étant donné que le terme sera

petit



• Donc

• Comme nh nombre minimal de nœuds pour un arbre

équilibré de hauteur h, tout autre arbre équilibré de

hauteur h aura n nœuds tel que









• Ce qui donne

Version étudiants Unice

www.9ra.info

Complexité des opérations

• Nous avons donc montré qu’un arbre équilibré

compose de n nœuds aura une hauteur majorée par

1.44log(n+1)



• On sait que les opérations

d’ajout/recherche/suppression dans un arbre dans le

pire des cas ont une complexité en O(h)



• Conclusion: Dans un arbre binaire équilibré

composé de n noeuds, les opérations d’ajout, de

recherche et de suppression ont une complexité

dans le pire des cas en O(ln(n)).

Version étudiants Unice



Related docs
Other docs by benchaikh fati...
Technique de vente et négociation
Views: 3  |  Downloads: 0
Class String
Views: 1  |  Downloads: 0
Animation musicale et de dance
Views: 0  |  Downloads: 0
Exercices algorithmiques 2 + Corrigés
Views: 14  |  Downloads: 0
Exercices algorithmiques 1 + Corrigés
Views: 1  |  Downloads: 0
Exercices en java
Views: 16  |  Downloads: 4
Les collections
Views: 0  |  Downloads: 0
Class Clavier
Views: 1  |  Downloads: 0
Access
Views: 1  |  Downloads: 0
Cours Java 1
Views: 3  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!