Algorithmique et structures de donnes en C - PowerPoint PPT Presentation

1 / 33
About This Presentation
Title:

Algorithmique et structures de donnes en C

Description:

Algorithmique et structures de donnes en C – PowerPoint PPT presentation

Number of Views:559
Avg rating:3.0/5.0
Slides: 34
Provided by: deloz
Category:

less

Transcript and Presenter's Notes

Title: Algorithmique et structures de donnes en C


1
Algorithmique et structures de données en C
Cours 11
Méthodes de tris (2) tris fusion, tris par tas
É. Delozanne, L2-S4-prog4, Paris
5 Elisabeth.Delozanne_at_math-info.univ-paris5.fr htt
p//www.math-info.univ-paris5.fr/delozanne/
2
Cours n 10-11 Méthodes de tris
  • 1- Introduction
  • spécification, clés structurées,
  • organisation de la mémoire, critères d'efficacité
  • 2- Tris simples
  • par sélection,
  • par insertion ,
  • tri shell
  • 3- Tri rapide (quick-sort)
  • 4- Tri fusion
  • 5- Tri par tas
  • 6- Conclusion

3
Complexité
Durées d'exécution en fonction du nombre n
d'objets traités, (à 106 opérations par seconde)
4
Tri fusion (mergesort)
  • algorithme diviser pour résoudre
  • principe
  • On trie 2 sous-ensembles on les combine pour
    obtenir le tableau trié
  • Fondement
  • Algorithme de fusion ou interclassement de listes
    triées
  • tri-fusion
  • Itératif
  • Récursif

5
Exemple
6
Fusion de deux listes
  • Deux versions
  • Complexe fusion sur place (Cf. Horowitz)
  • Algorithme en o(1) pour loccupation de la
    mémoire
  • Simple utilise un deuxième tableau (fusion à
    côté)
  • Algorithme en o(n) pour loccupation de la
    mémoire
  • Interclassement
  • On part de deux listes triées l1 et l2 que lon
    parcourt
  • On construit une liste triée en interclassant à
    chaque fois le plus petit élément courant de l1
    et l2

7
Algorithme de fusion (à côté)
  • Données
  • t le tableau à trier entre i et n
  • l1 la liste des éléments de T entre i et m
  • l2 la liste des éléments de T entre m et n
  • Résultat
  • f tableau résultat de la fusion
  • Utilitaires
  • i indice pour parcourir l1, j pour l2, k pour f
  • 1) Tant que l1 ou l2 nest pas épuisée
  • Si l1i lt l2j
  • alors ranger l1i dans fk, i, k
  • sinon ranger l2j dans fk, j, k
  • 2) Recopier dans f ce qui reste dans la liste non
    épuisée

8
Principe Tri fusion itératif
  • On considère le tableau à trier
  • L 1 comme n listes de longueur L 1 que lon
    fusionne 2 à 2
  • L 2 de listes de longueur 2 que lon fusionne
    2 à 2
  • L 4 de listes de longueur 4 que lon
    fusionne 2 à 2
  • Etc. L 2k
  • jusquà L n obtenir la liste triée
  • Exemple
  • http//interstices.info/display.jsp?idc_6973qsc
    id3Djalios_5001

9
Une étape du tri fusion itératif
  • Données
  • Un tableau t de n1 éléments, la longueur l des
    sous-listes triées
  • Résultat
  • Un tableau f la fusion des listes adjacentes de
    longueur l
  • Utilitaires
  • i indice pour passer dune paire à la suivante
  • j indice arrêt sur la dernière paire fusionnée
  • i 0 j 0
  • Tant que i l 1 lt n (il reste au moins 2
    sous listes à fusionner)
  • j i 2 l 1 (si possible 2
    sous-listes de longueur l)
  • Si j gt n alors j n (sinon la
    2ième est plus courte)
  • Fusion(t, f, i, i l 1, j)
    (fusionner les 2 sous-listes)
  • i i 2 l (passer à la suite)

