[PDF] CONCEPTION ALGORITHMIQUE 1. Programmation Dynamique La





Previous PDF Next PDF



Arbres binaires de recherche [br] Algorithmique

Un arbre binaire de recherche est une structure de donnée qui permet de représen- sont l'insertion la suppression et la recherche d'une valeur.



INF601 : Algorithme et Structure de données - Cours 2 : TDA Arbre

27 févr. 2010 INF601 : Algorithme et Structure de données ... adjonction et suppression peuvent être en O(n) ... celle de l'arbre binaire de recherche ...



Algorithmes sur les arbres binaires de recherche

Seconde implémentation : Arbre Binaire de Recherche Recherche puis suppression dans le cas où l'élément est dans une feuille. `a supprimer.



ARBRES BINAIRES DE RECHERCHE

temps de ?(logn) au pire tableau trié : insertion/suppression en ?(n) au pire cas Dans un arbre binaire de recherche chaque nœud a une clé.



Chapitre 2 Structures de données arborescentes : arbres binaires

2. Arbres binaires de recherche. 2.1 Algorithmes de recherche dans un ABR. 2.2 Insertion et suppression dans un ABR. 2.3 Équilibrage des ABR.



CONCEPTION ALGORITHMIQUE 1. Programmation Dynamique La

des arbres binaires de recherche optimaux. 1. Programmation Dynamique Nous allons décomposer l'algorithme de suppression en trois parties.



Arbres rouge et noir [rn] Algorithmique

insertion et suppression la recherche étant celles des arbres binaires de Un arbre binaire de recherche est un arbre rouge et noir s'il satisfait les ...



Révision Final

Si k est dans l'arbre l'algorithme chercher(k) se terminera sur un noeud interne v. Supprimer dans un arbre binaire de recherche (suite).



Arbres AVL AV - L

exécuter l'algorithme d'insertion d'un arbre binaire de recherche. Pour supprimer un élément de clé k dans un arbre AVL on commence par.



Rappels algorithmiques

parcours pour les arbres binaires les algorithmes de recherche et de mise à suppression de la clé à la racine dans l'arbre binaire de recherche de la.



Arbres binaires de recherche [br] Algorithmique - Unisciel

Un arbre binaire de recherche est une structure de donn ee qui permet de repr esen-ter un ensemble de valeurs si l’on dispose d’une relation d’ordre sur ces valeurs Les op erations caract eristiques sont l’insertion la suppression et la recherche d’une valeur Ces op erations sont peu cou^teuses si l’arbre n’est pas trop d es



Algorithmique avancée - Arbres binaires de recherche

Un arbre binaire de recherche (ABR) est un arbre binaire dans lequel chaque nœud possède une clé telle que • chaque nœud du sous-arbre gauche possède une clé inférieure ou égale à celle du nœud considéré • chaque nœud du sous-arbre droit possède une clé supérieure ou égale à celle-ci



ARBRES BINAIRES DE RECHERCHE - Université de Montréal

A l’aide d’un arbre de recherche on peut impl` ementer une table de symboles d’une´ maniere tr` es ef?cace ` Operations :´ recherche d’une valeur particuliere` insertion ou suppression d’une valeur recherche de min ou max et des autres Pour la discussion des arbres binaires de recherche on va considerer les pointeurs´



