Algorithmes recursifs
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

ALGORITHMES RECURSIFS PowerPoint PPT Presentation


  • 79 Views
  • Uploaded on
  • Presentation posted in: General

ALGORITHMES RECURSIFS. Méthodes de recherches et de tris récursives . 1. Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris. Recherches et tris récursifs. Certains traitements récursifs s'appliquent particulièrement bien à la problématique des recherches et des tris.

Download Presentation

ALGORITHMES RECURSIFS

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Algorithmes recursifs

ALGORITHMES RECURSIFS

Méthodes de recherches et de tris récursives

1

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherches et tris r cursifs

Recherches et tris récursifs

  • Certains traitements récursifs s'appliquent particulièrement bien à la problématique des recherches et des tris.

  • Pour appliquer la récursivité il faut que le problème à résoudre puisse être décomposé en sous-problème de même nature. L'arrêt de l'appel récursif se fait à la résolution du problème élémentaire

  • Il faut donc une modélisation du problème de la recherche ou du tri qui soit récursive.

2

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherches et tris r cursifs1

Recherches et tris récursifs

Recherche dichotomique :

La recherche dans un tableau de taille N conduit à découper le problème en deux sous problèmes de même nature et à rechercher dans un sous tableau de taille N/2.

Tri quicksort :

Trier une collection d'objets conduit à :

(pré-traitement) identifier un pivot, répartir la collection en deux sous-collections les plus petits et les plus grands.

(appel récursif) relancer le tri sur les 2 sous-collections.

(post-traitement) Le résultat sera la concaténation des deux sous-collections revenues triées.

3

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique

Recherche dichotomique

Attention uniquement si la collection d’objet est déjà triée.

A chaque étape :

  • Tester si le tableau est vide (en ce cas arrêt des appels récursifs avec échec)

  • Calculer l'indice moyen (indice max + indice min)/2

  • Comparer la valeur présente à l’indice moyen avec l’objet recherché,

    • si l'objet recherché est à l'indice moyen (arrêt succès)

    • si l’objet est supérieur ou égal à la valeur t[moyen] relancer la recherche avec le tableau supérieur,

    • sinon relancer la recherche avec le tableau inférieur.

4

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique principe

Recherche dichotomique - principe

objet = 11 : objet<t[moy]

moy = (max + min) / 2

min

max

max  moy

min

5

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique tests d arr t

Recherche dichotomique – tests d'arrêt

intRDRec(intmin, int max, int objet, int t[])

{

intmilieu ;

if (min >= max)return -1;

milieu = (max+min)/2;

if(t[milieu] == objet) return milieu;

. . .

}

Tests d'arrêt

6

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique appel r cursif sur un sous probl me

Recherche dichotomique – appel récursif sur un sous problème

intRDRec(intmin, int max, int objet, int t[])

{

intmilieu ;

if (min >= max) return -1;

milieu = (max+min)/2;

if (t[milieu] == objet) return milieu;

if (objet < t[milieu])

return RDRec(min, milieu -1, objet, t);

if (objet > t[milieu])

return RDRec(milieu +1, max, objet, t);

return –1;

}

Rappel récursif sur un sous-problème

7

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique arr ts et appels r cursif

Recherche dichotomique – arrêts et appels récursif

intRDRec(intmin, int max, int objet, int t[])

{

intmilieu ;

if (min >= max)return -1;

milieu = (max+min)/2;

if (t[milieu] == objet) return milieu;

if (objet < t[milieu])

return RDRec(min, milieu -1, objet, t);

if (objet > t[milieu])

return RDRec(milieu +1, max, objet, t);

return –1;

}

Rappel récursif sur un sous-problème

Tests d'arrêt

8

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Recherche dichotomique code

Recherche dichotomique – code

intRDRec(intmin, int max, int objet, int t[])

{

intmilieu ;

if (min >= max) return -1;

milieu = (max+min)/2;

if (t[milieu] == objet) return milieu;

if (objet < t[milieu])

return RDRec(min, milieu -1, objet, t);

if (objet > t[milieu])

return RDRec(milieu +1, max, objet, t);

return –1;

}

9

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort principe

