Chapitre 5 structures hierarchiques (arbres)

233
CHAPITRE V: Université Saad Dahlab de Blida Faculté des Sciences Département d’Informatique Licence d’Informatique Semestre 4 (2 ème année) Algorithmique et Structures de Données CHAPITRE V: STRUCTURES HIÉRARCHIQUES M me AROUSSI 2014-2015 Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/

Transcript of Chapitre 5 structures hierarchiques (arbres)

  • CHAPITRE V:

    Universit Saad Dahlab de Blida

    Facult des Sciences

    Dpartement dInformatique

    Licence dInformatique

    Semestre 4 (2me anne)

    Algorithmique et Structures de Donnes

    CHAPITRE V:

    STRUCTURES HIRARCHIQUES

    Mme AROUSSI

    2014-2015

    Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/

  • Introduction

    Dfinitions et Terminologies

    Topologie

    PLAN DU CHAPITRE V

    Topologie

    Les Arbres Binaires

    Les Arbres Binaires de Recherche (ABR)

    Les Arbres AVL

    Les TAS

    Les Arbres m-aire

    2

  • Dans les tableaux, nous avons :

    Un accs direct par indice (rapide)

    Linsertion et la suppression ncessitent des dcalages

    Dans les Listes Linaires Chanes, nous avons :

    Un accs squentiel lent

    INTRODUCTION

    3

    Un accs squentiel lent

    Linsertion et la suppression se font uniquement par modification de

    chanage

    Les arbres reprsentent un compromis entre les deux :

    Un accs relativement rapide un lment partir de sa cl

    Linsertion et la suppression non coteuses

  • De plus, les arbres sont des structures de donnes

    fondamentales en informatique, trs utiliss dans tous les

    domaines, parce quils sont bien adapts la

    reprsentation naturelle dinformations homognes

    INTRODUCTION

    4

    reprsentation naturelle dinformations homognes

    organises, et dune grande commodit et rapidit de

    manipulation.

  • Leur usage est multiple, car il capte lide de hirarchie;

    titre dexemples, nous pouvons citer:

    Dcoupage dun livre en parties, chapitres, sections,

    paragraphes,

    INTRODUCTION

    5

    paragraphes,

    Livre

    C1 C2 C3

    S1.1 S1.2 S2.1 S2.2 S2.3

    S2.1.1 S2.1.2

  • Leur usage est multiple, car il capte lide de hirarchie;

    titre dexemples, nous pouvons citer:

    Hirarchies de fichiers,

    INTRODUCTION

    6

  • Leur usage est multiple, car il capte lide de hirarchie;

    titre dexemples, nous pouvons citer:

    Expressions Arithmtiques

    INTRODUCTION

    -

    7

    -

    A *

    + F

    B *

    C -

    D E

    Lexpression A - (B + C * (D - E)) * F

    se reprsente facilement par un arbre

    o apparat clairement la priorit des

    oprations:

  • DFINITION & TERMINOLOGIES

    Un arbre est une structure de donnes (souvent dynamique)

    reprsentant un ensemble de valeurs organises

    hirarchiquement (non linaire). Chaque valeur est stocke dans

    un nud. Les nuds sont connects entre eux par des artes

    qui reprsentent des relations parent/fils.

    8

    A

    C DB

    E G HF I

    LKJ

    NudsArtes

  • DFINITION & TERMINOLOGIES

    Racine: est le nud qui n'a

    pas de prdcesseur (parent) et

    possde zro ou plusieurs fils. La

    racine constitue la caractristique

    d'un arbre.

    A

    C DB

    E G HF I

    Racine

    Nud interne

    9

    Feuille : est un nud qui n'a

    pas de successeur (fils). Une

    feuille est aussi appele un nud

    externe.

    Nud interne : est tout nud

    qui admet au moins un

    successeur (fils).

    E G HF I

    LKJ

    Feuilles

  • DFINITION & TERMINOLOGIES

    Fils dun nud : sont ses

    successeurs. Dans l'exemple, F,

    G, H, et I sont les fils du nud D.

    Frres : sont les successeurs

    ou les fils issus d'un mme nud

    A

    C DB

    10

    (parent direct). Dans l'exemple,

    B, C et D sont des frres.

    Pre : est un nud qui admet

    au moins un successeur (fils).

    Dans l'exemple, D est le pre des

    nuds F, G, H et I.

    E G HF I

    LKJ

  • DFINITION & TERMINOLOGIES

    Sous arbre : est une portion

    de l'arbre. Dans l'exemple, le

    nud G avec ces deux fils J et K

    constituent un sous arbre.

    Une branche est une suite de

    A

    C DB

    11

    nuds connects de pre en fils

    (de la racine une feuille).

    A-B-E

    A-C

    A-D-F

    A-D-G-J

    ..

    E G HF I

    LKJ

  • DFINITION & TERMINOLOGIES

    Descendants dun nud :

    sont tous les nuds du sous arbre

    de racine nud. Dans l'exemple,

    les descendants de D sont D, F,

    G, H, I, J, K et L.

    A

    C DB

    12

    Ascendants dun nud :

    sont tous les nuds se trouvant

    sur la branche de la racine vers

    ce nud. Dans l'exemple, les

    ascendants de J sont G, D et A.

    Les ascendants de E sont B et A.

    E G HF I

    LKJ

  • DFINITION & TERMINOLOGIES

    Taille dun arbre: est le

    nombre de nuds quil possde.

    Taille de larbre ci contre = 12

    Un arbre vide est de taille

    gale 0.

    Degr dun nud : est le

    A

    C DB

    13

    Degr dun nud : est le

    nombre de ses fils. Dans

    l'exemple, le degr de B est 1, le

    degr de D est 4.

    Degr dun arbre : est le

    degr maximum de ses nuds.

    Degr de larbre ci contre = 4

    E G HF I

    LKJ

  • DFINITION & TERMINOLOGIES

    Le niveau d'un nud: est la distance qui le spare de la

    racine:

    Le niveau de la racine = 0

    Le niveau de chaque nud est gale au niveau de son pre plus 1

    Le niveau du nud contenant G' est gal 2.

    RacineNiveaux

    14

    Racine

    ...........

    .........

    .......

    ........

    A

    C DB

    E G HF I

    LKJ

    Niveaux

    0

    1

    2

    3

  • DFINITION & TERMINOLOGIES

    La profondeur d'un arbre (ou sa hauteur) : est le plus

    grand niveau, c--d la distance entre la racine et la feuille la plus

    lointaine. Dans l'exemple, la profondeur de l'arbre est gal 3

    RacineNiveaux

    15

    Racine

    ...........

    .........

    .......

    ........

    A

    C DB

    E G HF I

    LKJ

    Niveaux

    0

    1

    2

    3

  • DFINITION & TERMINOLOGIES

    Fort : est un ensemble d'arbres.

    A

    C DB

    16

    E

    G

    HF I

    L

    KJ

  • DFINITION & TERMINOLOGIESDfinition rcursive

    Cas particulier: NIL est un arbre vide, contenant zro nud

    RacineRacine de T1

    Cas gnral: SI n est un

    nud et si T1, T2, ...Tm sont

    des arbres, ALORS on peut

    17

    T1

    T1

    Racine de T1

    construire un nouvel arbre en

    connectant T1, T2, ...Tm

    comme des fils n.

    Chaque Ti est dfinit de la

    mme manire (rcursivement).

    T1, T2, ...Tm sont alors des

    sous- arbres de n.

  • TYPOLOGIE

    Arbre m-aire : un arbre m-aire dordre n est un arbre ou le

    degr maximum dun nud est gal n.

    B-Arbre : Un arbre B dordre n est un arbre o :

    la racine a au moins 2 fils

    chaque nud, autre que la racine, a entre n/2 et n fils

    tous les nuds feuilles sont au mme niveau

    18

    tous les nuds feuilles sont au mme niveau

    Arbre binaire : cest un arbre o le degr maximum dun

    nud est gal 2.

    Arbre de Recherche Binaire : cest un arbre binaire o la cl

    de chaque nud est suprieure celles de ses descendants

    gauche, et infrieure celles de ses descendants droits.

  • PARTIE II:PARTIE II:

    ARBRES BINAIRES

  • Dfinition

    Modle

    PLAN DE LA PARTIE II

    Parcours

    Reprsentation contige

    Exemples dapplication20

  • DFINITION

    Un arbre binaire est un arbre o chaque nud est connect

    deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).

    Donc, un arbre binaire est un arbre de degr 2, cest--dire que

    chaque nuds a au plus deux fils. Ainsi, le premier fils d'un nud

    n est appel Fils-Gauche (FG) et le deuxime fils est appel Fils-

    21

    Droit (FD). A

    B

    C KG

    F

    H I

    J

    racine

    D

    NIL

  • DFINITION

    Un arbre binaire est dit strictement binaire si chaque nud

    interne (non feuille) a exactement 2 fils diffrents de NIL.

    Si un arbre strictement binaire a n feuilles Alors :

    le nombre total de ses nuds = 2n-1.

    le nombre de ses nuds non feuilles (nuds internes) = n-1

    22

    A

    B

    C KG

    F

    H I

    J

    racine

    D

    M

    Le nombre de feuilles : n=6

    (C, D,H, M, J, K)

    Le nombre total de nuds :

    2n-1=11

    Le nombre de nuds

    internes: n-1=5 (A, B, F, G, I)

  • DFINITION

    Un arbre binaire complet est un arbre strictement binaire o

    toutes les feuilles sont au mme niveau.

    Dans un arbre binaire complet de profondeur d :

    le nombre total de nuds n = 20 + 21 + 22 + ... 2d = 2d+1-1

    ainsi, d = log2(n+1) 1

    le nombre de nuds internes =

    23

    le nombre de nuds internes = 2d-1

    le nombre de feuilles = 2d

    le nombre de nuds dans le niveau i = 2i

    racine

    D

    A

    B

    C KG

    F

  • DFINITION

    Un arbre binaire complet est un arbre strictement binaire o

    toutes les feuilles sont au mme niveau.

    Dans lexemple ci dessous:

    d = 2

    le nombre total de nuds n = 23-1 = 7

    le nombre de nuds internes =

    24

    le nombre de nuds internes = 22-1 = 3

    le nombre de feuilles = 22 = 4

    le nombre de nuds dans le niveau 1 = 2

    racine

    D

    A

    B

    C KG

    F

  • MODLE

    L'arbre est implment souvent de manire dynamique

    comme un ensemble de maillons (nuds) chans entre eux.

    La structure d'un nud de l'arbre est la suivante :

    25

    Structure de DonnesTYPE Tnoeud = STRUCTURE

    Info : TypeqqFG : * TnoeudFD : * Tnoeud

    FINVAR Arbre : * Tnoeud

  • MODLE

    On dfinit le modle (machine abstraite) suivant dun arbre

    binaire:

    Fonction Rle

    Info(p) permet d'accder l'information du nud p

    FG(p) permet d'accder l'information de fils gauche du nud p

    FD(p) permet d'accder l'information de fils droit du nud p

    26

    FD(p) permet d'accder l'information de fils droit du nud p

    Aff_info(p, x) permet de modifier l'information du nud p

    Aff_FG(p, x) permet de modifier l'information de fils gauche du nud p

    Aff_FD(p, x) permet de modifier l'information de fils droit du nud p

    Crer_noeud(x)permet de crer un nud avec x comme information etretourne la rfrence du nud. Le nud cr a Nil comme filsgauche et droit.

    Liberer_noeud(p) permet de librer le nud rfrenc par p.

  • PARCOURS

    Le parcours dun arbre consiste passer par tous ses

    nuds.

    Les parcours permettent deffectuer tout un ensemble de

    traitement sur les arbres.

    On distingue deux types de parcours :

    27

    On distingue deux types de parcours :

    Des parcours en profondeur (depth-first) explorent

    l'arbre branche par branche. Parmi lesquels: le Prordre,

    lInordre et le Postordre.

    Des parcours en largeur (breadth-first) explorent

    l'arbre niveau par niveau

  • PARCOURS EN PROFONDEUR

    Dans un parcours en profondeur, on descend le plus

    profondment possible dans larbre puis, une fois quune

    feuille a t atteinte, on remonte pour explorer les autres

    branches en commenant par la branche la plus basse

    parmi celles non encore parcourues.

    28

    parmi celles non encore parcourues.

    Le parcours en profondeur peut se faire en :

    Prordre (Prfixe) : o on affiche la racine avant ses fils (Racine

    FG FD),

    Inordre (Infixe) : o on affiche le fils gauche avant sa racine et

    son frre droit (FG Racine FD),

    Postordre(Postfixe) : o on affiche les fils avant leur racine (FG

    FD Racine).

  • PARCOURS EN PROFONDEUR

    Ces parcours (prordre, inordre et postordre) sont des

    parcours simples dfinir et programmer (en rcursif).

    Soit R un arbre binaire (pouvant tre vide : R=NIL).

    S'il n'est pas vide (n pointe le nud racine), alors il a la forme

    suivante (avec T1 et T2 des sous arbres dfinis de la mme manire

    29

    que n) :R

    T1 T2

    Sous arbre gauche G Sous arbre droit D

  • PARCOURS PREORDRE

    Le parcours prordre de R (s'il n'est pas vide) consiste

    visiter le nud racine (R) ensuite parcourir rcursivement

    en prordre les sous arbres T1 (sous arbre gauche) puis T2

    (sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

    30

    R

    T1 T2

    Sous arbre gauche G Sous arbre droit D

  • PARCOURS PREORDRE

    Le parcours prordre de R (s'il n'est pas vide) consiste

    visiter le nud racine (R) ensuite parcourir rcursivement

    en prordre les sous arbres T1 (sous arbre gauche) puis T2

    (sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

    31

    A

    B C

    E GD F

    H I

    HID EB FGA CRsultat de parcours:

  • PARCOURS PREORDRE

    La procdure (rcursive) qui affiche les valeurs en

    parcours prordre dun arbre de racine R est :

    Procdure Prordre( R:* Tnoeud )Dbut

    SI R NIL

    32

    SI R NILecrire( Info(R) )Prordre( FG(R) )Prordre( FD(R) )

    FSIfin

  • PARCOURS INORDRE

    Le parcours inordre de R (s'il n'est pas vide) consiste

    d'abord parcourir rcursivement en inordre le sous arbre

    gauche T1, puis visiter le nud racine (R) ensuite parcourir

    rcursivement en inordre le sous arbre droit T2 ce qui donne

    [ T1 , R , T2 ou GRD ]

    33

    [ T1 , R , T2 ou GRD ]

    R

    T1 T2

    Sous arbre gauche G Sous arbre droit D

  • PARCOURS INORDRE

    Le parcours inordre de R (s'il n'est pas vide) consiste

    d'abord parcourir rcursivement en inordre le sous arbre

    gauche T1, puis visiter le nud racine (R) ensuite parcourir

    rcursivement en inordre le sous arbre droit T2 ce qui donne

    [ T1 , R , T2 ou GRD ]

    34

    [ T1 , R , T2 ou GRD ]

    A

    B C

    E GD F

    H I

    Rsultat de parcours: H ID EB F GA C

  • PARCOURS INORDRE

    La procdure (rcursive) qui affiche les valeurs en

    parcours inordre dun arbre de racine R est :

    Procdure Inordre( R:*Tnoeud )Dbut

    SI R NIL

    35

    SI R NILInordre( FG(R) )ecrire( Info(R) )Inordre( FD(R) )

    FSIfin

  • PARCOURS POSTORDRE

    Le parcours postordre de R (s'il n'est pas vide) consiste

    d'abord parcourir rcursivement en postordre les sous

    arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui

    donne [ T1 , T2 , R ou GDR]

    36

    R

    T1 T2

    Sous arbre gauche G Sous arbre droit D

  • PARCOURS POSTORDRE

    Le parcours postordre de R (s'il n'est pas vide) consiste

    d'abord parcourir rcursivement en postordre les sous

    arbres T1 puis T2 ensuite visiter le nud racine (R) ce qui

    donne [ T1 , T2 , R ou GDR]

    37

    A

    B C

    E GD F

    H I

    Rsultat de parcours: HIDEBFG AC

  • PARCOURS POSTORDRE

    La procdure (rcursive) qui affiche les valeurs en

    parcours postordre dun arbre de racine R est :

    Procdure Postordre( R: *Tnoeud)Dbut

    SI RNIL

    38

    SI RNILPostordre( FG(R) )Postordre( FD(R) )ecrire( Info(R) )

    FSIfin

  • PARCOURS EN PROFONDEUR On peut faire ces trois parcours sans utiliser la

    rcursivit. Il faudra alors un moyen pour pouvoir remonter

    dans les branches de l'arbre:

    On pourra par exemple utiliser une structure de pile pour

    sauvegarder les adresses des nuds par lesquels on est descendu et

    les dpiler quand on en aura besoin pour remonter.

    39

    les dpiler quand on en aura besoin pour remonter.

    On peut aussi enrichir la structure des nuds en incluant un

    pointeur vers le nud pre.

    Il existe d'autres types de parcours en profondeur, comme

    par exemple:

    Le prordre inverse (R T2 T1 ou RDG),

    L'inordre inverse (T2 R T1 ou DRG),

    Le postordre inverse (T2 T1 R ou DGR).

  • PARCOURS EN LARGEUR

    Dans le parcours par niveau, tous les nuds dun mme

    niveau sont traits avant de descendre au niveau suivant

    Rsultat de parcours:AHIDEB FGA C

    40

    B C

    E GD F

    H I

    HIDEB FGA C

  • PARCOURS EN LARGEUR

    Dans le parcours par niveau, tous les nuds dun mme

    niveau sont traits avant de descendre au niveau suivantProcdure parcours_largeur( R:* Tnoeud )Var F:filedattente; P: *Tnoeud;DebutPR;

    41

    PR;Si R NIL Alors

    Enfiler(F,P);TQ (Non FileVide(F))

    Defiler(F,P); crire(info(P));Si FG(P) NIL Alors Enfiler(F,FG(P));Si FD(P) NIL Alors Enfiler(F,FD(P));

    FTQFin

  • REPRSENTATION CONTIGE

    On peut prsenter les arbres de manire statique en

    utilisant les tableaux.

    Reprsentation Standard:

    Chaque lment du tableau possde quartes champs: un pour

    l'information, un pour le fils gauche, un pour le fils droit et un champ

    42

    l'information, un pour le fils gauche, un pour le fils droit et un champ

    de type boolen pour indiquer si la case est libre ou occupe.

    TYPE Tnoeud= STRUCTUREInfo : TypeqqFG : entier FD : entiervide: boolen

    FIN

  • REPRSENTATION CONTIGE

    Reprsentation Standard:

    Si la racine de larbre est toujours la position 1 du tableau,

    larbre sera dfini comme suit:

    VAR Arbre = TABLEAU[0..M-1] de Tnoeud

    Indice Tnoeud

    43

    Indice Tnoeud

    Vide FG Info FD

    0 F 1 a 4

    1 F 2 b 3

    2 F -1 c -1

    3 F -1 d -1

    4 F -1 e -1

    V ? ? ?

    M-1 V ? ? ?

  • REPRSENTATION CONTIGE

    Reprsentation Standard:

    Si on veut que la racine soit n'importe o dans le tableau, alors

    l'arbre sera dfini (le nud reste inchang):

    TYPE Tarbre = STRUCTURET : TABLEAU[1..M] de TnoeudRacine : ENTIER

    Racine

    44

    FINVAR Arbre : Tarbre

    Indice Tnoeud

    Vide FG Info FD

    0 F -1 c -1

    1 F 0 b 3

    2 F 1 a 4

    3 F -1 d -1

    4 F -1 e -1

    V ? ? ?

    M-1 V ? ? ?

  • REPRSENTATION CONTIGE

    Reprsentation Squentielle :

    Dans cette reprsentation, on limine les pointeurs entiers (FG,

    FD et ventuellement Pre), en associant chaque nud de l'arbre

    une position fixe prdfinie dans le tableau:

    La case dindice 0 sera toujours vide

    La case d'indice 1 sera toujours rserve au nud racine de l'arbre,

    45

    La case d'indice 1 sera toujours rserve au nud racine de l'arbre,

    La case d'indice 2 sera toujours rserve au FG de la racine,

    La case d'indice 3 sera toujours rserve au FD de la racine,

    En gnral, le FG de la case i se trouvera toujours l'indice 2i et le fd

    de la case i se trouvera toujours l'indice 2i+1, alors que le pre de la

    case i il sera toujours positionn la case i div 2.

    i div 2 i 2i 2i+1

    Pre . Nud . FG FD .

  • REPRSENTATION CONTIGE

    Reprsentation Squentielle :TYPE Tnoeud= STRUCTURE

    Info : Typeqqvide: boolen

    FIN

    46

    Indice 0 1 2 3 4 5Info - a b e c dVide V F F F F F

    Chaque nud lindice i a pour: nud lindice (2i) = fils de gauche. nud lindice (2i+1) = fils de droite. nud lindice (i div 2) = pre.

  • EXEMPLES DAPPLICATION

    Reprsentation des Expressions Arithmtiques :

    Les expressions arithmtiques peuvent tres reprsentes sous

    forme d'arbre binaire. Les nuds internes contiennent des

    oprateurs, alors que les feuilles contiennent des valeurs

    (oprandes).

    47

    Exemple: l'expression (a-b)*((c+d)/e) sera reprsente par l'arbre

    suivant :

    c

    e

    *

    - /

    +

    d

    ba

  • EXEMPLES DAPPLICATION

    Reprsentation des Expressions Arithmtiques :

    Les diffrentes formes de reprsentation dune expression

    arithmtiques peuvent tre trouvs en parcourant larbre:

    Le parcours en prordre (RGD) donne la forme polonaise prfixe,

    Le postordre (GDR) donne la forme postfixe

    Le parcours inordre (GRD) donne la forme infixe (forme normale

    48

    Le parcours inordre (GRD) donne la forme infixe (forme normale

    sans parenthses)

    c

    e

    *

    - /

    +

    d

    ba

  • EXEMPLES DAPPLICATION

    Reprsentation des Expressions Arithmtiques :

    Lvaluation dune expression arithmtiques peuvent se faire en

    utilisant les diffrentes formes (prordre, postordre et inordre) et les

    deux fonctions suivantes:

    La fonction Oprande(T) qui retourne vrai si T est un

    oprande, sinon elle retourne faux.

    49

    oprande, sinon elle retourne faux.

    La fonction Calcul qui permet de calculer lopration

    arithmtique entre deux oprandes

  • EXEMPLES DAPPLICATION

    Reprsentation des Expressions Arithmtiques :Fonction Eval_inordre(A: *Tnoeud): relSI (A= Null) alorsRetourner (0)SINON

    SI Operande(A) alorsRetourner (Info(A))

    SINON

    50

    c

    e

    *

    - /

    +

    d

    ba

    SINONEval Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))

    FSI

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    On peut reprsenter une liste linaire chane par un arbre binaire

    de la faon suivante :

    Les lments de la liste sont au niveau des feuilles.

    Chaque nud qui n'est pas une feuille contient le nombre de

    feuilles de son sous arbre gauche.

    51

    feuilles de son sous arbre gauche.

    Exemple: Transformer cette LLC en un arbre

    a b c d e f g

    Prsentation statique sous forme dun tableau

    a b c d e f g

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    4

    22

    a b c d e f g

    0 6Mil = 3

    Mil + 1a b c d e f g

    52

    1

    e f

    g1 1

    a b c d

    a b c d e f

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    Fonction LLCToArbreB (Tab: Tableau, Deb, Fin: entier) : * TnoeudVar x:Typeqcq; P:*Tnoeud; Mil: entierDebutSi Deb = Fin alors

    x.Nbr_F0x.ValTab[Deb]

    Type Typeqcq = StructureNbr_F: entierVal: caractreFin

    53

    x.ValTab[Deb]PCreerNoeud(x)

    SinonMil (Deb+Fin) div 2x.Nbr_F Mil + 1x.ValPCreerNoeud(x)Aff_FG(P, LLCToArbreB(Tab, Deb, Mil))Aff_FD(P, LLCToArbreB(Tab, Mil+1, Fin))

    Retourner (P)Fin

    Type Tnoeud = StructureInfo: TypeqcqFG: *TnoeudFD: *TnoeudFin

    Fin

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    Cette reprsentation rpond avec efficacit au problme de la

    recherche du Kme lment.

    Si la position recherche est infrieure ou gale l'information

    du nud interne on descend gauche, sinon on descend droite

    et en retranche la position recherche l'information du nud.

    54

    et en retranche la position recherche l'information du nud.

    Exemple:

    a. Rechercher le 3me lment de la liste

    b. Rechercher le 6me lment de la liste

    c. Rechercher le 9me lment de la liste (nexiste pas!)

    a b c d e f g3me 6me

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    4

    22

    3

    3

    6

    6 4 = 2

    9

    9 4 = 5

    55

    1

    e f

    g1 1

    a b c d

    3me 6me

    3- 2 = 1

    1

    2

    2 1 = 1

    5 - 2 = 3!!!

  • EXEMPLES DAPPLICATION

    Reprsentation dune Liste Linaire Chane (LLC):

    Fonction Rechercher_Pos (R:*Tnoeud, K: entier) : * TnoeudDebutTQ non Feuille (R) faire

    Si Info (R).Nbr_F K alorsR FG(R)

    Sinon

    Fonction Feuille (R:*Tnoeud): boolenDebut

    56

    SinonK K- Info (R).Nbr_FR FD(R)

    FTQSi K = 1 alors

    Retourner (R)Sinon

    Retourner (Null)Fin

    DebutSi R Null alors

    Si FG(R) = Null et et FD (R) = Null alorsRetourner (vrai)

    FSIRetourner (Faux)Fin

  • PARTIE III:

    A BARBRES BINAIRES DE

    RECHERCHE(ABR)

  • Dfinition

    Complexit

    PLAN DE LA PARTIE III

    Parcours

    Oprations de Recherche et de mise jours (Insertion et

    Suppression)

    Exemples dapplication: Tri par ABR

    58

  • DFINITION

    Un Arbre Binaire de Recherche (ABR) est un arbre

    binaire ordonn tel que pour tout nud n:

    Toutes les valeurs du sous-arbe gauche de n sont strictement

    infrieures la valeur de n, et

    Toutes les valeurs du sous-arbre droit de n sont suprieures ou

    59

    gales la valeur de n.

  • DFINITION

    Un Arbre Binaire de Recherche (ABR) est un arbre

    binaire ordonn tel que pour tout nud i :

    Toutes les valeurs du sous-arbre gauche de i sont strictement

    infrieures la cl de i , et

    Toutes les valeurs du sous-arbre droit de i sont suprieures ou

    60

    gales la cl de i .

    Intrt de cette proprit : diminuer la complexit

    temporel de recherche, dinsertion et de suppression dans

    larbre

  • COMPLEXIT

    Intrt de cette proprit : diminuer la complexit

    temporel de recherche, dinsertion et de suppression dans

    larbre

    87 ?

    61O (n)O (h) tel que h = log2(n) dans un arbre quilibr

  • PARCOURS

    Voici un exemple dun ARB contenant des valeurs

    entires, appliquer les diffrents parcours vus sur les

    arbres binaires. 20

    15 59

    5 27 71

    62

    5

    3 10

    27 71

    33

    8 55

    52 Le parcours inordre de cet arbre donne la liste ordonne

    suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71

  • OPRATION DE RECHERCHE

    La recherche est dichotomique, chaque tape, un sous

    arbre est limin:

    Rechercher (55)

    Rechercher (FD(20))

    Rechercher (FG(59))2055 ?

    63

    Rechercher (FG(59))

    Rechercher (FD(27))

    Rechercher (FD (33))

    lment trouv

    15 59

    5

    3 10

    27 71

    33

    8 55

    52

  • OPRATION DE RECHERCHEFonction RechercherABR_rec (R:*Tnoeud, x: entier) : * TnoeudFonction RechercherABR_rec (R:*Tnoeud, x: entier) : * Tnoeud

    Debut

    Si R = Null alors

    Retourner (Null)

    Sinon

    Si Info (R) = x alors

    64

    Fin

    Retourner (R)

    Sinon

    Si Info(R)>x alors

    Retourner (RechercherABR_rec(FG(R), x))

    Sinon

    Retourner (RechercherABR_rec(FD(R), x))

    Fin

  • OPRATION DE RECHERCHEFonction RechercherABR _iter(R:*Tnoeud, x: entier) : * TnoeudFonction RechercherABR _iter(R:*Tnoeud, x: entier) : * Tnoeud

    Debut

    TQ R Null faire

    Si Info (R) = x alors

    Retourner (R)

    Sinon

    65

    Fin

    Si Info(R)>x alors

    RFG(R)

    Sinon

    RFD(R)

    FTQ

    Retourner (Null)

    Fin

  • OPRATION DINSERTION

    L'insertion d'un lment se fait toujours au niveau d'une

    feuille. Cette insertion dans un ABR doit maintenir la

    proprit des arbres de recherche, ainsi:

    1. Rechercher la position dinsertion

    66

    1. Rechercher la position dinsertion

    2. Raccorder le nouveau nud son parent

  • OPRATION DINSERTION

    20

    15 59

    5

    3 10

    27 71

    33

    + 25

    25

    67

    RechercherPosition (25)

    Rechercher (FD(20))

    Rechercher (FG(59))

    Position trouv pour linsertion, le pre est le nud 27

    Insrer 25 au niveau de la feuille dont le pre est 27

    3 10

    8 55

    52

    25

  • OPRATION DINSERTION

    Fonction InsererABR_rec (R:*Tnoeud, x: entier) : * Tnoeud

    Debut

    Si R = Null alors

    RCreerNoeud(x)

    Sinon

    68

    Si Info(R)>x alors

    Aff_FG(R, InsererABR_rec(FG(R), x))

    Sinon

    Aff_FD(R, InsererABR_rec(FD(R), x))

    Retourner (R)

    Fin

  • OPRATION DINSERTIONFonction InsererABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutPCreerNoeud(x)Si R = Null alors

    RPSinon

    QR

    69

    QRTQ (QNull) faire

    Si Info(Q)>x alorsSi FG(Q) = Null alors Aff_FG(Q, P)QFG(Q)

    SinonSi FD(Q)=Null alors Aff_FD(Q, P)QFD(Q)

    Retourner (R)Fin

  • OPRATION DE SUPPRESSION

    Pour supprimer le nud i dun ARB, il faudra le

    rechercher. Une fois le nud i trouv, on se trouve

    dans une des situations suivantes :

    70

  • OPRATION DE SUPPRESSION Cas 1: Suppression d'une feuille

    Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.

    Exemple: supprimer le nud i qui contient la valeur 8

    1. Rechercher(8)

    2. Librer le nud i 20

    71 i

    15 59

    5

    3 10

    27 71

    33

    8 55

    52

    12

  • OPRATION DE SUPPRESSION Cas 2: Suppression d'un nud avec un fils

    Il faut l'enlever de l'arbre en le remplaant par son fils.

    Exemple: supprimer le nud i qui contient la valeur 10

    1. Rechercher(10)

    2. Chainer le pre de i avec le FD(i) 20

    72

    3. Librer le nud i

    i

    15 59

    5

    3 10

    27 71

    33

    12 55

    52

  • OPRATION DE SUPPRESSION Cas 2: Suppression d'un nud avec un fils

    Il faut l'enlever de l'arbre en le remplaant par son fils.

    Exemple: supprimer le nud i qui contient la valeur 10

    1. Rechercher(10)

    2. Chainer le pre de i avec le FG(i) 20

    73

    3. Librer le nud i

    i

    15 59

    5

    3 10

    27 71

    33

    55

    52

    8

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 1: On change le nud supprimer avec son successeur

    le plus proche (le nud le plus gauche du sous-arbre droit) ou

    son plus proche prdcesseur (le nud le plus droite du

    sous-arbre gauche). Cela permet de garder une structure d'arbre

    binaire de recherche. 34

    74

    binaire de recherche. 34

    66

    50

    56

    55

    71

    70

    69

    81

    22

    8

    17

    9

    29

    25

    23 32

    Le plus proche prdcesseur

    Le plus proche successeur

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 1 Cas A: On change le nud supprimer avec son

    successeur le plus proche (le nud le plus gauche ou le plus

    petit du sous-arbre)

    Racine: 71

    La plus petite valeur : 69

    75

    La plus petite valeur : 69

    34

    66

    50

    56

    55

    71

    70

    69

    81

    22

    8

    17

    9

    29

    25

    23 32

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 1 Cas A: On change le nud supprimer avec son

    successeur le plus proche (le nud le plus gauche ou le plus

    petit du sous-arbre)

    Racine: 71

    La plus petite valeur : 69

    76

    La plus petite valeur : 69

    34

    66

    50

    56

    55

    71

    70

    69

    81

    Fonction Successeur (R: *Tnoeud): *Tnoeud

    Fin

    Fonction Successeur (R: *Tnoeud): *TnoeudDebut

    RFD(R)Si RNull alors

    TQ FG(R)Null faire RFG(R)Retourner (R)

    Fin

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 1 Cas A: On change le nud supprimer avec son

    plus proche prdcesseur (le nud le plus droite ou le plus

    grand du sous-arbre gauche).

    Racine: 50

    La plus petite valeur : 56

    77

    La plus petite valeur : 56

    34

    66

    50

    56

    55

    71

    70

    69

    81

    22

    8

    17

    9

    29

    25

    23 32

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 1 Cas A: On change le nud supprimer avec son

    plus proche prdcesseur (le nud le plus droite ou le plus

    grand du sous-arbre gauche).

    Racine: 50

    La plus petite valeur : 56

    78

    La plus petite valeur : 56

    34

    66

    50

    56

    55

    71

    70

    69

    Fonction Predecesseur (R: *Tnoeud): *Tnoeud

    Fin

    Fonction Predecesseur (R: *Tnoeud): *TnoeudDebut

    RFG(R)Si RNull alors

    TQ FD(R)Null faire RFD(R)Retourner (R)

    Fin

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Etape 2: on applique nouveau la procdure de suppression qui

    est maintenant une feuille ou un nud avec un seul fils.

    Ainsi, si on choisit dchanger le nud 66 avec son plus proche

    successeur 69 , on obtient34

    79

    34

    66

    50

    56

    55

    71

    70

    69

    81

    22

    8

    17

    9

    29

    25

    23 32

    69

  • OPRATION DE SUPPRESSION Cas 3: Suppression d'un nud avec deux fils

    Puis on applique nouveau la procdure de suppression qui est

    maintenant une feuille ou un nud avec un seul fils.

    Ainsi, si on choisit d changer le nud 66 avec son plus proche

    prdcesseur 56 , on obtient34

    80

    34

    66

    50

    55

    71

    70

    69

    81

    22

    8

    17

    9

    29

    25

    23 32

    56

  • OPRATION DE SUPPRESSION En conclusion, pour supprimer le nud i dun ARB, il

    faudra le rechercher. Une fois le nud i trouv, on se

    trouve dans une des situations suivantes :

    Cas i

    ActionFG FD

    Feuille Null Null Remplacer i par Null

    81

    Feuille Null Null Remplacer i par Null

    Avec un fils

    Null Null Remplacer i par FD(i)Null Null Remplacer i par FG(i)

    Avec deux fils

    Null Null

    1. Rechercher le plus procheprdcesseur ou successeur de i ,soit P.

    2. Remplacer Info(i) par Info(P)3. Remplacer P par FG(P) ou FD(P)

  • OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P) Procedure RechercherABR (R: *Tnoeud, x:

    entier, Var Q: *Tnoeud, Var Pre: *Tnoeud)Pre Null; Q Null;

    TQ R Null faire

    Si Info (R) = x alors

    Cette procdure

    retourne ladresse du

    82

    Si Info (R) = x alors

    QR

    Sinon

    PreR

    Si Info(R)>x alors

    RFG(R)

    Sinon

    RFD(R)

    FTQ

    retourne ladresse du

    nud contenant x

    (soit Q) ainsi que

    ladresse de son pre

    (soit Pre)

  • OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors// llment x existe dans Q

    Si FG(Q) = Null alorsSi FD(Q) = Null alors//Cas n1: Q est une feuille

    83

    //Cas n1: Q est une feuilleChaner (R, P, Null, x)

    Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)

    SinonSi FD(Q) = Null alors//Cas n2: Q possde un FG

    Chaner (R, P, FG(Q), x)

    Cette procdure

    permet de chane le

    pre de Q (P) avec le

    Fil de Q selon la

    valeur de x

  • OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors// llment x existe dans Q

    Si FG(Q) = Null alorsSi FD(Q) = Null alors//Cas n1: Q est une feuille

    Procedure Chaner (Var R:*Tnoeud , PreQ: *Tnoeud,FilsQ: *Tnoeud, x: entier)

    84

    //Cas n1: Q est une feuilleChaner (R, P, Null, x)

    Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)

    SinonSi FD(Q) = Null alors//Cas n2: Q possde un FG

    Chaner (R, P, FG(Q), x)

    FilsQ: *Tnoeud, x: entier)

    Si PreQ = Null alors

    RFilsQ

    Sinon

    Si Info(P)>x alors

    Aff_FG(P, FilsQ)

    Sinon

    Aff_FD(P, FilsQ)

  • OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q

    Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille

    Chaner (R, P, Null, x)Sinon //Cas n2: Q possde un FD

    85

    Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)

    SinonSi FD(Q) = Null alors //Cas n2: Q possde un FG

    Chaner (R, P, FG(Q), x)

    Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, PS)

    Cette procdure retourne ladresse du successeur

    de Q (S) ainsi que ladresse de son pre (PS)

  • OPRATION DE SUPPRESSIONFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudFonction SupprimerABR_iter (R:*Tnoeud, x: entier) : * TnoeudVar P, Q: *TnoeudDebutRechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q

    Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille

    Chaner (R, P, Null, x)Sinon //Cas n2: Q possde un FD

    86

    Sinon //Cas n2: Q possde un FDChaner (R, P, FD(Q), x)

    SinonSi FD(Q) = Null alors //Cas n2: Q possde un FG

    Chaner (R, P, FG(Q), x)

    Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, PS)

    Procdure Successeur (R: *Tnoeud, Var Q, PS: *Tnoeud)PSR; SFD(R)Si (SNull) alors

    TQ FG(S)Null faire SFG(S)

  • RechercherABR (R, x, Q, P)Si Q Null alors // llment x existe dans Q

    Fin fauxTQ non fin faire

    Si FG(Q) = Null alorsSi FD(Q) = Null alors //Cas n1: Q est une feuille

    Chaner (R, P, Null, x); Fin vraiSinon //Cas n2: Q possde un FD

    Chaner (R, P, FD(Q), x); Fin vraiSinon

    Si FD(Q) = Null alors //Cas n2: Q possde un FG

    87

    Si FD(Q) = Null alors //Cas n2: Q possde un FGChaner (R, P, FG(Q), x); Fin vrai

    Sinon // Cas n3: Q possde deux filsSuccesseur (Q, S, P)Aff_Info (Q, Info(S))QS; PPS; xInfo(S)

    FTQLibrerNoeud(Q)

    FSIRetourner (R)

  • OPRATION DE SUPPRESSION

    Fonction SupprimerABR_rec (R:*Tnoeud, x: entier) : * TnoeudDebutSi R = Null alors

    Retourner (R)Sinon

    Si Info(R)>x alorsAff_FG(R, SupprimerABR_rec(FG(R), x))

    88

    Aff_FG(R, SupprimerABR_rec(FG(R), x))Retourner (R)

    SinonSi Info(R)

  • OPRATION DE SUPPRESSIONFonction SupprimerRacine (R:*Tnoeud) : * TnoeudDebutSi FG(R) = Null alors

    Si FD(R) = Null alors //Cas n1: R est une feuilleLibrerNoeud(R)Retourner (Null)

    Sinon //Cas n2: R possde un FDDFD(R)LibrerNoeud(R)Retourner (D)

    89

    Retourner (D)Sinon

    Si FD(Q) = Null alors //Cas n2: R possde un FGGFG(R)LibrerNoeud(R)Retourner (G)

    Sinon // Cas n3: R possde deux filsSSuccesseur (R)Aff_Info (R, Info(S))Aff_FD(R, SupprimerABR_rec(DF(R), Info(S)))Retourner (R)

    Fin

  • EXEMPLE DAPPLICATION: TRI PAR ABR

    tant donn un tableau dentiers T (n: sa taille), dire

    comment peut on trier ce tableau en utilisant un Arbre

    Binaire de Recherche (ABR)?

    Exemple:

    90

    Exemple:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

  • 1. Insrer toutes les lments du tableau dans un

    ABR

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    EXEMPLE DAPPLICATION: TRI PAR ABR

    91

    20

    15 35

    1019

    5 13

    3 7 12

    25 40

    38

    16

  • 2. Parcourir lABR en inordre : GRD

    20

    15 35

    10 25 40

    EXEMPLE DAPPLICATION: TRI PAR ABR

    923 5 7 10 12 13 15 16 19 20 25 35 38 40

    1019

    5 13

    3 7 12

    25 40

    38

    16

  • Procedure Tri_ARB(Var T: Tableau, n: entier)

    Debut

    RNull

    Pour i0 n-1 faire RInsererABR (R, T[i]).

    Inordre (R, T); //Parcours Infixe

    EXEMPLE DAPPLICATION: TRI PAR ABR

    93

    FinIndice est une variable globale initialise 0

    Procedure Inordre (R: *Tnud, Var T: Tableau)

    Si ( R Null) alors //Arbre nest pas vide

    Inordre(FG(R), T))

    T[indice]Info(R) //crire la valeur dans le tableau

    indice++

    Inordre(FD(R), T)

  • PARTIE IV:

    ARBRES BINAIRES DE

    R RECHERCHE QUILIBRS

    (ARBRES AVL)

  • Introduction

    Dfinition

    PLAN DE LA PARTIE IV

    Techniques dquilibrage

    Oprations de Base: Recherche, Insertion et

    Suppression 95

  • INTRODUCTION

    La complexit au meilleur des cas de la recherche, de

    linsertion et de la suppression dans un ABR est O(h), o

    h est la hauteur (ou profondeur) de larbre. Ce cas est

    atteint par des arbres quilibrs

    Cependant, la complexit au pire cas pour un arbre n

    96

    Cependant, la complexit au pire cas pour un arbre n

    nuds, est O(n). Ce cas est atteint par des arbres trs

    dsquilibrs, ou filiformes.

    Plusieurs espces des arbres quilibrs ont t

    dvelopps: les arbres AVL, les arbres 2-3, les arbres

    rouge et noir, etc.

  • INTRODUCTION

    87 ?

    ABR Equilibr Filiformes

    97O (n)O (h) tel que h = log2(n)

  • DFINITION

    Les arbres AVL ont t introduits par les finlandais Adelson-

    Velskii et Landis dans les annes 60.

    Un arbre AVL est un ABR quilibr dont:

    la diffrence de hauteur (ou profondeur) entre le sous-

    arbre gauche et le sous-arbre droit d'un nud R diffre

    d'au plus 1.

    98

    d'au plus 1.

    |Profondeur(FG(R) ) Profondeur(FD(R)) | 1

    les arbres gauches et droits d'un nud sont des arbres

    AVL.

    Un champs supplmentaire est ajout tous les nuds: cest le

    facteur de dsquilibre (appel aussi facteur de balance

    Bal ) qui est calcul aprs chaque insertion/suppression.

  • EXEMPLE

    100

    50 200

    Exemple: soit lABR suivant. Est-il un arbre AVL?

    +1

    +1 +1

    Notons:

    quune feuille est un

    arbre de hauteur 0,

    et que larbre vide a la

    hauteur 1.

    99

    30 80

    10

    150

    40

    0 0 0

    0

    hauteur 1.

    Larbre vide et larbre

    rduit une feuille,

    sont des arbres AVL

    Cet arbre est un arbre AVL

    vrifier pour chaque nud R, on a:

    | Profondeur(FG(R) ) Profondeur(FD(R)) |

  • EXEMPLE

    Exemple: Cet ABR est un arbre AVL avant insertion

    Insrer la valeur 5 100

    50 200

    +1

    +1 +1

    100

    30 80

    10

    150

    40

    0 0 0

    0 0

  • EXEMPLE

    Exemple: Cet ABR est un arbre AVL avant insertion

    Insrer la valeur 5 100

    50 200+1+2Aprs insertion, calculer le

    facteur de dsquilibre de

    101

    30 80

    10

    150

    40

    Cet arbre nest pas un arbre AVL aprs insertion de 5

    arbre dsquilibr

    50

    +1

    +1

    0

    0 0

    facteur de dsquilibre de

    chaque nud.

  • EXEMPLE

    Exemple: Cet ABR est un arbre AVL avant insertion

    Insrer la valeur 45 100

    50 200

    +1

    +1 +1

    102

    30 80

    10

    150

    40

    0 0 0

    0 0

  • EXEMPLE

    Exemple: Cet ABR est un arbre AVL avant insertion

    Insrer la valeur 45100

    50 200+1+2

    103Cet arbre nest pas un arbre AVL aprs insertion de 45

    arbre dsquilibr

    30 80

    10

    150

    40

    450

    0

    -1

    -1

    0 0

  • TECHNIQUES DQUILIBRAGE Lopration dquilibrage, appele rotation, sapplique tous les

    arbres binaires.

    Le but des rotations est de pouvoir rquilibrer un ABR.

    On opre donc une rotation gauche lorsque larbre est

    dsquilibr droite, i.e. son sous-arbre droit est plus haut

    que son sous-arbre gauche.

    104

    que son sous-arbre gauche.

    On opre une rotation droite dans le cas contraire savoir son

    sous-arbre gauche est plus haut que son sous-arbre droit.

    Les rotations ne sont donc dfinies que pour les arbres binaires non

    vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre

    droit (pour rotation droite) nest pas vide.

    Les rotations prservent lordre des donnes dun ABR (parcours

    inordre).

  • TECHNIQUES DQUILIBRAGE

    Rotation simple : Rotation droite

    Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

    La rotation droite est lopration:

    ((X, P, Y), R, Z) (X, P, (Y, R, Z))

    +2

    105

    R

    P

    X(hauteur

    h+1)

    Dsquilibre gauche

    Y(hauteur

    h)

    Z(hauteur

    h)

    P

    R

    X(hauteur

    h+1)Y

    (hauteur h)

    Z(hauteur

    h)

    +1

    +20

    0

    Rotation droite

  • TECHNIQUES DQUILIBRAGE

    Rotation simple : Rotation droite

    Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

    La rotation droite est lopration:

    ((X, P, Y), R, Z) (X, P, (Y, R, Z))

    +2

    106

    R

    P

    X(hauteur

    h)

    Dsquilibre gauche

    Y(hauteur

    h)

    Z(hauteur

    h-1)

    P

    R

    X(hauteur

    h)Y

    (hauteur h)

    Z(hauteur

    h-1)

    0

    +2-1

    +1

    Rotation droite

  • TECHNIQUES DQUILIBRAGE

    Rotation simple : Rotation gauche

    Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

    La rotation gauche est lopration:

    ( X, R, (Y, P, Z)) ((X, R, Y), P, Z)

    -2 Rotation gauche

    107

    P

    R

    X(hauteur h)

    Y(hauteur h)

    Z(hauteur

    h+1)

    R

    P

    Dsquilibre droit

    X(hauteur

    h) Y(hauteur

    h)Z

    (hauteur h+1)

    -1

    -2

    0

    0Rotation gauche

  • TECHNIQUES DQUILIBRAGE

    Rotation simple : Rotation gauche

    Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

    La rotation gauche est lopration:

    ( X, R, (Y, P, Z)) ((X, R, Y), P, Z)

    -2 Rotation gauche

    108

    P

    R

    X(hauteur h-1)

    Y(hauteur

    h)

    Z(hauteur

    h)

    R

    P

    Dsquilibre droit

    X(hauteur

    h-1)

    Y(hauteur

    h)

    Z(hauteur

    h)

    0

    -2

    -1

    +1Rotation gauche

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation gauche-droite

    Cest une rotation gauche sur le sous arbre-gauche du nud r

    suivie dune rotation droite sur le nud r

    R R

    Rotation gauche Rotation droite

    Q+2

    0+2

    109

    P

    QD(h)

    C (h)

    B (h)

    A (h)

    Q

    P D(h)

    C(h)

    B(h)

    A(h)

    P R

    D(h)

    C(h)

    B(h)

    A(h)

    ((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

    0

    0

    -1

    0

    +1

    0

    0+2

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation gauche-droite

    Cest une rotation gauche sur le sous arbre-gauche du nud r

    suivie dune rotation droite sur le nud r

    R R

    Rotation gauche Rotation droite

    Q+2

    0

    110

    P

    QD(h)

    C (h-1)

    B (h)

    A (h)

    Q

    P D(h)

    C(h-1)

    B(h)

    A(h)

    P R

    D(h)

    C(h-1)

    B(h)

    A(h)

    ((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

    0

    +1

    -1

    0

    +2

    -1

    0+2

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation gauche-droite

    Cest une rotation gauche sur le sous arbre-gauche du nud r

    suivie dune rotation droite sur le nud r

    R R

    Rotation gauche Rotation droite

    Q+2

    0+2

    111

    P

    QD(h)

    C (h)

    B (h-1)

    A (h)

    Q

    P D(h)

    C(h)

    B(h-1)

    A(h)

    P R

    D(h)

    C(h)

    B(h-1)

    A(h)

    ((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

    +1

    -1

    -1

    +1

    +1

    0

    0+2

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation droite-gauche

    Cest une rotation droite sur le sous arbre-droit du nud r suivie

    dune rotation gauche sur le nud r

    Rotation droite Rotation gaucheR-2 R

    -2Q0

    112

    (A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

    P

    QA(h)

    0

    +1

    B(h)

    C(h)

    D(h)

    Q

    P0

    -1A(h)

    B(h)

    C(h)

    D(h)

    R P0 0

    0

    A(h)

    B(h)

    C(h)

    D(h)

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation droite-gauche

    Cest une rotation droite sur le sous arbre-droit du nud r suivie

    dune rotation gauche sur le nud r

    Rotation droite Rotation gaucheR-2 R

    -2Q0

    113

    (A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

    P

    QA(h)

    +1

    +1

    B(h)

    C(h-1)

    D(h)

    Q

    P-1

    -1A(h)

    B(h)

    C(h-1)

    D(h)

    R P0 -1

    0

    A(h)

    B(h)

    C(h-1)

    D(h)

  • TECHNIQUES DQUILIBRAGE

    Rotation double : double rotation droite-gauche

    Cest une rotation droite sur le sous arbre-droit du nud r suivie

    dune rotation gauche sur le nud r

    Rotation droite Rotation gaucheR-2 R

    -2Q0

    114

    (A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

    P

    QA(h)

    -1

    +1

    B(h-1)

    C(h)

    D(h)

    Q

    P0

    -2A(h)

    B(h-1)

    C(h)

    D(h)

    R P1 0

    0

    A(h)

    B(h-1)

    C(h)

    D(h)

  • OPERATIONS DE BASE

    La recherche est identique celui des ABR car les

    arbres AVL sont avant tout des ABR quilibrs.

    Linsertion dun lment dans un arbre AVL peut

    provoquer un dsquilibre. Donc, pour rtablir lquilibre

    (rquilibrer) de larbre aprs une insertion, une seule

    115

    rotation ou double rotation suffit.

    La suppression dun lment dans un arbre AVL peut

    provoquer un dsquilibre. Donc pour rtablir lquilibre

    (rquilibrer) de larbre aprs une suppression, il faut

    jusqu h rotations (h est la hauteur de larbre) ou double

    rotations.

  • INSERTION

    Lajout dun nud se fait toujours au niveau dune feuille,

    puis on rquilibre larbre AVL si linsertion a

    dsquilibr larbre.

    Le dsquilibre est rencontr lorsque le facteur

    dquilibrage dun nud de larbre gale 2.

    116

    dquilibrage dun nud de larbre gale 2.

  • INSERTION

    Exemple: soit la srie de nombres insrer dans un

    arbre AVL (2 10 12 4 16 8 6 14 )

    2 10 12 4 16 8 6 14

    20

    2 10 12 4 16 8 6 14

    2 -2

    117

    20

    2 10 12 4 16 8 6 14

    2

    10 0

    -1

    2

    10

    12 0

    -1

    -2

    Rotation simple

    10

    122 00

    0

  • INSERTION

    Exemple: soit la srie de nombres insrer dans un

    arbre AVL (2 10 12 4 16 8 6 14 )

    2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14

    118

    10

    122

    4 0

    -1 0

    1 10

    122

    4 16 00

    -1-1

    0

  • INSERTION

    Exemple: soit la srie de nombres insrer dans un

    arbre AVL (2 10 12 4 16 8 6 14 )

    2 10 12 4 16 8 6 14

    10 1

    10 0

    119

    122

    4 16

    8 0

    -1

    -2

    0

    -1

    Rotation simple

    10

    124

    8 1620 0 0

    -10

    0

  • INSERTION

    Exemple: soit la srie de nombres insrer dans un

    arbre AVL (2 10 12 4 16 8 6 14 )

    2 10 12 4 16 8 6 14

    10 1

    120

    124

    8 162

    6 0

    10

    -1

    0

    -1

  • INSERTION

    Exemple: soit la srie de nombres insrer dans un

    arbre AVL (2 10 12 4 16 8 6 14 )

    2 10 12 4 16 8 6 14

    10 0 101

    121

    124

    8 162

    6 140

    0

    1

    -2

    10

    -1 Rotation double

    144

    8 162

    6

    12

    0

    1

    0 0

    0-1

    0

  • INSERTION

    Exemple 2: soit larbre suivant, donner le rsultat aprs

    insertion de 7

    10

    144

    122

    144

    8 162

    6

    12

    1 9

  • INSERTION

    Exemple 2: soit larbre ci-dessus, donner le rsultat

    aprs insertion de 7

    10

    144 0-1

    2

    80

    Rotation

    1230

    144

    8 162

    6

    12

    -1

    1

    0 0

    1

    10 9 0

    7

    Nud insr

    10

    14

    4

    16

    2 6

    12

    -1

    0

    01

    -1

    10

    9

    07 0

    0

    0

    Rotation double

  • INSERTION

    R

    h h

    RR

    R

    hh+1

    R

    R

    h h+1

    0

    +1

    +1

    +2

    -1

    0

    Avant Aprs insertion gauche Aprs insertion droite

    Cas A

    124

    hh+1

    R

    h h+1

    hh+2

    R

    h+1h+1

    R

    h h+2

    h+1 h+1

    -10 -2 Cas B

  • INSERTION

    Remarques:

    Aprs une insertion, seules les nuds qui sont sur le chemin du

    point dinsertion la racine sont susceptibles dtre dsquilibrs.

    Cas A: Larbre devient non quilibr quand le nouveau nud

    insr est un descendant gauche dun nud qui avait un facteur

    125

    dquilibrage gal 1

    Cas B: Larbre devient non quilibr quand le nouveau nud

    insr est un descendant droit dun nud qui avait un facteur

    dquilibrage gal -1

  • INSERTIONR

    hh+2

    +2

    R

    h

    +1

    P0

    Cas A

    +2

    Avant

    126

    hh

    Si insertion dans le sous-arbre

    gauche du fils gauche alors

    Rotation Simple droite

    Si insertion dans le sous-arbre droit

    du fils gauche alors Rotation

    Double Gauche-Droite

    R

    h

    +2

    P

    h

    +1

    h+1

    R

    h

    +2

    P

    h

    -1

    h+1

  • INSERTIONR

    h h+2

    -2 Cas B

    R

    h

    -1

    P

    hh

    0

    Avant

    127

    R

    hP

    h

    -2

    +1

    h+1

    R

    hP

    hh

    -2

    -1

    Si insertion dans le sous-arbre

    droit du fils droit alors Rotation

    Simple gauche

    Si insertion dans le sous-arbre gauche

    du fils droit alors Rotation Double

    Droite-Gauche

  • SUPPRESSION Le principe de la suppression dun lment dans un arbre

    AVL est le mme que dans un ABR, c..d. recherche de

    llment supprimer, suppression et remplacement, le

    cas chant, par llment qui lui immdiatement

    128

    infrieur ou suprieur.

    Aprs la premire phase de la suppression, la hauteur de

    larbre est diminu de 1. Le problme est que cet arbre

    nest plus forcment un arbre AVL. Il faut donc le

    rquilibrer.

  • SUPPRESSION

    Sil y a dsquilibre, la rotation applique peut diminuer

    son tour la hauteur de larbre et gnrer un nouveau

    dsquilibre. En fait les rotations peuvent senchainer en

    cascade depuis llment supprim jusqu la racine.

    129

    cascade depuis llment supprim jusqu la racine.

    Ainsi, on peut faire jusqu h simple rotations ou double

    rotations (h est la hauteur de larbre initial).

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 10:

    4

    8

    -10

    0

    4

    8

    -10

    0

    130

    10

    14

    4

    16

    2 6

    12

    -1

    0

    01

    -1

    10

    9

    07 0

    0

    0

    12

    14

    4

    16

    2 6 -1-1

    1

    -1

    10

    9

    07 0

    0

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 8:

    4

    8

    0

    0

    4

    9

    0

    0

    131

    12

    14

    4

    16

    2 6 -1-1

    1

    -1

    10

    9

    07 0

    0

    0

    12

    14

    4

    16

    2 6 -1-1

    1

    -2

    10 07 0

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 8:

    4

    9

    0

    0

    144

    9

    00

    1

    RSG

    132

    12

    14

    4

    16

    2 6 -1-1

    1

    -2

    10 07 0

    0 14

    12

    4

    162 6 -10

    1

    0

    10 07

    0

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 12 puis 16:

    144

    9

    00

    1

    9+2

    133

    14

    12

    4

    162 6 -10

    1

    0

    10 07

    0

    0

    144

    2 6 -11

    0

    10 07

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 12 puis 16:

    9+2

    4-1

    RSD

    134

    144

    2 6 -11

    0

    10 07

    0

    9

    14

    2

    6 -1

    1 1

    1 0

    0

    7

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 30:

    10030

    50

    +1+1

    -1

    40

    50

    +1+2

    -1

    100

    135

    100

    200

    30

    300

    10 40-1

    -1

    20

    80

    60

    0

    +1

    9070+1

    0

    00

    0

    40

    300

    10-1

    -1

    20

    80

    60

    +1

    9070

    +1

    100

    200

    0

    0

    0 0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 30:

    40

    50

    +1+2

    -1

    100RDG-D

    20

    50

    0

    -2

    136

    40

    300

    10-1

    -1

    20

    80

    60

    +1

    9070

    +1

    100

    200

    0

    0

    0 0

    20

    300

    10-1

    +1

    40 80

    60

    0

    0

    +1

    9070+1

    100

    2000 0

    0

    0

  • SUPPRESSION

    Exemple: soit larbre suivant. Donner le rsultat aprs la

    suppression de 30:

    RDD-G

    20

    50

    +10

    -2

    80

    50

    0

    0

    137

    20

    300

    10-1

    +1

    40 80

    60

    0

    0

    +1

    9070+1

    100

    2000 0

    0

    0

    20

    30010

    -1

    -1

    40

    50

    60

    0 9070+1

    100

    200

    0

    0 0 0

    0

    0

  • PARTIE V:

    A B ARBRES BINAIRES QUILIBRS

    (TAS)

  • Dfinition

    Hauteur

    PLAN DE LA PARTIE V

    Oprations de Base: Insertion, Recherche et

    Suppression

    Implmentation

    Exemples dApplication

    139

  • DFINITION

    Un TAS (HEAP) invent par Williams Floyd en 1964, est

    un arbre binaire qui vrifie les deux proprits suivantes :

    Proprit structurelle: arbre binaire complet (ou

    parfait), i.e. Tous les niveaux sont totalement remplis

    sauf le dernier qui est rempli de la gauche vers la

    140

    sauf le dernier qui est rempli de la gauche vers la

    droite.

    Proprit dordre :

    TASmin: Cl (pre) Cl(fils)

    TASmax: Cl (pre) Cl (fils)

  • DFINITION

    Exemple dun TASmin

    Cl (pre) Cl (fils)

    Le minimum se trouve toujours la racine

    Minimum4

    141

    Maximum

    5 6

    207

    811

    915

    2516 1214

  • DFINITION

    Exemple dun TASmax

    Cl (pre) Cl (fils)

    Le maximum se trouve toujours la racine

    Maximum40

    142

    Minimum

    35 26

    2017

    811

    1915

    131 1214

  • HAUTEUR

    Thorme: Un TAS de n nud a une hauteur O(log2 n)

    Dmonstration

    Soit h, la hauteur dun tas de n nud

    Au niveau ih, ni=2i

    143

    i

    Donc n = 20 + 21 + 22 + ....+ 2h-1 + c tel que , 0c

  • INSERTION

    Pour insrer une valeur v dans un TASmin [ou

    TASmax]

    1. Insrer la valeur v la fin du dernier niveau de

    larbre.

    Tant que la valeur du pre de v est plus grande

    144

    2. Tant que la valeur du pre de v est plus grande

    [petite] que v , changer la valeur du pre de v

    avec v .

    Ltape 1 permet de vrifier la proprit structurelle et

    ltape 2 permet de vrifier la proprit de lordre.

  • INSERTION

    Exemple: Soit le TASmin suivant. Donner le rsultat

    aprs linsertion 5, 17, 3, 18

    4

    6

    145

    96

    207

    811

    1015

    2516 1214

  • INSERTION

    Exemple: Soit le TASmin suivant.

    Insertion 5

    4

    6

    146

    96

    207

    811

    1015

    2516 1214 5

  • INSERTION

    Exemple: Soit le TASmin suivant.

    Insertion 17

    4

    5

    147

    95

    67

    811

    1015

    2516 1214 20 17

  • INSERTION

    Exemple: Soit le TASmin suivant.

    Insertion 3

    4

    5

    148

    95

    67

    811

    1015

    2516 1214 20 17

    3

  • INSERTION

    Exemple: Soit le TASmin suivant.

    Insertion 18

    3

    5

    149

    45

    67

    811

    109

    2515 1214 20 17

    16 18

  • INSERTION

    Exercice: Construire un TASmin et un TASmax partir

    des valeurs suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    150

  • INSERTION

    Solution: Construire un TASmin partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    20 15 10 10

    151

    15 20 10 20 15

    35 19

    19 15

    35 20 1310

    19 13

    35 20 15 55

    19 10

    35 20 15 13

    3

    3

    5 10

    19 20 15 13

    35 12

  • INSERTION

    Solution: Construire un TASmin partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    152

    3

    5 10

    12 20 15 13

    35 19 7

    3

    5 10

    12 7 15 13

    35 19 20 16 40 25 38

  • INSERTION

    Solution: Construire un TASmax partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    20

    35

    153

    15 10 20 10

    15 19 1335

  • INSERTION

    Solution: Construire un TASmax partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    35

    154

    20 13

    15 19 10 5

    3 12 7 16 4040

    20 35

    15 19 13 5

    3 12 7 16 10 25

  • INSERTION

    Solution: Construire un TASmax partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    40

    155

    40

    20 35

    15 19 25 5

    3 12 7 16 10 13 38

  • INSERTION

    Solution: Construire un TASmax partir des valeurs

    suivantes:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    40

    156

    40

    20 38

    15 19 25 35

    3 12 7 16 10 13 5

  • INSERTION

    Linsertion dune valeur v peut ncessiter O(h) =

    O(log2(n)) oprations o h est la hauteur du TAS et n est

    son nombre des nuds.

    En effet, au pire des cas, lchange peut se remonter la racine

    157

    En effet, au pire des cas, lchange peut se remonter la racine

    dans le cas o v est infrieure la valeur de la racine, ainsi, il

    devient le nouveau minimum

  • RECHERCHE

    Pour rechercher une valeur v dans un TASmin [ou

    TASmax], on doit parcourir larbre en largeur (niveau par

    niveau)

    On passera au niveau i si seulement si la valeur v

    158

    On passera au niveau i si seulement si la valeur v

    est suprieure [infrieure] la valeur de lun des

    nuds de niveau i-1 .

  • RECHERCHE

    Exemple: Soit le TASmin suivant.

    7 ?

    4

    6

    159

    96

    207

    811

    1015

    2516 1214

    La valeur existe, fin de recherche

  • RECHERCHE

    Exemple: Soit le TASmin suivant.

    8 ?

    4

    6

    160

    96

    207

    811

    1015

    2516 1214

    La valeur existe, fin de recherche

  • RECHERCHE

    Exemple: Soit le TASmin suivant.

    3 ?

    4

    6

    161

    96

    207

    811

    1015

    2516 1214

    La valeur nexiste pas , fin de recherche

  • RECHERCHE

    Exemple: Soit le TASmin suivant.

    30 ?

    4

    6

    162

    96

    207

    811

    1015

    2516 1214

    Fin de recherche, la valeur nexiste pas

  • RECHERCHE

    La recherche d'une valeur v dans un TAS peut

    ncessiter O(n) oprations o n est le nombre des nuds.

    Pire des cas: Si v est suprieure la valeur maximale du

    TASmin [ou infrieure la valeur minimale du TASmax],

    alors on doit descendre jusquau dernier niveau en parcourant

    163

    tous les nuds pour vrifier que la valeur recherche nexiste pas.

    La recherche tant un pr-requis la suppression d'une

    valeur v , une suppression peut ncessiter O(n)

    oprations aussi.

  • SUPPRESSION

    Pour supprimer une valeur v dans un TASmin [ou

    TASmax]

    1. Rechercher la valeur v , si elle existe on passe

    ltape suivante, sinon stop.

    Soit P le nud contenant la valeur v ,

    164

    2. Soit P le nud contenant la valeur v ,

    remplacer la valeur de P par la valeur du dernier

    nud du dernier niveau (soit Q ce nud et x sa

    valeur). Cela permet de vrifier la proprit

    structurelle.

  • SUPPRESSION

    Pour supprimer une valeur v dans un TASmin [ou TASmax]

    3. Vrifier la proprit dordre:

    a. Tant que la valeur x est infrieure [suprieure]

    celle du pre, changer la valeur x avec celle du

    165

    celle du pre, changer la valeur x avec celle du

    pre.

    b. Tant que la valeur x est suprieure [infrieure]

    celle de lun de ses fils, changer la valeur x avec

    celle du plus petit [grand] de ses fils.

  • SUPPRESSION

    Exemple: Soit le TASmin suivant. Donner le rsultat

    aprs la suppression de 9, 16, 6 et 4.

    4

    6

    166

    96

    207

    811

    1015

    2516 1214

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 9.

    4

    6

    167

    96

    207

    811

    1015

    2516 1214

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 9, 16.

    4

    6

    168

    86

    207

    11

    1015

    2516 1214

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 16.

    4

    6

    169

    86

    2071015

    2511 1214

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 6.

    4

    6

    170

    86

    2071011

    2515 1214

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 6.

    4

    12

    171

    812

    2071011

    2515 14

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 4.

    4

    7

    172

    87

    20121011

    2515 14

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 4.

    14

    7

    173

    87

    20121011

    2515

  • SUPPRESSION

    Exemple: Soit le TASmin suivant.

    Suppression de 4.

    7

    12

    174

    812

    20141011

    2515

  • IMPLMENTATION

    Un TAS se reprsente naturellement par un tableau:

    Les sommets sont numrots par un parcours en largeur, de

    gauche droite.

    Le sommet i est rang dans la case dindice i du tableau.

    412 3

    175

    1 2 3 4 5 6 7 8 9 10 11 12 13

    4 5 6 15 9 7 20 16 25 14 12 11 8

    56

    207

    811

    915

    2516 1214

    2 3

    4 5 6 7

    8 9

    10 11 12 13

  • IMPLMENTATION

    On parle ici de la reprsentation statique

    squentielle dun arbre binaire

    La case 0 est vide

    Indice(racine)=1

    Indice(FG)=2*Indice(Pre)

    176

    Indice(FG)=2*Indice(Pre)

    Indice(FD)=2*Indice(Pre)+1

    Indice(Pre)= [Indice (Fils)/2]

    0 1 2 3 4 5 6 7 8 9 10 11 12 13

    ?? 4 5 6 15 9 7 20 16 25 14 12 11 8

  • IMPLMENTATION

    Exercice:

    1. Dfinir la structure de donnes dun TAS dentier.

    2. Donner limplmentation du modle de larbre TAS

    dentier.

    177

    dentier.

    3. Trouver les algorithmes d'insertion, de recherche et

    de suppression dans un TASmin.

  • IMPLMENTATIONSTRUCTURE DE DONNES

    TYPE Tarbre = STRUCTURE

    T : TABLEAU[0..Max-1] dentier

    Dernier: ENTIER // indice sur la dernire case remplie du T (initialis 0)

    178

    T (initialis 0)

    FIN

    VAR R : Tarbre

  • IMPLMENTATIONMODLE

    Entte Corp

    Procdure CreerNoeud (Var R:

    Tarbre, x: entier)

    R.dernier++

    R.T[dernier]x

    Fonction Info (R: Tarbre,

    i:entier): entier

    Retourner (R.T[i])

    Procdure Aff_Info (Var R: R.T[i]x

    179

    Procdure Aff_Info (Var R:

    Tarbre, i: entier, x: entier)

    R.T[i]x

    Fonction FG (R: Tarbre,

    i:entier): entier

    Si (2*i R.dernier) alors Retourner (2*i)

    Sinon Retourner (-1)

    Fonction FD (R: Tarbre,

    i:entier): entier

    Si (2*i + 1R.dernier) alors Retourner (2*i + 1)

    Sinon Retourner (-1)

    Fonction Pre (R: Tarbre,

    i:entier): entier

    Si (i div 2>0) alors Retourner (i div 2)

    Sinon Retourner (-1)

  • INSERTION (EXEMPLE ILLUSTRATIF)

    4 5 6 15 9 7 20 16 25 14 12 11 8 3

    4

    56

    207

    811

    915

    2516 1214 3

    4 5 6 15 9 7 3 16 25 14 12 11 8 20

    4

    56

    37

    811

    915

    2516 1214 20

    180

    4 5 3 15 9 7 6 16 25 14 12 11 8 20

    4

    53

    67

    811

    915

    2516 1214 20

    3 5 4 15 9 7 6 16 25 14 12 11 8 20

    3

    54

    67

    811

    915

    2516 1214 20

  • IMPLMENTATIONINSERTION (ALGORITHME)

    Procdure Inserer_TASmin(Var R: Tarbre, x: entier)

    Var P, i: entier

    Dbut

    CreerNoeud (R, x);

    i R.dernier

    P Pre(R, i)

    181

    P Pre(R, i)

    TQ ((P-1) et (Info (R, P) > x)) faire // Info (R, P)

  • IMPLMENTATIONRECHERCHE (ALGORITHME)

    Fonction Rechercher_TASmin (R: Tarbre, x: entier): entier

    Var F:filedattente; i: entier;

    Dbut

    Si (R.dernier 0) alors // le tableau ou larbre nest pas vide

    Enfiler (F, i)

    TQ (Non FileVide(F)) faire

    Defiler (F, i)

    182

    Si Info (R, i) = x alors retourner (i)

    Si Info (R, i) x dans le cas TASmax

    Si FG(R, i) -1 Alors Enfiler(F,FG(R, i));

    Si FD(R, i) -1 Alors Enfiler(F,FD(R, i));

    FSi

    FTQ

    FSi

    Retourner (-1)

    Fin

  • IMPLMENTATIONRECHERCHE (ALGORITHME)

    Fonction Rechercher_TAS(R: Tarbre, x: entier): entier

    Var i: entier;

    Dbut

    On peut aussi faire une simple recherche

    squentielle dans le tableau T comme suit:

    183

    Pour i 1 R.dernier faire

    Si Info (R, i) = x alors retourner (i)

    Retourner (-1)

    Fin

  • SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS A))

    2 8 4 15 9 5 20 26 25 14 12 11 6

    2

    84

    205

    611

    915

    2526 1214

    2

    84

    205

    11

    915

    256 1214

    2 8 4 15 9 5 20 6 25 14 12 11

    184

    5

    84

    205

    11

    96

    2515 1214

    2 8 4 6 9 5 20 15 25 14 12 11

    2

    64

    205

    11

    98

    2515 1214

    2 6 4 8 9 5 20 15 25 14 12 11

  • SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))

    4 5 6 15 9 7 20 16 25 14 12 11 26

    4

    56

    207

    2611

    915

    2516 1214

    26

    56

    207

    11

    915

    2516 1214

    26 5 6 15 9 7 20 16 25 14 12 11

    185

    5

    266

    207

    11

    915

    2516 1214

    5 26 6 15 9 7 20 16 25 14 12 11

    5

    96

    207

    11

    2615

    2516 1214

    5 9 6 15 26 7 20 16 25 14 12 11

  • SUPPRESSION (EXEMPLE ILLUSTRATIF (CAS B))

    5

    266

    207

    11

    915

    2516 1214

    5 26 6 15 9 7 20 16 25 14 12 11

    5

    96

    207

    11

    2615

    2516 1214

    5 9 6 15 26 7 20 16 25 14 12 11

    186

    5

    96

    207

    11

    2615

    2516 2614

    5 9 6 15 12 7 20 16 25 14 26 11

  • IMPLMENTATIONSUPPRESSION (ALGORITHME)

    Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)

    Var P, G, D: entier

    Dbut

    iRechercher_TASmin (R, x) //Etape 1

    Si (i -1) alors //llment existe dans le TAS

    Aff_Info (R, i, Info (R, R.dernier)); R.Dernier --; // Etape 2

    //Etape 3: cas A

    187

    P Pre (R, i)

    Si (P-1) et (Info (R, P) > Info (R, i))

    rpter

    Permuter (R, i, P)

    i P

    P Pre (i)

    Jusqu ((P=-1) ou (Info (R, P) Info (R, i)))

    Sinon

  • IMPLMENTATIONSUPPRESSION (ALGORITHME)

    Procdure Supprimer_TASmin (Var R: Tarbre, x: entier)

    Var P, G, D, min: entier

    Dbut

    ..

    Sinon

    //Etape 3: cas B

    min i; fin faux

    188

    Rpter

    G FG(R, i)

    D FD (R, i)

    Si ((G -1) et (Info (R, min)> Info (R, G)) alors min G

    Si ((D -1) et (Info (R, min)> Info (R, D)) alors min D

    Si min i alors Permuter (R, i, min); i min

    Sinon fin vrai

    Jusqu (fin)

    Fsi

    Fin

  • EXEMPLES DAPPLICATION

    Malgr que la recherche et la suppression dans un TAS

    sont plus coteuses que dans un ABR ou un AVL, les TAS

    sont trs utiles entre autre pour le tri et pour

    implmenter les files de priorit.

    189

    implmenter les files de priorit.

  • tant donn un tableau dentiers T (n: sa taille), dire

    comment peut on trier (ordre croissant) ce tableau en

    utilisant un TASmin ou TAS max?

    EXEMPLE DAPPLICATIONTRI PAR TAS

    190

    Exemple:

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

  • 1. Transformer le tableau en un TASMIN

    20 15 10 35 19 13 5 3 12 7 16 40 25 38

    EXEMPLE DAPPLICATIONTRI PAR TAS

    191

    3

    5 10

    12 7 15 13

    35 19 20 16 40 25 38

  • 2. Extraire n fois le minimum du TASMIN :

    3

    5 10

    12 7 15 13

    EXEMPLE DAPPLICATIONTRI PAR TAS

    1923 5

    12 7 15 13

    35 19 20 16 40 25 38

    5

    7 10

    12 16 15 13

    35 19 20 38 40 25

  • 2. Extraire n fois le minimum du TASMIN :

    7

    12 10

    EXEMPLE DAPPLICATIONTRI PAR TAS

    1933 5 7 10

    19 16 15 13

    35 25 20 38 40

    10

    12 13

    19 16 15 40

    35 25 20 38

  • 2. Extraire n fois le minimum du TASMIN :

    12

    16 13

    19 20 15 40

    13

    16 15

    19 20 38 40

    EXEMPLE DAPPLICATIONTRI PAR TAS

    194

    3 5 7 10 12 13 15

    35 25 3835 25

    15

    16 25

    19 20 38 40

    35

  • 2. Extraire n fois le minimum du TASMIN :

    16

    19 25

    35 20 38 40

    19

    20 25

    35 40 38

    EXEMPLE DAPPLICATIONTRI PAR TAS

    195

    3 5 7 10 12 13 15 16 19 20 25 35 38 40

    20

    35 25

    38 40

    25

    35 40

    38

    35

    38 40

    38

    40

    40

  • EXEMPLE DAPPLICATIONTRI PAR TAS

    Tri_TASmin (Tab: Tableau, n: entier)

    Var R: Tarbre

    Dbut

    R.Dernier 0;

    //Construire le TAS

    196

    //Construire le TAS

    Pour i 0 n-1 faire Insrer_TASmin (R, Tab[i])

    // Extraire les minimums

    Pour i0 n-1 faire

    Tab[i] R.T[1]

    Supprimer_TASmin (R, R.T[1]) // supprimer la valeur de la racine

    FPour

    Fin

  • EXEMPLE DAPPLICATIONIMPLMENTATION DUNE FILE AVEC PRIORIT

    Une file dattente avec priorit est une collection dlments

    dans laquelle lajout ne se fait pas toujours la queue (fin).

    Tout nouvel lment est ajout dans la file, selon sa

    priorit.

    197

    Le retrait se fait toujours du dbut.

    Dans une file avec priorit, un lment prioritaire prendra la

    tte de la file mme sil arrive le dernier.

    Limplmentation de ces files dattente peut tre par tableau

    (dcalage ou circulaire) ou LLC ordonne, mais

    limplmentation la plus efficace et la plus rpandue utilise les

    TAS.

  • Modle Implmentation

    Crerfile(F) F.dernier0

    File_Attente_priorit = TAS

    F: Tarbre

    EXEMPLE DAPPLICATIONIMPLMENTATION DUNE FILE AVEC PRIORIT

    198

    Filevide(F) Filevide (F. dernier = 0)

    Filepleine(F) Filepleine (F. dernier = Max-1)

    Enfiler (F, X) Inserer_TASmin (F, X)

    Defiler(F,X) X F.T[1]

    Supprimer_TASmin (F, X) // extraire le minium

  • PARTIE VI:PARTIE VI:

    ARBRES M-AIRE

  • Dfinition

    Parcours

    PLAN DE LA PARTIE VI

    Implmentation

    Exemples dApplication

    200

  • DFINITION

    Un arbre m-aire d'ordre d est un arbre o chaque nud

    peut avoir un nombre de fils compris entre 0 et d.

    Si l'ordre n'est pas connu, on dit alors simplement un

    arbre m-aire. Dans ce cas, le nombre de fils est

    thoriquement illimit.

    201

    thoriquement illimit.

    NudsArtes a

    b c d

    e f g h i

    j k l

    0

    1

    2

    3

    Niveaux racine

    Feuilles

    P

    r

    o

    f

    o

    n

    d

    e

    u

    r

    Arbre dordre 4

  • PARCOURS

    De mme que les arbres binaires, on distingue deux types

    de parcours :

    Des parcours en profondeur qui explorent l'arbre

    branche par branche:

    Prordre : o on affiche le pre avant ses fils,

    202

    Prordre : o on affiche le pre avant ses fils,

    Postordre : o on affiche les fils avant leur pre.

    Le parcours en largeur (breadth-first) qui explore

    l'arbre niveau par niveau

  • PARCOURS PREORDRE

    Le parcours prordre de R (s'il n'est pas vide) consiste

    visiter le nud racine (R) ensuite parcourir rcursivement

    en prordre les sous arbres F1, F2, jusqu Fd, ce qui

    donne : [ R F1 F2 .. Fd]

    RR

    203

    R

    F2F1Fd

    a

    b c d

    e f g h i

    j k l

    a b e c d f g j k h i l

  • PARCOURS POSTORDRE

    Le parcours postordre de R (s'il n'est pas vide) consiste

    parcourir rcursivement en postordre les sous arbres F1, F2,

    jusqu Fd ensuite visiter le nud racine (R), ce qui donne

    : [F1 F2 .. Fd R ]

    RR

    204

    R

    F2F1Fd

    a

    b c d

    e f g h i

    j k l

    e b c f j k g h l i d a

  • PARCOURS EN LARGEUR

    Dans le parcours par niveau, tous les nuds dun mme

    niveau sont traits avant de descendre au niveau suivant

    a0

    Niveaux R

    205a b c d e f g h i j k l

    b c d

    e f g h i

    j k l

    1

    2

    3

  • IMPLMENTATION

    Les arbres m-aires peuvent tre prsents en deux

    manires:

    dynamique en utilisant des nuds chanes.

    statique en utilisant les tableaux,

    206

  • REPRSENTATION DYNAMIQUE

    on distingue deux cas:

    Cas 1: Si lordre de larbre est connu alors on cre un

    nud avec deux champs (information et un tableau de d

    pointeurs pour reprsenter les fils du nud).

    207

    pointeurs pour reprsenter les fils du nud).

    TYPE TnoeudM = STRUCTURE

    Info : Typeqq

    Fils : TABLEAU[0..d-1] DE * TnoeudM

    FIN

    VAR R : * TnoeudM

  • REPRSENTATION DYNAMIQUE

    on distingue deux cas:

    Cas 2: Si lordre de larbre est inconnu alors au niveau

    de chaque nud, on ne reprsente que l'adresse du fils le

    plus gauche et celle du frre immdiatement droite.

    208

    plus gauche et celle du frre immdiatement droite.

    TYPE TnoeudM = STRUCTURE

    Info : Typeqq

    FilsG, FrreD : * TnoeudM

    FIN

    VAR R : * TnoeudM

    a

    b c d

    e f g h i

    j k l

  • REPRSENTATION DYNAMIQUE

    La deuxime reprsentation dynamique est la plus

    gnrale car elle peut tre utilise aussi dans le cas o le

    degr de larbre est connu.

    TYPE TnoeudM = STRUCTUREa

    209

    TYPE TnoeudM = STRUCTURE

    Info : Typeqq

    FilsG, FrreD : * TnoeudM

    FIN

    VAR R : * TnoeudM

    b c d

    e f g h i

    j k l

  • REPRSENTATION STATIQUE

    Dans la reprsentation statique,

    Chaque case du tableau reprsente un nud de larbre

    La racine se trouve toujours dans la premire case du tableau

    De mme que la reprsentation dynamique, on distingue

    deux cas:

    210

    deux cas:

    Cas 1: Si lordre de larbre est connu alors chaque case du tableau

    est compos d'un champ information et d'un champ tableau qui

    contient les indices des fils du nud.

    Cas 2 (plus gnral): Si lordre de larbre est inconnu alors au

    niveau de chaque nud, on ne reprsente que deux indices : l'indice

    du fils le plus gauche et l'indice de son frre immdiatement

    droite.

  • REPRSENTATION STATIQUE

    TYPE TnoeudM = STRUCTURE

    Info : Typeqq

    Fils : TABLEAU[0..d-1] Dentier

    FIN

    VAR R : TABLEAU [0..Max-1] DE TnoeudM

    a 1 2 3 -1b 4 -1 -1 -1c -1 -1 -1 -1d 5 6 7 8

    0

    1

    2

    3

    R

    Info F0 F1 F2 F3

    211

    a

    b c d

    e f g h i

    j k l

    Re -1 -1 -1 -1f -1 -1 -1 -1g 9 10 -1 -1h -1 -1 -1 -1i 11 -1 -1 -1j -1 -1 -1 -1k -1 -1 -1 -1l -1 -1 -1 -1

    4

    5

    6

    7

    8

    9

    10

    11

  • REPRSENTATION STATIQUE

    a 1 -1b 4 2 c -1 3d 5 -1

    0

    1

    2

    3

    R

    TYPE TnoeudM = STRUCTURE

    Info : Typeqq

    FilsG, FrreD : entier

    FIN

    VAR R : TABLEAU [0..Max-1] DE * TnoeudM

    Info FiG FrD

    212

    e -1 -1f -1 6g 9 7h -1 8i 11 -1j -1 10k -1 -1l -1 -1

    4

    5

    6

    7

    8

    9

    10

    11

    a

    b c d

    e f g h i

    j k l

  • MODLE

    Pour manipuler ce type d'arbres, on dfini un modle

    form par les oprations suivantes :

    Module Rle

    CreerNoeud(x)Crer un nud isol contenant x commeinformation

    LibererNoeud(P) Dtruire le nud P

    213

    LibererNoeud(P) Dtruire le nud P

    Info(P)Retourner l'information stocke dans lenud P

    Fils(P, i) retourner le ime fils du nud P

    Aff-info(P, x)affecter x dans le champ info du nudP

    Aff-Fils(P, Q, i)affecter ladresse du nud Q au fils i dunud P

  • MODLE

    Exercice: Donner limplmentation de ce modle pour

    chaque prsentation de larbre (statique/dynamique dans le

    cas o le degr de larbre est connu ou pas)

    Module RleCrer un nud isol contenant x comme

    214

    CreerNoeud(x)Crer un nud isol contenant x commeinformation

    LibererNoeud(P) Dtruire le nud P

    Info(P) Retourner l'information stocke dans le nud P

    Fils(P, i) retourner le ime fils du nud P

    Aff-info(P, x) affecter x dans le champ info du nud P

    Aff-Fils(P, Q, i) affecter ladresse du nud Q au fils i du nud P

  • EXEMPLES DAPPLICATION

    Transformation dun arbre m-aire en arbre binaire

    1. Etape 1: Lier les frres dans une liste linaire

    chane

    2. Etape 2: Faire une rotation de 45 dans le sens des

    aiguilles dune montre

    215

    aiguilles dune montre

    a

    b c d

    e f g h i

    j k l

    R

  • EXEMPLES DAPPLICATION

    Transformation dun arbre m-aire en arbre binaire

    1. Etape 1: Lier les frres dans une liste linaire

    chane

    aR a

    216

    a

    b c d

    e f g h i

    j k l

    b c d

    e f g h i

    j k l

  • EXEMPLES DAPPLICATION

    2. Etape 2: Faire une rotation

    de 45 dans le sens des

    aiguilles dune montre

    a

    b

    e

    c d

    c

    d

    Transformation dun arbre m-aire en arbre

    binaire

    217

    aiguilles dune montre

    a

    b c d

    e f g h i

    j k l

    f

    j k

    l

    d

    g

    h

    i

    g h i

    k

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    C'est une gnralisation des Arbres Binaire de

    Recherche (ABR) pour tre utiliss en mmoire

    secondaire o les E/S sont buffrises . Elle est aussi

    218

    secondaire o les E/S sont buffrises . Elle est aussi

    utilise pour l organisation de fichiers (les indexes des

    articles)

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Chaque nud renferme un tableau de (d-1) valeurs

    ordonnes et un tableau de d fils, car dans un AMR

    d'ordre d, le nombre de fils d'un nud (le degr) est

    toujours gal au nombre de valeur stockes + 1.

    219

    toujours gal au nombre de valeur stockes + 1.

    s1 k1 s2 .. kj-1 sj kj ... kd-1 sd

    ki des donnes tq: k1 < k2 ....< kd-1

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    s1 k1 s2 .. kj-1 sj kj ... kd-1 sd

    ki des donnes tq: k1 < k2 ....< kd-1

    (lments du s1) < k1 (lments du s ) > k

    220

    s11 k11 s12 k12 ....... s1(d-1) k1(d-1) s1d

    sj1 kj1 sj2 kj2 ....... sj(d-1) kj(d-1) sjd

    sd1 kd1 sd2 kd2 ....... sd(d-1) kd(d-1) sdd

    (lments du s1) < k1 (lments du sd) > kd-1

    kj-1 < (lments du sj) < kj(j=2,3, ...d-1)

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    La structure de larbre ARM est la suivante:

    Type TnudAMR = Structure

    Info : Tableau[0..d-2] dentier

    221

    Fils : Tableau[0..d-1] de *TnoeudAMR

    Degr : entier

    Fin

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Exemple : soit larbre m-aires de recherche AMR

    dordre 4

    222

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Pour crire des algorithmes sur ce type d'arbres, le

    modle doit tre form des oprations suivantes :

    CreerNoeud(x) LibererNoeud(P)

    223

    Info(P, i)

    Fils (P, i)

    Degr(P)

    Aff_info(P, x, i)

    Aff_fils(P, Q, i)

    Aff_Degr(P, n)

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    La recherche dans un AMR ressemble beaucoup

    celle effectue dans un ABR, except quau lieu de

    prendre chaque nud une dcision de branchement

    224

    prendre chaque nud une dcision de branchement

    binaire (Fils gauche ou droit), on prend une dcision

    options multiples, selon le nombre de fils du nud.

    La complexit de cette recherche est O(logdegr(n) ).

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Exemple: Rechercher llment 68.

    225On rcupre ladresse du nud (nud P) ainsi la position

    dans le nud (soit pos = 2) o llment 68 doit exister.

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Linsertion se droule comme suit:

    1. Rechercher llment insrer x :

    RechercherAMR(R, x, Var P, Var pos, Var trouve).

    2. Si llment nest pas trouv (trouve = faux)

    226

    2. Si llment nest pas trouv (trouve = faux)

    a. Si le tableau Info du nud P nest pas plein alors

    insrer llment sa position pos dans ce tableau Info .

    b. Sinon le tableau Info du P est plein alors crer un

    nouveau nud contenant llment x insrer ensuite

    placer comme fils numro pos du P

  • EXEMPLES DAPPLICATION

    Arbres M-aire de Recherche (AMR)

    Exemple: Insrer les lments suivants: 1, 40, 68,

    170.

    227

    1 6 10 37 40

    68

    170

  • EXEMPLES DAPPLI