1 / 48

Tas ou file de priorité ( Heap / priority queue)

Tas ou file de priorité ( Heap / priority queue). David Rivreau http://ima.uco.fr. Référence. Les supports de cette partie sont très largement tirés de :. Objects , abstraction, data structures and design using Java, Koffman & Wolfgang. Objectif.

bandele
Download Presentation

Tas ou file de priorité ( Heap / priority queue)

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tas ou file de priorité(Heap / priority queue) David Rivreau http://ima.uco.fr

  2. Référence Les supports de cette partie sont très largement tirés de : Objects, abstraction, data structures and design using Java, Koffman & Wolfgang

  3. Objectif On veut mettre en place une structure de données ordonnée qui permet : • d’accéder efficacement au minimum • de supprimer efficacement le minimum • d’ajouter efficacement des données Ce type de structure de données est fréquemment utilisée en optimisation quand on souhaite accéder efficacement au minimum d’un ensemble (par exemple pour l’algorithme de Dijkstra)

  4. Idées Liste chaînée • Accès/suppression du minimum : O(n) • Insertion O(1) Tableau trié • Accès au minimum : O(1) • Suppression du minimum/insertion : O(n) Arbre binaire de recherche auto-équilibré • Accès/suppression minimum/insertion : O(log n)

  5. Structure de données tas La structure de données tas permet : • L’accès au minimum en O(1) • La suppression du minimum et l’insertion en O(log n) Par rapport à un arbre binaire de recherche auto-équilibré, cette structure de données est : • plus simple à implémenter (utilisation d’un tableau) • plus efficace si on se restreint aux trois opérations (accès au minimum, suppression du minimum et insertion de valeurs)

  6. Structure de données tas (suite) Un tas est un arbre binaire • complet à gauche* • tel que la valeur à la racine soit le plus petit élément de l’arbre • tel que chaque sous-arbre non vide soit un tas * Tous les niveaux sauf le dernier sont remplis, les éléments du dernier niveau sont calés à gauche

  7. Insertion dans un tas Algorithme d’insertion • Insérer l’élément à la prochaine position en bas du tas • Tant que le nouvel élément n’est pas à la racine et est plus petit que son père • Faire remonter l’élément dans le tas en le permutant avec son père 6 18 29 20 39 66 28 37 26 76 32 74 89

  8. Insertion dans un tas (suite) Algorithme d’insertion • Insérer l’élément à la prochaine position en bas du tas • Tant que le nouvel élément n’est pas à la racine et est plus petit que son père • Faire remonter l’élément dans le tas en le permutant avec son père 6 18 29 20 39 66 28 8 37 26  On ajoute 8 en bas du tas 76 32 74 89

  9. Insertion dans un tas (suite) Algorithme d’insertion • Insérer l’élément à la prochaine position en bas du tas • Tant que le nouvel élément n’est pas à la racine et est plus petit que son père • Faire remonter l’élément dans le tas en le permutant avec son père 6 18 29 20 39 8 28 66  8 remonte car plus petit que 66 37 26 76 32 74 89

  10. Insertion dans un tas (suite) Algorithme d’insertion • Insérer l’élément à la prochaine position en bas du tas • Tant que le nouvel élément n’est pas à la racine et est plus petit que son père • Faire remonter l’élément dans le tas en le permutant avec son père 6 18 8 20 39 29 28  8 remonte car plus petit que 29 66 37 26 76 32 74 89

  11. Insertion dans un tas (suite) Algorithme d’insertion • Insérer l’élément à la prochaine position en bas du tas • Tant que le nouvel élément n’est pas à la racine et est plus petit que son père • Faire remonter l’élément dans le tas en le permutant avec son père 6 18 8 20 39 29 28  8 est en position définitive 66 37 26 76 32 74 89

  12. Suppression dans un tas Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 6 18 8 20 39 29 28 66 37 26 76 32 74 89

  13. Suppression dans un tas (suite) Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 6 18 8  Minimum du tas 20 39 29 28 66 37 26  x 76 32 74 89

  14. Suppression dans un tas (suite) Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 66  x 20 39 29 28 18 8 37 26 76 32 74 89

  15. Suppression dans un tas (suite) Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 8 20 39 29 28 18 66  x 37 26 76 32 74 89

  16. Suppression dans un tas (suite) Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 8 20 39 66 28 18 29  x 37 26 76 32 74 89

  17. Suppression dans un tas (suite) Algorithme de suppression du minimum • Soit x l’élément en bas du tas. Replacer x à la place de la racine • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit de ses fils 8 20 39 66 28 18 29 37 26 76 32 74 89

  18. Implémentation d’un tas Le fait que le tas soit une arbre binaire complet à gauche permet de l’implémenter efficacement en utilisant un simple tableau plutôt qu’une structure de données à liens explicites Nous coderons le tas à l’aide : • d’un tableau table supposé suffisamment grand pour stocker toutes les valeurs • d‘un entier size précisant le nombre d’éléments

  19. Implémentation d’un tas (suite) 8 29 29 18 18 39 66 66 20 20 28 28 39 37 37 26 26 76 76 32 32 74 74 89 89 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 size = 13

  20. Implémentation d’un tas (suite) Pour un nœud en position p,Position filsdroit : 2p+ 1 Position fils gauche : 2p + 2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Père Filsdroit Filsgauc. 74 89

  21. Implémentation d’un tas (suite) Pour un nœud en position p,Position filsdroit : 2p+ 1 Position fils gauche : 2p + 2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Filsdroit Filsgauc. Père 74 89

  22. Implémentation d’un tas (suite) Pour un nœud en position p,Position filsdroit : 2p+ 1 Position fils gauche : 2p + 2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Filsdroit Filsgauc. Père 74 89

  23. Implémentation d’un tas (suite) Pour un nœud en position p,Position filsdroit : 2p+ 1 Position fils gauche : 2p + 2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Filsdroit Filsgauc. Père 74 89

  24. Implémentation d’un tas (suite) Pour un nœud en position p,Position filsdroit : 2p+ 1 Position fils gauche : 2p + 2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Filsdroit Filsgauc. Père 74 89

  25. Implémentation d’un tas (suite) Un nœud en position c, retrouve son père en position (c-1) /2 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 20 32 66 28 37 26 76 74 89 table = 8 18 29 39 37 26 76 32 Père Fils 74 89

  26. Implémentation de l’insertion On suppose qu’ilreste de la place dans la table 8 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 8 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 13 74 89

  27. Implémentation de l’insertion (suite) • Pour insérer une nouvelle valeur : • On augmente le nombre d’éléments size • On met le nouvel élément en bas du tas • On fait remonter le nouvel élément à sa position finale 8 18 29 9 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 8 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Fils 74 89

  28. Implémentation de l’insertion (suite) Le père du nouveau fils est en position (fils-1)/2 8 18 29 9 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 8 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Père Fils 74 89

  29. Implémentation de l’insertion (suite) • Tant que l’élément n’est pas à la racine et est plus petit que le père • Faire remonter l’élément dans le tas en le permutant avec son père 8 18 29 9 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 8 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Père Fils 74 89

  30. Implémentation de l’insertion (suite) • Tant que l’élément n’est pas à la racine et est plus petit que le père • Faire remonter l’élément dans le tas en le permutant avec son père 8 18 29 66 20 39 9 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 29 20 28 39 9 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Père Fils 74 89

  31. Implémentation de l’insertion (suite) • Tant que l’élément n’est pas à la racine et est plus petit que le père • Faire remonter l’élément dans le tas en le permutant avec son père 8 18 29 66 20 39 9 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 29 20 28 39 9 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Père Fils 74 89

  32. Implémentation de l’insertion (suite) • Tant que l’élément n’est pas à la racine et est plus petit que le père • Faire remonter l’élément dans le tas en le permutant avec son père 8 18 9 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 14 Père Fils 74 89

  33. Implémentation de l’insertion (suite) • Tant que l’élément n’est pas à la racine et est plus petit que le père • Faire remonter l’élément dans le tas en le permutant avec son père 8 18 9 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 Père Fils 74 89

  34. Implémentation de l’insertion (suite)  Position finale 8 18 9 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 14 74 89

  35. Implémentation de la suppression • Pour supprimer le minimum : • On diminue le nombred’éléments size • On met le dernier élément du tas en haut • On fait redescendre cet élément à sa position finale  Minimum 8 18 9 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 8 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 14 74 89

  36. Implémentation de la suppression • Pour supprimer le minimum : • On diminue le nombred’éléments size • On met le dernier élément du tas en haut • On fait redescendre cet élément à sa position finale 66 18 9 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 13 74 89

  37. Implémentation de la suppression (suite) • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit fils 66 18 9 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 66 18 9 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 13 Père Filsdroit Filsgauc. 74 89

  38. Implémentation de la suppression (suite) • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit fils 9 18 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 18 66 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 13 Père 74 89

  39. Implémentation de la suppression (suite) • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit fils 9 18 66 20 39 29 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 18 66 20 28 39 29 37 26 76 32 74 89 table = 37 26 76 32 size = 13 Père Filsdroit Filsgauc. 74 89

  40. Implémentation de la suppression (suite) • Tant que x a des fils et est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit fils 9 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 13 Père 74 89

  41. Implémentation de la suppression (suite) • Tant que x a des filset est plus grand que l’un de ses fils • Faire descendre x en le permutant avec le plus petit fils 9 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 13 Père 74 89

  42. Implémentation de la suppression (suite) 9  Position finale 18 29 20 39 66 28 0 1 2 3 4 5 6 7 8 9 10 11 12 13 9 18 29 20 28 39 66 37 26 76 32 74 89 table = 37 26 76 32 size = 13 74 89

  43. Complexité des opérations L’insertiondécrit au maximum un chemindepuisunefeuillevers la racine La suppression effectue au maximum un chemin de la racine à unefeuille • Cesopérationsdemandent au maximum hétapes, oùhest la hauteur de l’arbre • Le plus grand arbre de hauteur h a au plus 2h-1 nœuds • Le plus petit arbrecomplet de hauteur h a au minimum 2(h-1)nœuds L’insertion et la suppression sont en O(log2n)

  44. Application : tas d’entier Implémentez une classe HeapIntqui modèlise un tas d’entier Champs : Constructeur :

  45. Application : tas d’entier (suite) Méthodes privées :

  46. Application : tas d’entier (suite) Méthodes publiques :

  47. Application : tas d’entier (suite) Méthodespubliques :

  48. Application : tas d’entier (fin) À implémenter et tester !

More Related