algo volume 6

91
2003-2004 Algorithmique 6 : Recherche, complex ité, tris Algorithmique : Volume 6 • Recherche Adressage dispersé • Tris • Complexité Cécile Balkanski, Nelly Bensimon, Gérard Ligozat iUT ORSAY Université Paris XI I.U.T. d'Orsay Département Informatique Année scolaire 2003-2004

Upload: madina-oo

Post on 08-Sep-2015

233 views

Category:

Documents


1 download

DESCRIPTION

algorithme exercice volume 6 IUT D'ORSAY

TRANSCRIPT

  • Algorithmique : Volume 6

    Recherche

    Adressage dispers

    Tris

    Complexit

    Ccile Balkanski, Nelly Bensimon, Grard Ligozat

    Universit Paris XI
    I.U.T. d'Orsay
    Dpartement Informatique
    Anne scolaire 2003-2004

  • Recherche

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche

    Problme gnral abstrait
    ensemble de valeurs E, lment a; estce que a E?
    rponse: boolen (x) { xE | x=a }

    plus gnralement
    existetil x vrifiant certains critres

    (x) { xE | j(x)}

    trouver tous les x satisfaisant certains critres

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


    Algorithmique 6 : Recherche, complexit, tris

  • 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)Exemples :

    tableau

    tableau tri

    201895241327283271236151719257891213151718192024273236

    Algorithmique 6 : Recherche, complexit, tris

  • 32

    18

    9

    5

    2

    24

    27

    20

    36

    19

    13

    8

    12

    15

    17

    7

    arbre binaire de recherche

    Algorithmique 6 : Recherche, complexit, tris

  • Tri de donnes complexes

    Exemple de donne complexe:

    type Etudiant = agrgat

    nom: chane

    ge: entier

    classement: entier

    photo: fichier_GIF

    fin

    on peut trier par nom (ordre alphabtique), par ge, par classement pas par photo cls, cls primaires exaequo, mme ge

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche et type de donnes

    On utilise divers types de donnes sur lesquelles on fait des oprations de base: ajout suppression mise jour consultationChaque structure a des avantages et des inconvnients : tableau, tableau tri, arbre binaire, liste chane, etc.

    Algorithmique 6 : Recherche, complexit, tris

  • 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: entier

    variables trouv: boolen i: entier

    dbut trouv faux

    i 0

    tant que non trouv ET i < nbr faire

    i i+ 1

    trouv (tab[i] = val)

    ftq

    retourne (trouv)

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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

    variablestrouv: boolen i: entier

    dbut

    trouv faux

    i 0

    tant que non trouv ET i < nbr faire

    i i+1

    trouv (tab[i] = val)

    ftq

    si trouv alors retourne (i) sinon retourne (1) fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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: entier

    variables id, ir: entiers

    dbut ir 0

    pour id l nbre_d faire

    si (tab_d[id] val)

    alors irir+ 1

    tab_r[ir] tab_d[id]

    fsi

    fpour

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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 : entiers

    dbut

    imin tab[l]

    pour id 2 nbre faire

    si (tab[i] < min)

    alors min tab[i]

    fsi

    fpour

    retourne (tab[min])

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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: entier

    variables i, imin, min: entiers

    dbut

    min tab[1]

    imin 1

    pour id 2 nbre faire

    si (tab[i] min)

    alors min tab[i]

    imin i

    fsi

    fpour

    retourne (imin)

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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

    variablestrouv, dpass : boolens ; i : entier

    dbut

    trouv faux; dpass faux; i 0

    tant que non (trouv OU dpass) ET i < nbr faire

    i i+ 1

    trouv (tab[i] = val)

    dpass (tab[i] > val)

    ftq

    si trouv alors retourne (i) sinon retourne(1)

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche dichotomique

    Rappel: les valeurs doivent tre tries !

    Principe:

    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, il suffit de chercher droite

    257891213151718192024273236

    Algorithmique 6 : Recherche, complexit, tris

  • 257891213151718192024273236257891213151718192024273236

    Algorithmique 6 : Recherche, complexit, tris

  • 257891213151718192024273236257891213151718192024273236

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche dichotomique

    fonction 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

    dbut

    trouv faux; id 0 ; if nbre + 1

    tant que non trouv ET (if id) > 1 faire

    im (id + if)/2

    trouv (tab[im] = val)

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

    sinon id im

    fsi

    ftq

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

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

    sinon retourne (-1)

    fsi

    fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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

    dbut

    id 0; if nbre+1

    tant que (if id) > 1 faire

    im (id + if)/2

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

    sinon id im

    fsi

    ftq

    si (id = 0) alors retourne (1)

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

    sinon retourne (-1)

    fsi

    fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 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

    dbut

    id 0 ; if nbre+ 1

    tant que (if id) > 1 faire

    im (id + if)/2

    si (tab[im] val) alors if im

    sinon id im

    fsi

    ftq

    si (if = nbre + 1) alors retourne (1)

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

    sinon retourne(1)

    fsi

    fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche dans un ABR

    fonction rech (unAbr, val) retourne(boolen)

    {renvoieVRAl si val se trouve dans l'ABR unAbr, FAUXsinon}

    paramtre s (D) unAbr: ABR

    (D) val: entier

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

    dbut

    si unAbr.Vide() alors retourner (FAUX)

    sinon si (unAbr.Info() = val)

    alors retourner(VRAI)

    sinon si (unAbr.Info() < val)

    alors retourner (Rech(unAbr.FD(), val))

    sinon retourner (Rech(unAbr.FG(), val))

    fsi

    fsi

    fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • 32

    18

    9

    5

    2

    24

    27

    20

    36

    19

    13

    8

    12

    15

    17

    7

    Simulation de recherche

    Algorithmique 6 : Recherche, complexit, tris

  • Algorithmique 6 : Recherche, complexit, tris

  • Adressage Dispers

    Algorithmique 6 : Recherche, complexit, tris

  • Adressage dispers

    Objectif: classer M lments dans un tableauPrincipe: dans un tableau de p cases, on classe l'lment x, lindice k, donn par une fonction d'adressage hclasser un lment x entier k, compris entre 1 et pFonction h: h(x)=kla valeur k ne dpend que de l'lment x ;l'lment x n'est pas plac relativement aux autres lments
  • Quelques exemples de fonctions dadressage

    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

    h2(342) = 9 h2(100 340) = 8

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

    h3(342) = h3(101010010) = 4

    x : chane de caractres

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

  • Exemple de classement par la fonction dadressage h1

    Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Ali, Jo, MichleCodes associs par h1 (nb caractres) : 4, 8, 5, 6, 3, 2, 7Constatations :la valeur k ne dpend que de l'lment x;la place de l'lment x n'est pas dtermine relativement aux autres lments classs...... la diffrence d'un tri avec relation d'ordre o la place d'un lment est dtermine par le nombre d'lments "meilleurs" selon cet ordre.JoAliMarcPauleJeanneMichleIzabelle12345678
  • Une autre fonction dadressage

    h5 associe c1ck la somme :(Somme (rang de ci dans lalphabet * i) modulo 9) +1Suite de prnoms : Marc, Izabelle, Paule, Jeanne, Jo, Michleh5 (Marc) = ((13*1+1*2+18*3+3*4) mod 9) + 1 = 81 mod 9 + 1 = 1h5 (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

    MarcPauleJoIzabelleMichleJeanne123456789
  • Recherche dun lment

    Algorithme de recherche d'un lment x dans une table construite par adressage dispers d'une suite d'lments :

    on calcule le code associ cet lment x par la fonction dadressage, soit p.

    on compare le contenu de la p-ime case de la table avec llment x : si identit, la recherche est positive, sinon elle est ngative.

  • Ajout dun lment

    Algorithme d'ajout d'un lment X dans une table construite par adressage dispers d'une suite d'lments:

    on calcule le code associ cet lment par la fonction d'adressage, soit p.

    on affecte l'lment la p-ime place dans la table, condition toutefois que cette place ne soit pas dj occupe risque de collision

  • 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] : " "

    ajout possible

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

    collision

    MarcPauleJoIzabelleMichleAliJeanne123456789
  • Mthodes de rsolution des collisions : mthodes internes

    lnternes car on opre dans le tableau alloupremire possibilit : on utilise la place libre dans le tableauAlgorithme d'ajout d'un lment entr en collision : partir du rang de la collision, rechercher la premire place libre et y placer l'lment entr en collision. arriv la dernire case du tableau, continuer la recherche la premire case du tableau. Exemples: "Lola" (avec h5 : 2) et "Isabelle" (avec h5 : 1)MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789
  • Retrait dun lment

    on calcule le code associ cet lment x par la fonction d'adressage : soit p ;

    on compare le contenu de la p-ime case de la table avec l'lment x :

    si identit, on le supprime puis on place dans cette case une marque pour indiquer que l'lment supprim a pu provoquer d'ventuelles collisions

    si non identit, on poursuit la recherche squentiellement en cas d'ventuelles collisions

    arrt si case vide ou parcours jusqu (p-1)

  • Recherche dun lment

    on calcule le code associ cet lment x par la fonction d'adressage : soit p.

    on compare le contenu de la p-ime case de la table avec l'lment x :

    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 ou parcours jusqu (p-1)

  • Exemples (avec h5 )

    retrait de Marc (code 1)

    retrait de Ali (code 8)

    recherche de Isabelle (code 1)

    MarcPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleAliJeanne123456789XPauleLolaIsabelleJoIzabelleMichleXJeanne123456789
  • Rsolution interne des collisions (suite)

    Deuxime solution: on partitionne le tableau en deux:une zone d'adressage primaireune zone de dbordementAlgorithme 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
  • Exemple

    Ajout de Lola (code associ par h5 : 2) puis de Isabelle (code associ par h5 : 1)

    Zone de

    dbordement

    ( la suite

    du tableau)

    MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415
  • Recherche

    on calcule le code associ cet lment x par la fonction d'adressage, soit p

    on compare le contenu de la p-ime case de la table avec l'lment x : si identit, la recherche est positive, sinon on mne une recherche squentielle dans la zone de dbordement du tableau

  • et retrait

    on calcule le code associ cet lment x par la fonction d'adressage, soit p

    on compare le contenu de la p-ime case de la table avec l'lment x :

    si identit, on le supprime puis on place dans cette case 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

  • Exemples

    Recherche de Ali (h5 : 8), puis Lola (h5 : 2)

    Retrait de Marc (h5 : 1)

    Recherche Isabelle (h5 : 1)

    MarcPauleJoIzabelleMichleAliJeanne123456789LolaIsabelle101112131415
  • Mthodes de rsolution externe des collisions

    "Externes " car on alloue des zones de stockage supplmentairesLe tableau contient, pour un code donn, deux informations :une place de rangement d'un lment (principal) ;une liste de dbordement pour les lments entrs en collision avec l'lment prcdent
  • Ajout dun lment

    Algorithme d'ajout d'un lment entr en collision :Crer la liste de dbordement associe ce code si celleci n'existe pas encore, puis ajouter cette liste le nouvel lmentExemple (avec h5): ajout de Lola (code 2)

    Lola

    MarcPauleJoIzabelleMichleAliJeanne123456789
  • Exemples (suite)

    Lola

    ajout de Isabelle (1)

    Isabelle

    ajout de Jos (1)

    Isabelle

    Jos

    Lola

    MarcPauleJoIzabelleMichleAliJeanne123456789MarcPauleJoIzabelleMichleAliJeanne123456789
  • Recherche dun lment

    on calcule le code associ cet lment x par la fonction d'adressage, soit p

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

    si identit, la recherche est positive ;

    sinon, on mne une recherche squentielle dans la liste associe

    recherche de Michle (7), puis Isabelle (1)

    Jos

    Lola

    Isabelle

    MarcPauleJoIzabelleMichleAliJeanne123456789
  • Retrait dun lment

    on calcule le code associ cet lment x par la fonction d'adressage, soit p

    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 ;

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

    retrait de Michle (7), puis Lola (2) et enfin Marc (1)

    Isabelle

    Jos

    Lola

    MarcPauleJoIzabelleMichleAliJeanne123456789
  • Algorithmes de la mthode d'adressage dispers avec rsolution externe

    type Info2 = agrgat

    principal : chane {premire chane associe un code donn}

    dbord : Liste {objet Liste dont l'information est une chane}

    fin

    fonction code (uneChane) retourne (entier)

    {retourne la valeur donne par la fonction dadressage}

    paramtre (D) uneChane : chane

  • Procdure ajout (table, laChane)

    {ajoute l'lment laChane dans une table, par adressage dispers, avec rsolution externe des collisions}

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

    (D) laChane : chane

    variablesok: boolen

    ind: entier

    dbut

    ind code(laChane)

    si table[ind].principal = " "

    alors {c'est la premire occurrence de ce code d'adressage}

    table[ind].principal laChane

    sinon {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)

    fsi

    fin

  • Fonction recherche (table, laChane) retourne (boolen)

    {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

    dbut

    ind code(laChane)

    trouv table[ind].principal = laChane

    si non trouv {recherche de laChane dans la liste de dbordement}

    alors table[ind].dbord.premier()

    tant que non trouv et

    non table[ind].dbord.horsListe() faire

    trouv (table[ind].dbord.info() = laChane)

    table[ind].dbord.suivant()

    ftq

    fsi

    retourne (trouv)

    fin

  • 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 : entier

    dbut

    ind code(laChane)

    trouv (table[ind].principal = laChane)

    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)

    fsi

    retourne (ok)

    fin

  • Procdure retraitPrincipal (table, laChane, ind)

    {retire llment laChane du champ Principal du code adresse ind; ce champ reoit la valeur de tte de la liste de dbordement si possible}

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

    (D) laChane : chane; ind : entier

    variables elt : Info2; ind : entier

    dbut

    si (table[ind].dbord.vide()) {il ny a pas eu de collision sur ce code}

    alors{ce code nadresse plus aucune chane}

    table[ind].principal " "

    sinon {on rcupre llment en tte de liste de dbordement}

    table[ind].dbord.premier() ; elt table[ind].dbord.info()

    {pour mettre sa valeur dans le champ principal}

    table[ind].principal elt

    {et puis on retire la cellule de tte de la liste de dbordement} table[ind].dbord.supprimer()

    fsi

    fin

  • 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

    dbut

    table[ind].dbord.premier()

    trouv faux

    {recherche de laChane dans la !iste de dbordement}

    tant que non trouv et non table[ind].dbord.horsListe() faire

    trouv (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

  • Complexit des algorithmes

    Algorithmique 6 : Recherche, complexit, tris

  • Complexit des algorithmes

    Complexit temporelle, complexit spatiale

    cot en temps: temps ncessaire l'excution

    cot en espace: espace mmoire ncessaire

    Pire des cas, complexit moyennela complexit dans le pire des cas n'est pas ncessairement une bonne indication du cot en pratique (exemple de la mthode du simplexe)comment estimer le cas moyen ? tude a priori, bancs d'essai et valuation a posterioritude thoriquetude pratique de l'algorithme implment, bancs d'essai

    Algorithmique 6 : Recherche, complexit, tris

  • 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 comparaisons seront ncessaires pour le constater

    Attention: si le tableau est tri, une seule peut tre suffisante !parmi les diffrents algorithmes possibles, certains sont meilleurs que d'autresla comparaison des pires des cas peut ne pas tre une bonne indication

    Algorithmique 6 : Recherche, complexit, tris

  • Complexit asymptotique

    Ncessit d'tudier la complexit pour de grosses quantits de donnesExemple : deux algorithmes pour une mme tche:A1 effectue n2 oprations de base, A2 effectue n.log2 n oprations Deux machines :M1 effectue 210 (environ mille) oprations par scondeM2 effectue 220 (environ un million d') oprations par secondeTemps de calcul (en secondes) :

    Algorithmique 6 : Recherche, complexit, tris

  • Complexit asymptotique (2)

    M1M2A1A2A1A2n = 210210101< 0,01n = 22023020. 21022020

    Algorithmique 6 : Recherche, complexit, tris

  • Rapidit de croissance compare
    de certaines fonctions usuelles

    Algorithmique 6 : Recherche, complexit, tris

  • Calcul de la complexit dun algorithme

    Calcul de la valeur d'un polynme en un point

    1. 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

    fpour

    Nombre de multiplications

    en 3 > 1+2+3+...+ (n1) = (nl)n/2

    en4 > n

    Nombre d'additions en 4 > nsoit au total: n(n + 3)/2< n2pour n > 3.

    Algorithmique 6 : Recherche, complexit, tris

  • 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

    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

    Algorithmique 6 : Recherche, complexit, tris

  • 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)

    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

    Algorithmique 6 : Recherche, complexit, tris

  • Exemples (suite)

    3n+3 = (n)

    100n+6 = (n)

    10n2+4n+2= (n2)

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

    6*2n + n2 = (1)

    > c'est la plus grande fonction g(n) qui est intressante

    Algorithmique 6 : Recherche, complexit, tris

  • Temps dexcution des algorithmes

    Temps constant (rares algorithmes, cf. adressage dispers)O(1)Temps logarithmique (exemple: recherche dichotomique)O(log2n)Temps linaire (exemple: recherche squentielle)O(n)Temps polynomial O(nk) (coteux si k dpasse 3)quadratique O(n2)cubique O(n3)Temps exponentielO(cn) ( viter en gnral)

    Algorithmique 6 : Recherche, complexit, tris

  • Comparaison des complexits d'algorithmes de la mme classe

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

    p a[0]

    pour i 1 n faire

    xpi puissance(x, i)

    p p + a[i]* xpi

    fpour

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

    Algorithmique 6 : Recherche, complexit, tris

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

    p a[0]

    xpi 1

    pour i 1 n faire

    xpi xpi * x

    p p + a[i]* xpi

    fpour

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

    Algorithmique 6 : Recherche, complexit, tris

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

    p a[n]

    pour i n - 1 0, pas 1 faire

    p p*x + a[i]

    fpour

    n multiplications, n additions algorithme en O(n)

    Complexit optimale pour cette classe d'algorithmes :

    en O(n)

    Algorithmique 6 : Recherche, complexit, tris

  • Calcul de la complexit dalgorithmes de recherche simples

    Oprations lmentaires retenues: les comparaisons

    Recherche squentielle dans un tableau non tri

    complexit au pire n comparaisonscomplexit moyennen/2 comparaisons

    algorithme en O(n)

    2. Recherche squentielle dans un tableau tri

    complexit au pire n comparalsonscomplexit moyenne n/2 comparaisons

    algorithme en O(n)

    Algorithmique 6 : Recherche, complexit, tris

  • Recherche dichotomique (dans un tableau tri 1)complexit au pire = complexit moyenne =

    nombre p d'intervalles considrs

    Exemple avec n = 8 = 23 tableau de 8 lments

    niveau 0

    niveau 1

    niveau 2

    niveau 3

    Profondeur de larbre de dcision de lordre de log2n :

    complexit algorithmique en O(log2n)

    Algorithmique 6 : Recherche, complexit, tris

  • Tris

    Algorithmique 6 : Recherche, complexit, tris

  • Tris

    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

  • Tris internes et tris externesinternes: l'ensemble des donnes peut tre trait en mmoire centrale externes: on opre sur une partie des donnes seulement Tris d'entiers: mthode des seaux

    trier: des entiers entre 1 et m

    principe:

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

    - on parcourt linairement les donnes, et on place ai

    dans la file numrote ai

    - on place les files d'attente bout bout

    Algorithmique 6 : Recherche, complexit, tris

  • Exemple m = 10, 4 7 3 2 8 1 5Rsultat: 1, 2, 3, 4, 5, Estimation du cot :

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

    - concatnation de m files en O(m) ;

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

    12345780123456789

    Algorithmique 6 : Recherche, complexit, tris

  • Cette mthode peut tre gnralise des kuplets 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:

    634 < 63472tri < triage

    64589 < 647seau < selle

    Pour des suites de kuplets dont chaque composante est un entier entre 0 et ml, on obtient un algorithme de cot O((m+n)k).

    Algorithmique 6 : Recherche, complexit, tris

  • Cas gnral:

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

    - la seule opration disponible est la comparaison de deux lments

    Exemple: tri de trois lments a, b, c

    a

  • 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!).

    En effet, un arbre de dcision doit avoir au moins autant de feuilles que de rsultats possibles, c'estdire n! feuilles au moins. Donc la hauteur de cet arbre est log(n!)

    Estimation

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

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

    Algorithmique 6 : Recherche, complexit, tris

  • Mthodes de tri lmentaires (1)
    Tri par slection

    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.

    liste trie

    liste trie

    case courante

    devrait se trouver

    dans la case courante

    reste trier

    reste trier

    Algorithmique 6 : Recherche, complexit, tris

  • 201895241327283271236151719

    Algorithmique 6 : Recherche, complexit, tris

  • Algorithme de tri par slection

    procdure 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, position: entier

    dbut

    pour position 1 nbre 1 faire

    indDuMin 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}

    fpour

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Algorithme de tri par slection (2)

    fonction slection (tab, nbre, indDbut,indFin) retourne(entier)

    {recherche l'indice de l'lment minimum de tab entre indDbut et indFin}

    paramtre s(D) tab: tableau [1, MAX1 d'entiers

    (D) nbre, indDbut, indFin : entiers

    variables indDuMin, ind: entiers

    dbut

    indDuMin indDbut

    pour ind (indDbut + 1) indFin faire

    sitab[indDuMin] > tab[ind] alors indDuMin ind

    fpour

    retourner(indDuMin)

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Mthodes de tri lmentaires (1)
    Tri par insertion

    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.

    liste trie

    liste trie

    place du nouveau

    reste trier

    nouveau

    reste

    reste

    Algorithmique 6 : Recherche, complexit, tris

  • 201895241327283271236151719

    Algorithmique 6 : Recherche, complexit, tris

  • Algorithme de tri par insertion

    procdure triInsertion (tab, nbre)

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

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

    (D) nbre: entier

    variables indVal, numPlace: entiers

    dbut

    pour indVal 2 nbre faire

    {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 numPlace par dcalage et y place tab[indVal]}

    dcalerEtPlacer(tab, numPlace, indVal)

    fsi

    fpour

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • procdure dcalerEtPlacer(tab, nPlace, indVal)

    {libre la position nPlace par 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

    dbut

    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[ind1] fpour

    tab[nPlace] deCt

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Simulation du dcalage

    Algorithmique 6 : Recherche, complexit, tris

  • Deux algorithmes pour la recherche de place

    1. Recherche squentielle dans un tableau tri

    fonction insertion (tab, nbre, indV) retourne(entier)

    {renvoie la place laquelle il faut affecter tab[indV] pour respecter l'ordre}

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

    (D) nbr, indV: entiers

    variables dpass: boolen; i, val, nbValTries: entiers

    dbut

    val tab[indV];nbValTries indV 1

    dpass faux;i 0

    tant que i < nbValTries ET non dpass faire

    ii+ 1

    dpass (tab[i] > val)

    ftq

    si dpass alors retourne (i) sinon retourne (i+l) fsi

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Simulation du tri par insertion squentielle

    Algorithmique 6 : Recherche, complexit, tris

  • 2. Recherche dichotomique

    fonction insertion (tab, nbre, indV) retourne (entier)

    {renvoie la place laquelle ilfaut affecter tab[indV] pour respecter l'ordre}

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

    (D) nbr, indV: entiers

    variables id, if, im, val: entiers

    dbut

    val tab[indV];id 0if indV + 1

    tant que if id > 1 faire

    im (id + if)/2

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

    ftq

    retourne (id + 1)

    fin

    Algorithmique 6 : Recherche, complexit, tris

  • Simulation du tri par insertion dichotomique

    Algorithmique 6 : Recherche, complexit, tris

  • Complexit des tris lmentaires

    Cot du tri par slectionon fait (nl) + (n2) + ... + 1 tests de comparaison, soit en tout: n(nl)/2 comparaisonson peut tre amen faire n-1 changes

    => algorithme en O(n2)

    Cot du tri par insertion:en moyenne n2/4 comparaisonsn2/8 changes deux fois plus dans le pire des cas

    => ici encore algorithme en O(n2)

    Algorithmique 6 : Recherche, complexit, tris

  • Tris indirects

    Problme : tri sur diffrents critresOn veut mmoriser les rsultats des tris par nom, par taille, par dateRep[1]Rep[2]Rep[3]nom toto.C toto.o tototaille 20 457 3 456 5 248date 12.04.0113.04.01 15.04.1

    Algorithmique 6 : Recherche, complexit, tris

  • Solution : utilisation
    de tableaux dindices

    On utilise trois tableaux diffrents qui contiennent non les agrgats, mais les indices des agrgats dans le tableau

    triNom

    triTaille

    triDate

    312231123

    Algorithmique 6 : Recherche, complexit, tris

  • Tris indirects (suite)

    Dans lalgorithme de tri, la comparaison de deux agrgats se fait relativement un critre (nom, taille, date) :

    prcde(i, j, Critre, tab)

    fonction qui retourne vrai si le fichier tab[i] prcde le fichier tab[j] relativement au critre Critre

    Algorithmique 6 : Recherche, complexit, tris

  • Fin du volume 6

    Algorithmique 6 : Recherche, complexit, tris

    iUT

    ORSAY