10
Tri fusion itératif
  • Données
  • Un tableau t de n éléments
  • Résultat
  • Le même mais trié
  • Utilitaire
  • Un tableau f
  • Un entier l (longueur des sous-listes triées)
  • l 1
  • Tant que llt n
  • ÉtapeFusion (t, f, n, l)
  • Copie de f dans t
  • l 2l

11
Tri fusion récursif
  • Données
  • t le tableau à trier entre deb et fin
  • Résultat
  • f tableau résultat de la fusion
  • Utilitaire
  • m un indice
  • Arrêt de la récursion deb fin (tableau à 1
    élément)
  • Si deb lt fin alors
  • Considérer m le milieu
  • Trifusion sur la première moitié de t
  • Trifusion sur la deuxième moitié de t
  • Fusion de ces deux listes
  • Recopie de f dans t depuis deb jusquà fin

12
Exemple
13
Avantages et inconvénients
  • avantages du tri fusion
  • complexité en moyenne et dans le pire des cas en
    o(n log n)
  • efficace sur les listes chaînées
  • le plus efficace pour les tris externes
  • inconvénients du tri fusion
  • tri à côté utilise une place mémoire en o (n)
  • tri sur place cas particulier/complexe

14
Tri par tas (heapsort)
  • ce qui est inefficace dans les tris simples par
    sélection c'est que l'on refait plusieurs fois
    les mêmes comparaisons
  • idée de mémoriser les comparaisons dans une
    structure de données appelée tas (arbre parfait
    partiellement ordonné)
  • complexité
  • en moyenne et dans le pire des cas en o(n log n)
    pour le nombre de comparaisons et d'échanges
  • tri sur place pas de mémoire
  • en moyenne cet algorithme est deux fois plus lent
    que le tri rapide et aussi plus lent que le tri
    fusion
  • utilisé pour gérer des files de priorités

15
Tas (heap)
  • Un tas est un arbre binaire
  • Étiqueté et partiellement ordonné
  • Les étiquettes sont ordonnées
  • Létiquette dun nud est supérieure ou égale aux
    étiquettes des tous ses fils
  • Parfait
  • Tous les niveaux sont entièrement remplis sauf
    éventuellement le dernier et, dans ce cas, les
    feuilles du dernier niveau sont regroupées le
    plus à gauche possible
  • Propriété
  • La racine dun tas est lélément maximum
  • Un tas est appelé un maximier
  • Un tas se représente de façon compact par un
    tableau
  • Un nud est en Ti, son fils gauche est en
    T2i et son fils droit en T2i 1

16
Un tas
17
Principe du tri par tas
18
Principe du tri par tas (suite)
  • Tri par sélection
  • On commence par placer lélément le plus grand à
    sa place définitive au fond du tableau
  • Puis on recommence sur le tableau restant qui est
    un tas
  • Et ainsi de suite
  • Tri sur place
  • Le tableau à trier est dabord réorganisé en tas
  • Puis le fond du tableau stocke les éléments les
    plus grands
  • Deux Étapes
  • Construire le tas
  • Retirer la racine et la mettre dans le tableau
    trié et réorganiser le tas
  • Et ce jusquà arbre vide

19
Réorganiser le tas (1ère idée)
  • Mauvaise idée ce nest pas un tas !

20
Réorganiser le tas Bonne idée
  • Mettre à la racine la clé la plus à droite du
    sous-arbre gauche (arbre parfait)
  • Si besoin faire  descendre  la racine en
    permutant avec son premier fils qui la dépasse
    jusquà rétablir lordre

21
Construire le tas
  • Comme dans le tri fusion on part des tas
    préexistant (dabord les feuilles)
  • Et on construit ensuite larbre dont la racine
    est le père de ces feuilles etc
  • Principe
  • On part du tableau à trier que lon considére
    comme un arbre parfait (mais pas partiellement
    ordonné)
  • On lordonne en faisant  descendre  les pères
    qui sont plus petits que leur fils
  • Parcours du tableau du milieu jusquau début
  • (i.e. en partant à droite sur lavant dernier
    niveau)
  • Si le nud courant est plus petit que son fils on
    les permute

22
Exemple construction du tas
  • Construire les arbres parfaits représentés