Algo 2 séance 6 Arbres binaires de recherche (ABR (suite

Algo 2 { s eance 6 Arbres binaires de recherche (ABR (suite) : suppression et arbres equilibr es Franck Hetroy et Denis Trystram mars 2017 1/37 ECOLE NATIONALE SUPERIEURE 1 / 37



Searches related to arbre binaire de recherche algorithme suppression PDF

mais insertion/suppression en (1) [si non-tri´e]? tableau tri´e : recherche binaire — temps de (log n) au pire mais insertion/suppression en ( n) au pire cas 13 2 Arbre binaire de recherche (ABR) (fr) 9 6 12 3 8 11 15 1 4 7 19 chaque nœud interne poss`ede une cl ´e : les cl es sont´ comparables De?nition 13 1 ´ Dans un arbre binaire

Qu'est-ce que l'arbre binaire de recherche?

Un arbre binaire de recherche (ABR) est un type de données abstrait constitué d’un couple (clé,valeur).  Chaque élément a une clé unique, i.e une clé identi?e un élément de façon unique.  Les clés dans un sous arbre gauche non vide doivent être inférieures à la clé de la racine de ce sous arbre.

Comment manipuler un arbre binaire?

?Un arbre binaire est : ? soit l’arbre vide ? soit un nœud qui a exactement deux fils (éventuellement vides) ?Pour manipuler les arbres binaires, on a besoin de primitives ? d’accès ? de test ? de construction Licence Lyon1 - UE LIF3 M. Lefevre - N. Guin - F. Zara

Quelle est la structure hiérarchique d'un arbre binaire?

NSI Terminale S2 : Structures hiérarchiques : Arbres 2/19 binaire. Dans un arbre binaire, on a au maximum 2 branches qui partent d'un élément (pour le système de fichiers, on a 7 branches qui partent de la racine : ce n'est donc pas un arbre binaire). Dans la suite nous allons uniquement travailler sur les arbres binaires 2. Arbre binaire

Comment supprimer un nœud d’un arbre binaire de recherche ?

Supprimez récursivement minnode du sous-arbre de droite. Retournez le pointeur vers la racine d’origine. En moyenne, la complexité temporelle de la suppression d’un nœud d’une BST est de l’ordre de la hauteur de l’arbre binaire de recherche. En moyenne, la hauteur d’une BST est de O (logn).

CONCEPTION ALGORITHMIQUE

OLIVIER BODINI

R esum´e.Nous abordons, dans cette s´eance, les algorithmes de type Programmation Dynamique. Nous illustrons ce type de programmation par un premier exemple introductif concernant le calcul dun-i`eme nombre de Fibonacci, puis par un algorithme plus cons´equent permettant de construire des arbres binaires de recherche optimaux.

1.Programmation Dynamique

La programmation dynamique, comme le principe Diviser pour R´egner, est un principe algo- rithmique reposant sur une approche r´ecursive des probl`emes. Certains probl`emes, quand on les

scinde, font appel plusieurs fois aux mˆemes sous-probl`emes, ou `a des sous-probl`emes qui ne sont

pas ind´ependants les uns des autres. Dans ce cas, les m´ethodesDiviser pour R´egner ne sont pas

aussi efficaces. En voici un exemple tr`es simple. La suite de Fibonacci est d´efinie r´ecursivement par

F

0= 0,F1= 1 etFn+2=Fn+1+Fnpourn≥0. Supposons que l"on cherche `a calculer lek-i`eme

terme de cette suite. Si on utilise directement le principe Diviser pourR´egner suivant : Diviser :On remarque que pour calculerFk, il suffit de savoir calculerFk-1etFk-2. R

egner :On r´esout le probl`eme r´ecursivement pourFk-1etFk-2si l"indice est sup´erieur `a 2,

sinon on remplace directement.

Combiner :On additionneFk-1etFk-2.

On obtient le pseudo-code ci-dessous :

Algorithme 1: FIBO

Entr´ees: Un entier positifn.

Sorties: Len-i`eme nombre de Fibonacci.

FIBO(n)1

sin <2alors2 retournern3 sinon4 retournerFIBO(n-1)+FIBO(n-2)5

Analyse de l"algorithme FIBO :

Preuve de Terminaison :

Imm´ediat.

Preuve de Validit´e :

Imm´ediat.

Analyse de la Complexit´een nombre d"additions : On a clairement la relation de r´ecurrence suivante pour le nombre d"additions :T(0) = 0,T(1) = 0 etT(n) =T(n-1)+T(n-2)+1. Un calcul rapide montre queT(n) = Θ(φn) avecφ= (1+⎷ 5)/2.

Cette approche se r´ev`ele trop couteuse, car on calcule plusieurs fois les mˆemes sous-probl`emes

comme le montre le d´eroulement de l"algorithme pour trouverF5:

1er niveau de r´ecursion : Pour trouverF5, on calculeF4etF3

2`eme niveau : Pour trouverF4, on calculeF3etF2et pour trouverF3, on calculeF2.

3`eme niveau : Pour trouverF3, on calculeF2

1

2Conceptions algorithmiques

En conclusion, pour trouverF5, on a calcul´e 1 foisF4, 2 foisF3, 3 foisF2. Un algorithme Diviser pour

R´egner fait plus de travail que n´ecessaire, en r´esolvant plusieurs fois des sous-probl`emes identiques.

Alors qu"´evidement, il aurait suffit de les calculer chacun une fois! La programmation dynamique permet de pallier `a ce probl`eme. Pour ce faire, un algorithme de type Programmation Dynamique

r´esout chaque sous-probl`eme une seule fois et m´emorise sa r´eponse dans un tableau, ´evitant ainsi le

recalcul de la solution chaque fois que le sous-probl`eme est rencontr´e de nouveau. Voici le pseudo-code d"un algorithme de type Programmation Dynamique pour trouver la valeur dun-i`eme nombre de Fibonacci. Attention, il faut faire l"initialisation du tableau en dehors de la fonction r´ecursive.

Algorithme 2: FIGO-PG-REC

Entr´ees: Un entier positifn.

Sorties: Len-i`eme nombre de Fibonacci.

INITIALISATION(n)1

Cr´eer un tableauTde longueurninitialis´e `a Nil;2

T[0] :=0; T[1] :=1;3

FIBO-PG-REC(n)4

sin <2alors5 retournern6 siT[n-1] =Nilalors7 T[n-1] := FIBO-PG-REC(n-1)(on verra pourquoi il est inutile de testerT[n-2] =Nil)8

T[n] :=T[n-1] +T[n-2];9

retournerT[n]10

Analyse de l"algorithme FIBO-PG-REC :

Preuve de Terminaison :

FIBO-PG-REC(n) s"arrˆete quandnvaut 0 ou 1. Comme FIBO-PG-REC(n) appelle uniquement (de mani`ere directe) FIBO-PG-REC(n-1). On en d´eduit que si FIBO-PG-REC(n-1) s"arrˆete, alors l"algorithme FIBO-PG-REC(n) s"arrˆete aussi. Par induction, on a la preuve de terminaison.

Preuve de Validit´e :

et pourj > n, on aT[j] =Nil. C"est vrai quandnvaut 1. Supposons qu"`a la sortie de FIBO-PG- REC(n)Tsoit bien rempli jusqu"`a la casenet pourj > n, on aT[j] =Nil, alors quand on lance FIBO-PG-REC(n+1), `a la ligne 8, on fait l"appel FIBO-PG-REC(n) et donc le tableauTest alors rempli jusqu"`an, enfin ligne 9, on remplit correctement la casen+ 1. Donc `a la sortie de FIBO-

PG-REC(n+1) le tableau est bien rempli jusqu"`an+1 et vide apr`es. Par r´ecurrence, la validit´e de

l"algorithme s"ensuit. Analyse de la Complexit´een nombre d"additions : FIBO-PG-REC(n+1) fait une addition ligne 9 et appelle FIBO-PG-REC(n) ligne 8. Donc le nombre d"additions v´erifie :T(0) = 0,T(1) = 0 etT(n+ 1) =T(n) + 1. Ceci donneT(n) = Θ(n). On privil´egiera donc cette approche quand la solution d"un probl`eme sur une instance de taille

ns"exprime en fonction de solutions du mˆeme probl`eme sur des instances de taille inf´erieure `anet

qu"une impl´ementation r´ecursive du type diviser pour R´egner conduit `a rappeler de nombreuses fois

les mˆemes sous-probl`emes.

Institut Galil´ee, Ann´ee 12/133

Il y a en fait deux possibilit´es pour impl´ementer un algorithme de type Programmation Dyna-

mique qui d´ependent de la mani`ere o`u l"on remplit le tableau (it´erative ou r´ecursive) :

- Une version r´ecursive, appel´ee aussimemoizing, pour laquelle `a chaque appel, on regarde dans

le tableau si la valeur a d´ej`a ´et´e calcul´ee . Si c"est le cas, on r´ecup`ere la valeur m´emoris´ee. sinon,

on la calcule et on la stocke. Cette m´ethode permet de ne pas avoir `a connaitre `a l"avance les valeurs `a calculer. C"est celle utilis´ee pour le pseudo-code de FIBO-PG-REC.

- Une version it´erative o`u l"on initialise les cases correspondant auxcas de base. Puis on remplit

le tableau selon un ordre permettant `a chaque nouveau calcul de n"utiliser que les solutions d´ej`a calcul´ees. Cette derni`ere donne pour le calcul dun-i`eme nombre de Fibonacci, le pseudo-code suivant :

Algorithme 3: FIGO-PG-IT

Entr´ees: Un entier positifn.

Sorties: Len-i`eme nombre de Fibonacci.

FIBO-PG-IT(n)1

Cr´eer un tableauTde longueurn; T[0] :=0; T[1] :=1;2 pouriallant de2`anfaire3

T[i] :=T[i-1] +T[i-2]4

retournerT[n]5 On remarque que dans ce cas tr`es simple, il est mˆeme possible de nepas cr´eer de tableau en faisant :

Algorithme 4: FIGO-PG-IT2

Entr´ees: Un entier positifn.

Sorties: Len-i`eme nombre de Fibonacci.

FIBO-PG-IT2(n)1

sin <2alors2 retournern3 i:= 0;j:= 1;4 pourkallant de2`anfaire5 temp:=j;j:=j+i;i:=temp;6 retournerj7

Analyse de l"algorithme FIBO-PG-IT2 :

Preuve de Terminaison :

Imm´ediat.

Preuve de Validit´e :

Consid´erons l"invariant de boucle surksuivant :ivautFk-2etjvautFk-1. Quand on entre pour la premi`ere fois dans la boucle c"est vrai. Maintenant, supposons qu"au d´ebut de lak-i`eme it´eration, on ai=Fk-2etj=Fk-1, alors, ligne 4,jdevientFketiprend la valeur detemp qui estj=Fk-1. Donc l"invariance est pr´eserv´ee. A la sortie de la bouclejvaut doncFn, ce qui est le r´esultat attendu. Analyse de la Complexit´een nombre d"additions : FIBO-PG-IT2(n) fait une addition `a chaque it´eration de la boucle surk, soitn-1 additions.

Ceci donne doncT(n) = Θ(n).

1.1.Arbres, Arbres binaires, Arbres binaires de recherche optimaux.

4Conceptions algorithmiques

1.1.1.Arbres.Passons un instant sur la d´efinition d"arbres. Nous introduisons icides arbres enra-

cin´es planaires (c"est `a dire ayant un sommet distingu´e (la racine)et tel que les fils d"un noeud form´e

une liste ordonn´ee. la notion d"arbres est omnipr´esente dans les sciences (arbres phylog´en´etiques en

biologie, arbres des choix et processus `a branchement en probabilit´e, arbres des appels r´ecursifs,

arbres d"expressions et arbres de recherche en informatiques),car elle permet de mod´eliser les struc-

tures hi´erarchiques simples. Pour ˆetre pr´ecis, nous commen¸cons par introduire la notion de classe

combinatoire. D´efinition 1.Uneclasse combinatoireC= (E,t)est constitu´e d"un (multi-)ensembleEet d"une fonctiontdeEdansNtel que pour toutk >0,{a?E,t(a) =k}est fini. Les ´el´ements deEsont appel´es desobjetset pour tout objeta,t(a)est appel´e latailledea.

Nous allons construire r´ecursivement des classes combinatoires,pour se faire, il nous faut d´efinir

des classes de bases et des constructeurs.

La classeE= ({?},??→0) est appel´ee la classeneutre, elle contient un unique ´el´ement de taille

0. La classeZ= ({?},??→1) est appel´ee la classeatomique, elle contient un unique ´el´ement de

taille 1. SoitC1= (E1,t1) etC2= (E2,t2), on d´efinit l"union disjointe, not´eC1+C2, comme la classe (E1?E2,t) o`ut(a) vautti(a) sia?Ei. Noter que sia?E1∩E2alorsaest pr´esent dansE1?E2 avec une multiplicit´e qui est la somme de sa multiplicit´e dansE1et dansE2.

SoitC1= (E1,t1) etC2= (E2,t2), on d´efinit leproduit, not´eC1×C2, comme la classe (E1×E2,t)

o`ut((a,b)) vautt1(a) +t2(b).

D´efinition 2.Unarbre binaireest soit vide, soit form´e d"un noeud, sa racine, et de deux sous-

arbres binaires, l"un appel´efils gauche, l"autrefils droit.

Propri´et´e 1.La classeTdes arbres binaires dont la taille est le nombre de noeuds internes v´erifie

l"´equation structurelle r´ecursiveT=E+T × Z × T. On parle parfois d"arbre binaireplanairepour mentionner que l"on distingue la gauche de la droite. Nous nous int´eressons aux arbres permettant d"acc´eder `a des informations. Pour cela, chaque

noeud contient unecl´equi est g´en´eralement un nombre. Un arbre non vide est donc enti`erement

d´ecrit par le triplet (fils gauche, cl´e de la racine, fils droit). Cetted´efinition r´ecursive se traduit

directement en une sp´ecification de programmation.

La d´efinition r´ecursive des arbres binaires (comme pour les listes)conduit naturellement `a des

algorithmes de manipulations qui seront r´ecursifs (voir TDs, pourdes algorithmes calculant la taille,

la hauteur, le nombre de feuilles,... ). Nous pouvons par exemple d´efinir 3 types de parcours des noeudsd"un arbre binaire.

Le parcours pr´efixe :

Algorithme 5: Pr´efixe

Entr´ees: Un arbre binaireT.

Sorties: Rien mais affiche le parcours pr´efixe deT.

Pr´efixe(T)1

siNonVide(T)alors2

Afficher la cl´e de la racine(T);3

Pr´efixe(ArbreGauche(T));4

Pr´efixe(ArbreDroit(T));5

Le parcours suffixe ou postfixe :

Institut Galil´ee, Ann´ee 12/135

Algorithme 6: Suffixe

Entr´ees: Un arbre binaireT.

Sorties: Rien mais affiche le parcours suffixe deT.

Suffixe(T)1

siNonVide(T)alors2

Suffixe(ArbreGauche(T));3

Suffixe(ArbreDroit(T));4

Afficher la cl´e de la racine(T);5

Le parcours infixe :

Algorithme 7: Infixe

Entr´ees: Un arbre binaireT.

Sorties: Rien mais affiche le parcours infixe deT.

Infixe(T)1

siNonVide(T)alors2

Infixe(ArbreGauche(T));3

Afficher la cl´e de la racine(T);4

Infixe(ArbreDroit(T));5

D´efinition 3.Un arbre g´en´eral (planaire) est un arbre dont chaque noeuda un nombre quelconque

de fils ordonn´e de gauche `a droite.

Dans point de vue informatique, il semble donc naturel de repr´esenter les fils d"un noeud dans une

liste (chaˆın´ee). Ainsi, chaque noeud contient deux r´ef´erences, celle `a son fils aˆın´e (le plus `a gauche

des fils), et celle `a son fr`ere cadet (celui qui se trouve juste `asa droite).

Mais cette repr´esentation donne explicitement une correspondance entre un arbre g´en´eral et un

arbre binaire. Il suffit de rebaptiser le fils ain´e, fils gauche et le fr`ere cadet, fils droit. Figure 1.Correspondance arbres g´en´eraux - arbres binaires D´efinition 4.Un arbre binaireTest unarbre binaire de recherchesi, pour tout noeudsdeT, les contenus des noeuds du sous-arbre gauche dessont strictement inf´erieurs au contenu des, et que les contenus des noeuds du sous-arbre droit dessont strictement sup´erieurs au contenu des.

Propri´et´e 2.Dans un arbre binaire de recherche, le parcours infixe fournit les contenus des noeuds

en ordre croissant.

Propri´et´e 3.Si un noeud poss`ede un fils gauche, son pr´ed´ecesseur dans le parcours infixe est le

noeud le plus `a droite dans son sous-arbre gauche. Ce noeud n"est pas n´ecessairement une feuille,

mais il n"a pas de fils droit.

6Conceptions algorithmiques

Figure 2.Un arbre binaire de recherche

1.1.2.Op´erations ´el´ementaires sur les arbres binaires de recherche.Nous allons proposer des algo-

rithmes pour la recherche, l"insertion et la suppression d"une clef dans un arbre binaire de recherche.

Algorithme 8: Recherche

Entr´ees: Un arbre binaireT, un entierx.

Sorties: .

Recherche(T,x)1

siVide(T)alors2 retournerFaux;3 six=racine(T)alors4 retournerVrai;5 six Recherche(ArbreGauche(T,x));7 sinon8

Recherche(ArbreDroit(T,x));9

Algorithme 9: Ins´erer

Entr´ees: Un arbre binaireT, un entierx.

Sorties:Tavecxins´er´e.

Ins´erer(T,x)1

siVide(T)alors2 retournerCr´eerNoeud(Null,x,Null);3 six ArbreGauche(T)=Inserer(x, ArbreGauche(T));5 sinon6

ArbreDroit(T)=Inserer(x, ArbreDroit(T));7

La suppression d"une cl´e dans un arbre est une op´eration plus complexe. Elle s"accompagne de la suppression d"un noeud. Comme on le verra, ce n"est pas toujoursle noeud qui porte la cl´e `a

supprimer qui sera enlev´e. Soitsle noeud qui porte la cl´ex`a supprimer. Trois cas sont `a consid´erer

selon le nombre de fils du noeudx: - si le noeudsest une feuille, alors on l"´elimine; - si le noeudsposs`ede un seul fils, on ´elimineset on?remonte?ce fils.

- si le noeudsposs`ede deux fils, on cherche le pr´ed´ecesseurtdes. On remplace la cl´e despar

la cl´e det, et on ´eliminet. Nous allons d´ecomposer l"algorithme de suppression en trois parties. La premi`ere, Supprimer,

recherche le noeud portant la cl´e `a supprimer et appel la deuxi`eme, SupprimerRacine. Elle effectue

la suppression selon les cas ´enum´er´es ci-dessus. La troisi`eme, dernierDescendant est une m´ethode

auxiliaire qui calcule le pr´ed´ecesseur d"un n?ud qui a un fils gauche.

Institut Galil´ee, Ann´ee 12/137

Algorithme 10: Supprimer

quotesdbs_dbs26.pdfusesText_32
[PDF] parcours en profondeur arbre

[PDF] arbre binaire complet

[PDF] dénombrement cours

[PDF] arbre de probabilité pile ou face

[PDF] arbre de probabilité seconde

[PDF] arbre probabilité conditionnelle

[PDF] arbre de décision exercices corrigés

[PDF] arbre de décision data mining

[PDF] cours arbre de décision

[PDF] classification par arbre de décision

[PDF] arbre de décision exemple

[PDF] arbre de décision cart

[PDF] construire un arbre de décision

[PDF] arbre de décision définition

[PDF] dénombrement cours 1ere s