Tri quicksort - principe

  • A l’étape courante soit :

  • L : liste vide – elle est retournée (triée par définition)

  • L : non vide – choix d'un pivot P dans la liste (premier élément)

  • Découpage de L en deux sous listes :

    • Li: liste des éléments inférieurs au pivot,

    • Ls: liste des éléments supérieurs au pivot.

  • Tri récursif rappelé sur Li et Lson obtient :Li-triée et Ls-triée

  • Liste résultat à l’étape courante :

  • concaténation de Li-triéeet Ls-triéeavec la valeur du pivot P entre.

  • Retour à la fonction appelante de L-triée

10

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort exemple d appel

Tri quicksort – exemple d'appel

5 7 3 4 1 2 9

Pré traitement

3 4 1 2

7 9

1 2

4

9

2

Post traitement

2

4

1 2

9

1 2 3 4

7 9

1 2 3 4 5 7 9

11

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort d finition de la liste

Tri quicksort : définition de la liste

Structure dumaillon de la liste :

typedefstructmaillon

{

char info[NMAX] ;

structmaillon* suiv;

} MAIL ;

  • intQScmp(MAIL * A, MAIL * B) retourne 0, 1 ou -1

  • suivant si le champ info du maillon A est égal, supérieur ou inférieur au champ info du maillon B

12

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort fonctions utilis es

Tri quicksort : fonctions utilisées

MAIL* tete(MAIL* L) retourne la tête d’une liste L, c'est à dire le premier élément de la liste.

MAIL* reste(MAIL* L) retourne le reste d'une liste L, c'est à dire le pointeur vers le deuxième élément de la liste.

MAIL* ajouter-tete(MAIL* P, MAIL* L) retourne une liste dont la tête est P et le reste L (ajout en tête).

MAIL* concatener(MAIL* D, MAIL* F) retourne la liste constituée par tous les éléments de la liste D suivis de tous les éléments de la liste F.

13

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort test d arr t

Tri quicksort – test d'arrêt

Test d'arrêt

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu;

if (L == NULL) return NULL;

. . .

}

14

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort pr traitement

Tri quicksort – pré traitement

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu ;

if (L == NULL) return NULL;

P = tete(L);

for(R= reste(L) ; R!= NULL ; R= reste(R))

{ T= tete(R);

if (QScmp(P,T) < 0) Ls= ajtete(Ls, T);

else Li= ajtete(Li, T);

}

. . .

}

pré-traitement

15

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort appel r cursif

Tri quicksort – appel récursif

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu;

if (L == NULL) return NULL;

P = tete(L);

for(R= reste(L) ; R!= NULL ; R= reste(R))

{ T= tete(R);

if (QScmp(P,T) < 0) Ls= ajtete(Ls, T);

else Li= ajtete(Li, T);

}

Li = QS(Li); Ls = QS(Ls);

Res = ajtete(P, Ls);

Res = concatener(Li, Res);

return Res ;

}

Rappel récursif

16

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort post traitement

Tri quicksort – post traitement

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu;

if (L == NULL) return NULL;

P = tete(L);

for(R= reste(L) ; R!= NULL ; R= reste(R))

{ T= tete(R);

if (QScmp(P,T) < 0) Ls= ajtete(Ls, T);

else Li= ajtete(Li, T);

}

Li = QS(Li); Ls = QS(Ls);

Res = ajtete(P, Ls);

Res = concatener(Li, Res);

return Res ;

}

post-traitement

17

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort anatomie

Tri quicksort - anatomie

Test d'arrêt

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu ;

if (L == NULL) return NULL;

P = tete(L);

for(R= reste(L) ; R!= NULL ; R= reste(R))

{ T= tete(R);

if (QScmp(P,T) < 0) Ls= ajtete(Ls, T);

else Li= ajtete(Li, T);

}

Li = QS(Li); Ls = QS(Ls);

Res = ajtete(P, Ls);

Res = concatener(Li, Res);

return Res ;

}

Rappel récursif

pré-traitement

post-traitement

18

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


Tri quicksort code

Tri quicksort - code

MAIL * QS(MAIL* L)

{ MAIL *P, *R, *T, *Li=NULL, *Ls=NULL,*Resu;

if (L == NULL) return NULL;

P = tete(L);

for(R= reste(L) ; R!= NULL ; R= reste(R))

{ T= tete(R);

if (QScmp(P,T) < 0) Ls= ajtete(Ls, T);

else Li= ajtete(Li, T);

}

Li = QS(Li); Ls = QS(Ls);

Res = ajtete(P, Ls);

Res = concatener(Li, Res);

return Res ;

}

19

Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris


  • Login