23
Tri par tas
  • 1) Construire le tas
  • 2) trier le tableau
  • Parcourir le tableau de 1 à n-1
  • Commencer par permuter lélément en pos 1 (la
    racine du tas) avec le dernier élément le plus
    grand élément est alors bien placé
  • Réorganiser le tas en faisant descendre lélément
    en positon 1 si besoin
  • Et recommencer
  • Au début de létape i
  • De 1 à n-i-1 le tableau est un tas
  • De i-1 à n le tableau est trié
  • A) permuter T1 et Tn-i 1
  • B) faire descendre la nouvelle racine

24
Avantage et inconvénients du tri par tas
  • --- Lent en pratique (construction du tas)
  • Économe en mémoire et progressif
  • Efficacité théorique en o(n log n) aussi bien
    en moyennes que dans le pire des cas
  • Efficace sur un nombre très grand de données
  • Les tas sont utilisés pour réaliser des files
    de priorités

25
Exemple trier le tas
26
Tri par tas programmation
  • Fonction descendre
  • Fonction organiserTas
  • Fonction TriParTas

27
Tri en C
  • Dans la bibliothèque standard vous les avez
    tous
  • include ltstdlib.hgt
  • int mergesort(void base, size_t nmemb, size_t
    size, int (compar)(const void , const void ))
  • int heapsort(void base, size_t nmemb, size_t
    size, int (compar)(const void , const void ))
  • Conseil Si vous avez besoin d'un tri efficace
  • ne vous cassez pas la tête à en inventer un, ni
    même pour en coder un
  • cassez vous la tête pour en trouver dans une
    bibliothèque, un qui vous convienne (Cf. critères
    de choix)
  • Ne faites pas partie des padepamophobes
  • (ceux qui ont la phobie des programmes PAs
    DEVeloppé PArMoi )
  • Problème Comment choisir ?

28
Conclusion sur les tris
  • on démontre que la complexité optimale en nombre
    de comparaisons aussi bien qu'en nombre
    d'échanges d'un algorithme de tri par
    comparaison d'une clé est o(n log n) (en
    moyenne et au pire )
  • pas de tri miracle dépend du nombre de données,
    de leur structure (coût relatif des transferts et
    des comparaisons)
  • dépend aussi de la qualité de la programmation
    (éviter les tests de dépassement d'indice en
    plaçant des sentinelles)

29
Complexité théorique (transferts, comparaisons)
30
Complexité expérimentales
  • comparaisons expérimentales
  • pour n lt 100 tri simple
  • tri sélection meilleur si gros éléments
    (moins de transferts)
  •  tri insertion meilleur listes presque triées
  • le tri rapide (optimisé) toujours plus rapide que
    le tri par tas (même si la liste est triée) sauf
    si le nombre déléments est très grand
  • le tri fusion moins efficace en moyenne mais
  • moins risqué dans le pire des cas que le tri
    rapide
  • prend de la place mémoire

31
Conclusion sur les tris autres critères
  • stabilité conservation de l'ordre d'origine
    des éléments qui ont des clés égales
  • non stables tris rapide, par tas et par
    sélection, shell
  • stables les autres
  • progressivité à l'étape k les k premiers
    éléments sont triés
  • les tris par sélection sont progressifs
    sélection, bulles, tas
  • Tris progressifs permettent de faire des
    traitement en parallèle

32
Tris et visualisations
  • En français
  • http//interstices.info/display.jsp?idc_6973qsc
    id3Djalios_5001
  • http//brassens.upmf-grenoble.fr/IMSS/limass/algop
    rog/Tris
  • En anglais
  • http//www.cs.brockport.edu/cs/java/apps/sorters/r
    ace_sorters/sortchoiceinp.html
  • http//www.cs.ubc.ca/spider/harrison/Java/sorting-
    demo.html
  • http//www.cs.rit.edu/atk/Java/Sorting/sorting.ht
    ml

33
Auto-évaluation
  • Quels sont les principaux algorithmes de tri ?
  • Quels sont les principes qui permettent décrire
    chacun des algorithmes ?
  • Quels sont les critères principaux pour analyser
    la complexité théorique dun tri ? Pour choisir
    un tri ?
Write a Comment
User Comments (0)
About PowerShow.com