coursAlgo_V6

download coursAlgo_V6

of 91

Transcript of coursAlgo_V6

  • 8/13/2019 coursAlgo_V6

    1/91

    Algorithmique : Volume 6

    iUT ORSAY

    Universit Paris XI

    I.U.T. d'Orsay

    Dpartement Informatique

    Anne scolaire 2003-2004

    Recherche Adressage dispers

    Tris

    Complexit

    Ccile Balkanski, Nelly Bensimon, Grard Ligozat

  • 8/13/2019 coursAlgo_V6

    2/91

    Recherche

    2003-2004 Algorithmique 6 : Recherche,complexit, tris

    2

  • 8/13/2019 coursAlgo_V6

    3/91

    Recherche

    Problme gnral abstraitensemble de valeurs E, lment a; est-ce que a E?rponse: boolen (x) { xE | x=a }

    plus gnralementexiste-t-il x vrifiant certains critres

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 3

    (x) { xE | (x)}

    trouver tous les x satisfaisant certains critres

    { xE | (x)} (bases de donnes)

  • 8/13/2019 coursAlgo_V6

    4/91

    Recherche en informatique On ne travaille pas sur des ensembles mathmatiques,

    mais sur des structures de donnes particulires

    Les donnes peuvent tre de nature complexe(agrgats, classes)

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 4

    tableau

    tableau tri

    20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

  • 8/13/2019 coursAlgo_V6

    5/91

    32

    18

    9

    5

    24

    27

    20

    19

    13

    arbre binaire de recherche

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 5

    368

    12

    15

    177

  • 8/13/2019 coursAlgo_V6

    6/91

    Tri de donnes complexes Exemple de donne complexe:

    type Etudiant = agrgatnom: chanege: entierclassement: entier

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 6

    photo: fichier_GIFfin

    on peut trier par nom (ordre alphabtique), par ge, parclassement

    pas par photo

    cls, cls primaires ex-aequo, mme ge

  • 8/13/2019 coursAlgo_V6

    7/91

    Recherche et type de donnes On utilise divers types de donnes sur lesquelles

    on fait des oprations de base:- ajout

    - suppression

    - mise- jour

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 7

    - consultation

    Chaque structure a des avantages et desinconvnients :

    tableau, tableau tri, arbre binaire, liste chane,etc.

  • 8/13/2019 coursAlgo_V6

    8/91

    Recherche squentielle

    fonction rechSeq (tab , nbre , val) retourne (boolen){renvoie VRAI si val est dans tab, FAUX sinon}

    paramtre s (D) tab: tableau[1, MAX] d'entiers(D) nbr, val: entiervariables trouv: boolen i: entier

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 8

    i 0

    tant que non trouv ET i < nbr fairei i+ 1

    trouv (tab[i] = val)

    ftqretourne (trouv)

    fin

  • 8/13/2019 coursAlgo_V6

    9/91

    fonction rechSeq (tab, nbre, val) retourne(entier){renvoie le premier indice o se trouve val dans tab, -1 sinon}

    paramtre s (D) tab: tableau [1, MAX] d'entiers(D) nbr, val: entier

    variables trouv: boolen i: entierdbut

    trouv faux

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 9

    i 0tant que non trouv ET i < nbr faire

    i i+1

    trouv (tab[i] = val)ftqsi trouv alors retourne (i) sinon retourne (-1) fsi

    fin

  • 8/13/2019 coursAlgo_V6

    10/91

    Recherche avec critres

    procdure rechLesMin (tab_d, nbre_d, tab_r, nbre_r, val){renvoie dans le tableau tab_r les lments de tab_d val}

    paramtre s (D) tab_d: tableau [1, MAX] d'entiers,nbr_d, val: entier

    (R) tab_r: tableau [1, MAX] d'entiers, nbr_r: entiervariables id, ir: entiersdbut ir 0

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 10

    pour id l nbre_d fairesi (tab_d[id] val)

    alors irir+ 1

    tab_r[ir] tab_d[id]fsi

    fpourfin

  • 8/13/2019 coursAlgo_V6

    11/91

    fonction rechMin (tab, nbre) retourne(entier){renvoie la plus petite valeur contenue dans le tableau tab}

    paramtre s (D) tab : tableau [1, MAX] d'entiers,nbr : entier

    variables i, min : entiersdbut

    imin tab[l]

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 11

    pour id 2 nbre fairesi (tab[i] < min)

    alors min tab[i]

    fsifpourretourne (tab[min])

    fin

  • 8/13/2019 coursAlgo_V6

    12/91

    fonction rechPosMin (tab, nbre) retourne(entier)

    {retourne le (dernier) indice de la plus petite valeur du tableau tab}paramtre s (D) tab: tableau [1, MAX] d'entiers, nbr: entiervariables i, imin, min: entiersdbut

    min tab[1]

    imin 1

    our id 2 nbre faire

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 12

    si (tab[i] min)alors min tab[i]

    imin i

    fsifpourretourne (imin)

    fin

  • 8/13/2019 coursAlgo_V6

    13/91

    Recherche squentielle dans tableau ordonn

    fonction rechSeq (tab, nbre, val) retourne(entier){renvoie le premier indice o se trouve val s'il est dans tab, -1 sinon}

    paramtre s (D) tab: tableau [1, MAX] d'entiers(D) nbr, val: entier

    variables trouv, dpass : boolens ; i : entierdbuttrouv faux d ass faux i 0

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 13

    tant que non (trouv OU dpass) ET i < nbr fairei i+ 1

    trouv (tab[i] = val)

    dpass (tab[i] > val)ftqsi trouv alors retourne (i) sinon retourne(-1)fin

  • 8/13/2019 coursAlgo_V6

    14/91

    Recherche dichotomique

    Rappel: les valeurs doivent tre tries !

    Principe:

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 14

    on vise au milieu du tableau

    si l'lment vis est plus grand que val, il suffit

    de chercher gauche ; s'il est plus grand, ilsuffit de chercher droite

  • 8/13/2019 coursAlgo_V6

    15/91

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 15

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

  • 8/13/2019 coursAlgo_V6

    16/91

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 16

    2 5 7 8 9 12 13 15 17 18 19 20 24 27 32 36

  • 8/13/2019 coursAlgo_V6

    17/91

    Recherche dichotomiquefonction rechDicho (tab, nbre, val) retourne(entier){renvoie un indice o se trouve val s'il est dans tab, -1 sinon}

    paramtre s (D) tab : tableau [1, MAX] d'entiers(D) nbr, val : entier

    variables trouv : boolen ; id, if, im: entiers

    dbuttrouv faux; id 0 ; if nbre + 1tant que non trouv ET (if - id) > 1 faire

    im (id + if)/2

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 17

    rouv a m = va

    si (tab[im] > val) alors if imsinon id im

    fsiftq

    si (id = 0) alors retourne (-1)sinon si (tab[id]=val) alors retourne(id)sinon retourne (-1)

    fsifsi

    fin

  • 8/13/2019 coursAlgo_V6

    18/91

    Recherche dichotomique: variantel

    fonction rechDicho (tab, nbre, val) retourne(entier)

    {renvoie le plus grand indice o se trouve val s'il est dans tab, -1 sinon}

    paramtre s (D) tab: tableau [1, MAX] d'entiers(D) nbr, val: entier

    variables id, if, im: entiers

    dbutid 0; if nbre+1tant que (if - id) > 1 faire

    im (id + if)/2

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 18

    s ta m > va a ors m

    sinon id imfsi

    ftqsi (id = 0) alors retourne (-1)

    sinon si (tab[id]=val) alors retourne(id)sinon retourne (-1)

    fsifsi

    fin

  • 8/13/2019 coursAlgo_V6

    19/91

    Recherche dichotomique : variante2

    fonction rechDicho (tab, nbre, val) retourne (entier)

    {renvoie le plus petit indice o se trouve val s'il est dans tab, -1 sinon}

    paramtre s (D) tab: tableau [1, MAX] d'entiers(D) nbr, val: entier

    variablesid, if, im: entier

    dbutid 0 ; if nbre+ 1tant que (if - id) > 1 faire

    im (id + if)/2

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 19

    s ta m va a ors m

    sinon id imfsi

    ftqsi (if = nbre + 1) alors retourne (-1)

    sinon si (tab[if]=val) alors retourne(if)sinon retourne(-1)

    fsifsi

    fin

  • 8/13/2019 coursAlgo_V6

    20/91

  • 8/13/2019 coursAlgo_V6

    21/91

    32

    18

    9

    5

    24

    27

    20

    19

    13

    Simulation de recherche

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 21

    368

    12

    15

    177

  • 8/13/2019 coursAlgo_V6

    22/91

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 22

  • 8/13/2019 coursAlgo_V6

    23/91

    Adressage Dispers

    2003-2004 Algorithmique 6 : Recherche,complexit, tris

    23

  • 8/13/2019 coursAlgo_V6

    24/91

    Adressage dispers

    Objectif: classer M lments dans un tableau

    Principe: dans un tableau de pcases, on classel'lment x, lindice k, donn par une fonctiond'adressage h

    24

    - classer un lment x entier k, compris entre 1 et p Fonction h: h(x)=k

    - la valeur kne dpend que de l'lment x;

    - l'lment xn'est pas plac relativement aux autreslments

  • 8/13/2019 coursAlgo_V6

    25/91

    Quelques exemples de fonctionsdadressage

    x : chane h1(x) = nombre de caractres de la chane

    h1("Paul") = 4 h1("MmeDupont")=9

    x: entier h2(x) = somme de ses chiffres dcimaux

    25

    2 2

    x: entier h3(x)= nombre de bits 1 dans l'criturebinaire

    h3

    (342) = h3

    (101010010) = 4

    x: chane de caractres

    h4(x) = somme des codes ASCII des caractres de la chane

  • 8/13/2019 coursAlgo_V6

    26/91

  • 8/13/2019 coursAlgo_V6

    27/91

    Une autre fonction dadressage

    h5 associe c1ck la somme :

    - (Somme (rang de ci dans lalphabet * i) modulo 9) +1

    Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo,Michle

    * * * *

    27

    - 5 = = =

    - h5 (Jeanne) = ((10*1+5*2+1*3+14*4+14*5+5*6) mod 9) + 1

    = 179 mod 9 + 1 = 9

    h5 (Paule) = ((16*1+1*2+21*3+12*4+5*5) mod 9) + 1 = 1 mod 9 + 1 = 2

    Marc Paule Jo Izabelle Michle Jeanne

    1 2 3 4 5 6 7 8 9

  • 8/13/2019 coursAlgo_V6

    28/91

    Recherche dun lment

    Algorithme de recherche d'un lment x dans

    une table construite par adressage dispersd'une suite d'lments :

    28

    1) on calcule le code associ cet lment x par lafonction dadressage, soit p.

    2) on compare le contenu de la p-ime case de la tableavec llment x : si identit, la recherche est positive,

    sinon elle est ngative.

  • 8/13/2019 coursAlgo_V6

    29/91

    Ajout dun lment

    Algorithme d'ajout d'un lment X dans une

    table construite par adressage dispers d'unesuite d'lments:

    29

    1) on calcule le code associ cet lment par lafonction d'adressage, soit p.

    2) on affecte l'lment la p-ime place dans la table,

    condition toutefois que cette place ne soit pasdj occupe risque de collision

  • 8/13/2019 coursAlgo_V6

    30/91

    Exemples (avec h5 ) Recherche de "Isabelle"

    - code associ par h5 : 1 et tabAdrDisp [1] "Isabelle "

    recherche ngative

    Ajout de "Ali"- code associ par h5 : 8 ; tabAdrDisp [8] : " "

    30

    ajout possible

    Ajout de "Lola"- code associ par h5 : 2 ; or tabAdrDisp [2] : "Paule"

    collision

    Marc Paule Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

  • 8/13/2019 coursAlgo_V6

    31/91

    Mthodes de rsolution des

    collisions : mthodes internes

    lnternes car on opre dans le tableau allou

    - premire possibilit : on utilise la place libre dans le tableau

    Algorithme d'ajout d'un lment entr en collision :

    - partir du rang de la collision, rechercher la premire place libre et y

    31

    placer l'lment entr en collision.

    - arriv la dernire case du tableau, continuer la recherche la premirecase du tableau.

    Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1)

    Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

  • 8/13/2019 coursAlgo_V6

    32/91

  • 8/13/2019 coursAlgo_V6

    33/91

    Recherche dun lment

    1) on calcule le code associ cet lment xpar la

    fonction d'adressage : soit p.

    2) on compare le contenu de la p-ime case de la table'

    33

    si identit, la recherche est positive, sinon on poursuit la recherche squentiellement, en

    cas dventuelles collisions (utiliser les marques)

    arrt avec recherche ngative si case vide ouparcours jusqu (p-1)

  • 8/13/2019 coursAlgo_V6

    34/91

    Exemples (avec h5 )

    retrait de Marc (code 1)

    Marc Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    X Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    34

    retrait de Ali (code 8)

    recherche de Isabelle (code 1)

    X Paule Lola Isabelle Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    X Paule Lola Isabelle Jo Izabelle Michle X Jeanne

    1 2 3 4 5 6 7 8 9

  • 8/13/2019 coursAlgo_V6

    35/91

    Rsolution interne des collisions

    (suite)

    Deuxime solution: on partitionne le tableau en

    deux :- une zone d'adressage primaire

    35

    -

    Algorithme d'ajout d'un lment entr en collision :rechercher une place libre dans la zone de

    dbordement et y placer l'lment entr en

    collision

  • 8/13/2019 coursAlgo_V6

    36/91

  • 8/13/2019 coursAlgo_V6

    37/91

    Recherche

    1) on calcule le code associ cet lment xpar la

    fonction d'adressage, soit p

    2) on compare le contenu de la p-ime case de la table

    37

    avec men x : s en , a rec erc e es pos ve,

    sinon on mne une recherche squentielle dans lazone de dbordement du tableau

  • 8/13/2019 coursAlgo_V6

    38/91

    et retrait

    1) on calcule le code associ cet lment xpar lafonction d'adressage, soit p

    2) on compare le contenu de la p-ime case de la tableavec l'lment x :

    38

    si identit, on le supprime puis on place dans cettecase une marque pour indiquer que l'lment

    supprim a pu provoquer d'ventuelles collisions

    si non identit, poursuivre la recherche

    squentiellement en cas d'ventuelles collisions,dans la zone de dbordement du tableau

  • 8/13/2019 coursAlgo_V6

    39/91

  • 8/13/2019 coursAlgo_V6

    40/91

    Mthodes de rsolution externe descollisions

    "Externes " car on alloue des zones de stockagesupplmentaires

    40

    Le tableau contient, pour un code donn, deuxinformations :

    - une place de rangement d'un lment (principal) ;

    - une liste de dbordement pour les lments entrsen collision avec l'lment prcdent

  • 8/13/2019 coursAlgo_V6

    41/91

    Ajout dun lment

    Algorithme d'ajout d'un lment entr en collision :

    - Crer la liste de dbordement associe ce code sicelle-ci n'existe pas encore,

    - puis ajouter cette liste le nouvel lment

    41

    Exemple (avec h5): ajout de Lola (code 2)

    Lola

    Marc Paule Jo Izabelle Michle Ali Jeanne1 2 3 4 5 6 7 8 9

  • 8/13/2019 coursAlgo_V6

    42/91

    Exemples (suite)

    ajout de Isabelle (1)

    Marc Paule Jo Izabelle Michle Ali Jeanne1 2 3 4 5 6 7 8 9

    42

    ajout de Jos (1)

    Marc Paule Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    Isabelle

    Jos Lola

    Recherche dun lment

  • 8/13/2019 coursAlgo_V6

    43/91

    Recherche dun lment

    1) on calcule le code associ cet lment xpar lafonction d'adressage, soit p

    2) on compare le contenu de la premire information dela p-ime case de la table avec l'lment x

    si identit, la recherche est positive ;

    43

    sinon, on mne une recherche squentielle dansla liste associe

    recherche de Michle (7),

    puis Isabelle (1)

    Marc Paule Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    Jos Lola

    Isabelle

    Retrait dun lment

  • 8/13/2019 coursAlgo_V6

    44/91

    Retrait d un lment

    1) on calcule le code associ cet lment xpar la fonctiond'adressage, soit p

    2) on compare le contenu de la premire information de la p-ime

    case de la table avec l'lment x si identit, on retire llment et on le remplace par l'l-

    ment plac en tte de la liste associe, quand elle existe ;

    44

    sinon on mne une recherche squentiellement dans laliste associe, avec retrait si la recherche est positive

    retrait de Michle (7),

    puis Lola (2) et enfin Marc (1)

    Marc Paule Jo Izabelle Michle Ali Jeanne

    1 2 3 4 5 6 7 8 9

    Isabelle

    Jos Lola

    Algorithmes de la mthode

  • 8/13/2019 coursAlgo_V6

    45/91

    Algorithmes de la mthode

    d'adressage dispers avec rsolutionexterne

    type Info2 = agrgatprincipal : chane {premire chane associe un code donn}dbord : Liste {objet Liste dont l'information est une chane}

    45

    fin

    fonction code (uneChane) retourne (entier)

    {retourne la valeur donne par la fonction dadressage}paramtre (D) uneChane : chane

    P d j t (t bl l Ch )

  • 8/13/2019 coursAlgo_V6

    46/91

    Procdure ajout (table, laChane){ajoute l'lment laChane dans une table, par adressage dispers, avecrsolution externe des collisions}

    paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2(D) laChane : chane

    variables ok: boolenind: entierdbut

    46

    si table[ind].principal = " "alors {c'est la premire occurrence de ce code d'adressage}

    table[ind].principal laChanesinon {il y a collision: la place principale est dj occupe, do

    ajout dans la liste de dbordement,en tte}

    table[ind].dbord.premier()table[ind].dbord.insreAvant(laChane)

    fsifin

    Fonction recherche (table, laChane) retourne (boolen)

  • 8/13/2019 coursAlgo_V6

    47/91

    {recherche si l'lment laChane est prsent dans une table, par adressage

    dispers, avec rsolution externe des collisions}paramtres (D) table: tableau [1, TAILLEMAX] de Info2(D) laChane : chane

    variables trouv, ok: boolens; ind : entier

    dbutind code(laChane)trouv table[ind].principal = laChane

    47

    alors table[ind].dbord.premier()tant que non trouv et

    non table[ind].dbord.horsListe() fairetrouv (table[ind].dbord.info() = laChane)table[ind].dbord.suivant()

    ftqfsiretourne (trouv)

    fin

    Fonction retrait (table, laChane) retourne boolen

  • 8/13/2019 coursAlgo_V6

    48/91

    Fonction retrait (table, laChane) retourne boolen{retire, si possible, llment laChane dune table construite par adressage

    dispers avec rsolution externe des collisions}paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2

    (D) laChane : chane

    variables ok : boolen; ind : entierdbut

    ind code(laChane)

    48

    rouv a e n .pr nc pa = a a ne

    si trouv {alors retrait de laChane du champ principal de la table}

    alors retraitPrincipal (table, laChane, ind)

    sinon {recherche, et ventuel retrait, de laChane dans la liste de

    dbordement}ok rechercheRetraitDeborde (table, laChane, ind)

    fsiretourne (ok)

    fin

  • 8/13/2019 coursAlgo_V6

    49/91

    Fonction rechercheRetraitDborde(table, laChane,ind)

  • 8/13/2019 coursAlgo_V6

    50/91

    Fonction rechercheRetraitDborde(table, laChane,ind){recherce et retire, si possible, llment laChane de la liste de dbordement du

    code adresse ind}paramtres (D/R) table: tableau [1, TAILLEMAX] de Info2

    (D) laChane : chane; ind : entier

    variable trouv : boolen

    dbuttable[ind].dbord.premier()

    trouv faux

    50

    rec erc e e a a ne ans a s e e or emen

    tant que non trouv et non table[ind].dbord.horsListe() fairetrouv (table[ind].dbord.info() = laChane )

    si non trouv alors table[ind].dbord.suivant()

    ftq

    {si trouv, alors retrait dans la liste de dbordement de la table}si trouv

    alors table[ind].dbord.supprimer() {le curseur est plac sur laChane}

    retourne (trouv)

    fin

  • 8/13/2019 coursAlgo_V6

    51/91

    Complexit des algorithmes

    2003-2004 Algorithmique 6 : Recherche,complexit, tris

    51

    Complexit des algorithmes

  • 8/13/2019 coursAlgo_V6

    52/91

    Complexit des algorithmes

    Complexit temporelle, complexit spatiale

    cot en temps: temps ncessaire l'excution

    cot en espace: espace mmoire ncessaire

    Pire des cas, complexit moyenne- la complexit dans le pire des cas n'est pas ncessairement une bonne

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 52

    indication du cot en pratique (exemple de la mthode du simplexe)

    - comment estimer le cas moyen ?

    tude apriori, bancs d'essai et valuation a posteriori- tude thorique

    - tude pratique de l'algorithme implment, bancs d'essai

    l d bl l d

  • 8/13/2019 coursAlgo_V6

    53/91

    Complexit d'un problme, complexit dun

    algorithme

    contraintes sur un problme

    par exemple, recherche d'un lment dans un tableau de n

    lments non tris : si l'lment n'est pas prsent, n

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 53

    compara sons seront n cessa res pour e constater

    Attention: si le tableau est tri, une seule peut tre

    suffisante !- parmi les diffrents algorithmes possibles, certains sont meilleurs que

    d'autres

    - la comparaison des pires des cas peut ne pas tre une bonne indication

    Complexit asymptotique

  • 8/13/2019 coursAlgo_V6

    54/91

    Complexit asymptotique

    Ncessit d'tudier la complexit pour de grosses

    quantits de donnes

    Exemple : deux algorithmes pour une mme tche:- A1 effectue n2 oprations de base, A2 effectue n.log2 n oprations

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 54

    - M1 effectue 210 (environ mille) oprations par sconde- M2 effectue 220 (environ un million d') oprations par seconde

    Temps de calcul (en secondes) :

    Complexit asymptotique (2)

  • 8/13/2019 coursAlgo_V6

    55/91

    M1 M2

    A1 A2 A1 A2

    Complexit asymptotique (2)

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 55

    n = < ,

    n = 220 230 20. 210 220 20

    R idi d i

  • 8/13/2019 coursAlgo_V6

    56/91

    Rapidit de croissance compare

    de certaines fonctions usuelles

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 56

    Calcul de la complexit dun algorithme

  • 8/13/2019 coursAlgo_V6

    57/91

    Calcul de la valeur d'un polynme en un point1. p a[0]

    2. pour i 1 n faire {puissance(a, n) retourne an}

    3. xpi puissance (x , i)4. p p + a[i]* xpi

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 57

    Nombre de multiplicationsen 3 --> 1+2+3+...+ (n-1) = (n-l)n/2

    en4 --> n

    Nombre d'additions en 4 --> n

    soit au total: n(n + 3)/2 < n2 pour n > 3.

    Notations utilises

  • 8/13/2019 coursAlgo_V6

    58/91

    Notations utilises

    Grand O

    f(n) = 0(g(n)) s'il existe C> 0 et no > 0 tels que

    f(n) C. g(n) pour tout n no

    Grand omga

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 58

    f(n) = (g(n)) s'il existe C> 0 et no > 0 tels que

    f(n) C. g(n) pour tout n no

    Grand thta

    f(n) = (g(n)) s'il existe C1 et C2 > 0 et no > 0 tels que

    C1.g(n) f(n) C2. g(n) pour tout n no

    E l

  • 8/13/2019 coursAlgo_V6

    59/91

    Exemples

    f(n) = O(1) f est majore

    f(n) = (1) f est minore

    3n+2 = O(n) 3n+3 = O(n)

    100n+6 = O(n)

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 59

    10n2

    +4n+2=O(n2

    ) 3n+3 = O(n2

    )1000n2 + 100 n -6 = O(n2) 10n2+4n+2= O(n4)

    6*2n + n2 = O(2n)

    ----> c'est la plus petite fonction g(n) qui est

    intressante

  • 8/13/2019 coursAlgo_V6

    60/91

  • 8/13/2019 coursAlgo_V6

    61/91

    Temps dexcution des algorithmes

    Temps constant (rares algorithmes, cf. adressagedispers) O(1)

    Temps logarithmique (exemple: recherche

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 61

    2

    Temps linaire (exemple: recherche squentielle) O(n) Temps polynomial O(nk) (coteux si k dpasse 3)

    - quadratique O(n2)

    - cubique O(n3)

    Temps exponentiel O(cn) ( viter en gnral)

    Comparaison des complexits d'algorithmes de la

    mme classe

  • 8/13/2019 coursAlgo_V6

    62/91

    mme classe

    Calcul de la valeur d'un polynme en un point (1)

    p a[0]

    pour i 1 n faire

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 62

    xpi puissance(x, i)p p + a[i]* xpi

    fpourn(n+1)/2 multiplications, n additions : algorithme en O(n2)

  • 8/13/2019 coursAlgo_V6

    63/91

    Calcul de la valeur d'un polynme en un point (2)

    p a[0]

    xpi 1

    pour i 1 n faire

    x i x i * x

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 63

    p p + a[i]* xpifpour

    2n multiplications, n additions : algorithme en O(n)

  • 8/13/2019 coursAlgo_V6

    64/91

    Calcul de la complexit dalgorithmes de recherche simples

  • 8/13/2019 coursAlgo_V6

    65/91

    Oprations lmentaires retenues: lescomparaisons

    1. Recherche squentielle dans un tableau nontri

    - complexit au pire n comparaisons

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 65

    - comp ex t moyenne n compara sons

    algorithme en O(n)2. Recherche squentielle dans un tableau tri

    - complexit au pire n comparalsons- complexit moyenne n/2 comparaisons

    algorithme en O(n)

    Recherche dichotomique (dans un tableau tri 1)

    l it i l it

  • 8/13/2019 coursAlgo_V6

    66/91

    - complexit au pire = complexit moyenne =

    nombre p d'intervalles considrs

    Exemple avec n = 8 = 23 tableau de 8 lments

    niveau 0

    niveau 1

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 66

    niveau 2

    niveau 3

    Profondeur de larbre de dcision de lordre de log2n :

    complexit algorithmique en O(log2n)

  • 8/13/2019 coursAlgo_V6

    67/91

    Tris

    2003-2004 Algorithmique 6 : Recherche,complexit, tris 67

    Tris

  • 8/13/2019 coursAlgo_V6

    68/91

    Donnes dans un ensemble d'lments S muni d'un ordre total

    ordre | a < a (rflexif)

    partiel | a < b et b < c => a < c (transitif)

    | a ~ b et b < a => a = b (antisymtrique)

    total | a,b a=b OU a

  • 8/13/2019 coursAlgo_V6

    69/91

    - internes: l'ensemble des donnes peut tre trait en mmoirecentrale

    - externes: on opre sur une partie des donnes seulement

    Tris d'entiers: mthode des seaux trier: des entiers entre 1 et m

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 69

    principe:

    - on cre m files d'attente vides numrotes 0, , m-1

    - on parcourt linairement les donnes, et on place ai

    dans la file numrote ai- on place les files d'attente bout bout

    Exemple m = 10, 4 7 3 2 8 1 5

  • 8/13/2019 coursAlgo_V6

    70/91

    p ,

    Rsultat: 1, 2, 3, 4, 5,

    Estimation du cot :

    1 2 3 4 5 7 8

    0 1 2 3 4 5 6 7 8 9

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 70

    - chaque lment peut tre plac dans une file en tempsconstant, d'o O(n) pour les n lments ;

    - concatnation de m files en O(m) ;

    - si m = 0(n), cot total en O(n).

    Cette mthode peut tre gnralise des k uplets d'entiers

  • 8/13/2019 coursAlgo_V6

    71/91

    Cette mthode peut tre gnralise des k-uplets d entiers

    munis de l'ordre lexicographique, et plus gnralement des

    chanes (de longueur variable):

    (s1,..., sp) < (t1,..., tq) si et seulement si

    ou bien p < q et si = ti pour 1 i p (s est un prfixe de t); ou bien il existe j tel que si < tj et si = ti pour tout i < j.

    Exemples:

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 71

    634 < 63472 tri < triage64589 < 647 seau < selle

    Pour des suites de k-uplets dont chaque composante est un entierentre 0 et m-l, on obtient un algorithme de cot O((m+n)k).

    Cas gnral:

    - on trie des lments quelconques munis d'un ordre (total)

  • 8/13/2019 coursAlgo_V6

    72/91

    - la seule opration disponible est la comparaison de deux lments

    Exemple: tri de trois lments a, b, c

    a

  • 8/13/2019 coursAlgo_V6

    73/91

    Estimation du cot

    Arbre binaire de hauteur h => au plus 2h feuilles

    Thorme Un arbre de dcision pour n lments a une hauteur suprieure ou

    gale log(n!).

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 73

    - En effet, un arbre de dcision doit avoir au moins autant de feuilles que de

    rsultats possibles, c'est--dire n! feuilles au moins. Donc la hauteur de cet arbreest log(n!)

    Estimation

    Formule de Stirling: n! approxim par (n/e)n, donc le nombre de tests ncessaires estminor par n(logn - log e) = nlog n -1,44n

    => on ne peut pas esprer faire mieux que O(n log n)

    Mthodes de tri lmentaires (1)

    Tri par slection

  • 8/13/2019 coursAlgo_V6

    74/91

    p

    Donnes: un tableau de n lments trier

    Principe: pour chaque position successive dans le tableau, on cherche l'lment

    qui occupera cette position dans le tableau tri, et on l'y place en permutant

    cet lment avec l'lment courant.

    reste trier

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 74

    liste trie

    liste trie

    case courantedevrait se trouverdans la case courante

    reste trier

    20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

  • 8/13/2019 coursAlgo_V6

    75/91

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 75

  • 8/13/2019 coursAlgo_V6

    76/91

    Algorithme de tri par slectionprocdure triSlection (tab, nbre){recherche pour chaque case l'lment qui doit y tre affect et y place cet

    lment}

    paramtre s (D/R) tab: tableau [1, MAX] d'entiers(D) nbre: entier

    variables indDuMin, osition: entier

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 76

    dbut

    pour position 1 nbre -1 faireindDuMin slection(tab, nbre, position,nbre)

    {recherche lindice de llment minimum entre position et la fin de tab}

    changer(tab, position, indDuMin) {change deux positions dans tab}

    fpourfin

  • 8/13/2019 coursAlgo_V6

    77/91

    Mthodes de tri lmentaires (1)

    Tri par insertion

  • 8/13/2019 coursAlgo_V6

    78/91

    Donnes: un tableau de n lments trier

    Principe: la partie gauche est trie; on essaie d'insrer chaque nouvel lment

    dans cette liste, en dcalant d'un cran la partie droite restante.

    place du nouveau

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 78

    liste trie

    liste trie reste trier

    nouveau

    reste

    20 18 9 5 24 13 27 2 8 32 7 12 36 15 17 19

  • 8/13/2019 coursAlgo_V6

    79/91

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 79

    Algorithme de tri par insertionprocdure triInsertion (tab, nbre)

  • 8/13/2019 coursAlgo_V6

    80/91

    {recherche pour chaque lment la case o il doit tre affect et y place cetlment}

    paramtre s (D/R) tab: tableau [1, MAX] d'entiers(D) nbre: entier

    variables indVal, numPlace: entiersdbutpour indVal 2 nbre faire

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 80

    {recherche de 1'endroit o doit s'insrer la valeur place en indVal}

    numPlace Insertion(tab, nbre, indVal){si la valeur n'est pas insrer en fin de zne trie, l'insrer la place voulue}

    si (numPlace indVal ) alors{libre la position numPlacepar dcalage et y place tab[indVal]}

    dcalerEtPlacer(tab, numPlace, indVal)fsi

    fpourfin

  • 8/13/2019 coursAlgo_V6

    81/91

    procdure dcalerEtPlacer(tab, nPlace, indVal){libre la position nPlacepar dcalage et y place tab[indVall}

    paramtre s (D/R) tab: tableau [1, MAX] d'entiers(D) nPlace, indVal: entiers

    variables indDuMin, ind, deCt: entiers

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 81

    u

    deCt tab[indVal]{faire un trou au rang nPlace en dcalant les valeurs qui suivent d'un rang vers la droite}

    pour ind indVal nPlace + 1 pas -1 faire tab[ind] tab[ind-1] fpour

    tab[nPlace] deCt

    fin

  • 8/13/2019 coursAlgo_V6

    82/91

    Simulation du dcalage

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 82

  • 8/13/2019 coursAlgo_V6

    83/91

    Simulation du tri par insertion squentielle

  • 8/13/2019 coursAlgo_V6

    84/91

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 84

  • 8/13/2019 coursAlgo_V6

    85/91

    Simulation du tri par insertion dichotomique

  • 8/13/2019 coursAlgo_V6

    86/91

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 86

    Complexit des tris lmentaires

  • 8/13/2019 coursAlgo_V6

    87/91

    Cot du tri par slection- on fait (n-l) + (n-2) + ... + 1 tests de comparaison, soit en tout:

    n(n-l)/2 comparaisons- on peut tre amen faire n-1 changes

    => algorithme en O(n2)

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 87

    Cot du tri par insertion:- en moyenne n2/4 comparaisons

    - n2/8 changes deux fois plus dans le pire des cas

    => ici encore algorithme en O(n2)

    Tris indirects

  • 8/13/2019 coursAlgo_V6

    88/91

    Problme : tri sur diffrents critres

    On veut mmoriser les rsultats des tris par

    nom, par taille, par date

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 88

    Rep[1] Rep[2] Rep[3]

    nom toto.C toto.o toto

    taille 20 457 3 456 5 248

    date 12.04.01 13.04.01 15.04.1

    Solution : utilisation

    d t bl di di

  • 8/13/2019 coursAlgo_V6

    89/91

    de tableaux dindices

    On utilise trois tableaux diffrents quicontiennent non les agrgats, mais lesindicesdes a r ats dans le tableau

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 89

    3 1 2triNom

    triTaille

    triDate

    2 3 1

    1 2 3

    T i i di t ( it )

  • 8/13/2019 coursAlgo_V6

    90/91

    Tris indirects (suite)

    Dans lalgorithme de tri, la comparaison dedeux agrgats se fait relativement uncritre nom taille date :

    2003-2004 Algorithmique 6 : Recherche, complexit, tris 90

    prcde(i, j, Critre, tab)fonction qui retourne vraisi le fichier tab[i]prcde le fichier tab[j]relativement au

    critre Critre

  • 8/13/2019 coursAlgo_V6

    91/91