Files de priorité (Priority Queue)

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Cours n° 7 Standard Template Library II.
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
Les Algorithmes de tri.
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
INTRODUCTION.
UML (Unified Modeling Langage)
Rational Unified Process (RUP)
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Cours 8 Arbres équilibrés
Structures collectives en Java
Structures de données linéaires
INFOR 101 Chapitre 3 Marianne Morris.
Parcours de formation SIN-7
Algorithmes Branch & Bound
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Bibliothèque standard du C++
Methode de Tri efficace
Concepts avancés en mathématiques et informatique appliquées
Les tris.
Bases de données lexicales
RECONNAISSANCE DE FORMES
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Standard Template Library (STL)
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Structures de données IFT-2000
Les fichiers indexés (Les B-arbres)
Structures de données IFT Abder Alikacem La classe vector Édition Septembre 2009 Département dinformatique et de génie logiciel.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Pipeline – opérations multicycles Nous avons vu jusquà maintenant comment faire un.
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Présentation Structures de Données et TDA
IFT Complexité et NP-complétude
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Chapitre 9 Les sous-programmes.
Les Algorithmes de Tri Introduction Tri par Sélection
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
INTRODUCTION.
Méthodes de tri.
GF-11: Tri Interne Efficace et Tri Externe
Les tris Tri Action de mettre une structure de données en ordre (croissant ou décroissant). Le plus simple est d’insérer en ordre. Les algorithmes de tri.
MATHÉMATIQUES DISCRÈTES Chapitre 6 (relations)
MATHÉMATIQUES DISCRÈTES Chapitre 2 (section 2) François Meunier DMI.
MATHÉMATIQUES DISCRÈTES Chapitre 1 (Section 5)
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : MLH (Multidimensional linear hashing) D. E ZEGOUR Institut National d ’Informatique.
Cours 5 - Trois algorithmes de tri d'un tableau
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département d’informatique et de génie logiciel Édition septembre 2009.
CSI2510 Structures de données et algorithmes Analyse des algorithmes
Chapitre 21 Collections partie III Set Une collection qui contient des éléments uniques. Deux implémentation :  HashSet : stock les éléments.
Les monceaux (Heap) Monceaux Propriétés des Monceaux
Types abstraits de données (TAD)
CSI2510 Structures des Données et Algorithmes
CSI25101 Maps et Dictionnaries. CSI25102 Un dictionnaire (dictionary) est un modèle abstrait de base de données. tel une file à priorité, un dictionnaire.
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
CSI2510 Structures de données et algorithmes Plus court chemin
FORMULAIRES FOMULAIRE Permet à l’utilisateur d’entrer des renseignements le concernant. Utilisation –Inscription sur un site –Mise à jour d’une base.
CSI2510 Structures de données et algorithmes Arbres couvrants minimaux
Chapitre 6: Tableaux et Vecteurs Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis et William Loftus.
Algorithmes Branch & Bound Module IAD/RP/RO Master d ’informatique Paris 6 Philippe Chrétienne.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Transcription de la présentation:

Files de priorité (Priority Queue) TAD Files de priorité Implémentation avec des séquences Exemples d’application: Tris CSI2510 CSI2510

Files de priorité Une collection (ensemble) d’éléments dotés d’une priorité selon des critères prédéfinis en avance On peut insérer les éléments dans n’importe quel ordre L’extraction des éléments se fait suivant l’ordre de priorité (l’élément ayant la priorité la plus grande est extrait en premier) Les éléments sont stockés suivant leur priorité et non plus suivant leur position (comme dans le cas de piles, files, séquences etc.) CSI2510 CSI2510

Files de priorité Exemple de priorité : La date limite pour payer une facture La date limite pour transmettre vos devoirs Les passagers en attente (le statut de voyageur fréquent, le tarif à payer et le temps l'enregistrement, etc) CSI2510 CSI2510

Factures avec dates limites: (6/10, assurance) Factures avec dates limites: Insérer(clé,élément) (9/10, Hydro) (2/10, Carte de crédit) (4/10, Internet) (3/10, Téléphone) CSI2510 CSI2510

CSI2510 CSI2510

remove (2/10, Carte de crédit) CSI2510 CSI2510

Implémentation cachée Files de priorité – Implémentation Séquence non triée Files de priorité Implémentation cachée Séquence triée CSI2510 CSI2510

Le TAD File de priorité Une file de priorité (Priority Queue) est une collection d'entrées (entries) Chaque entrée est une paire:(clé, valeur) ou (clé, élément) Chaque élément a sa propre clé La clé sert à identifier l’élément ou à décrire sa priorité Des entrées diverses peuvent avoir la même clé Il y a une relation d’ordre total sur les clés CSI2510 CSI2510

Clés et relations d’ordre total Dans une file de priorité les éléments sont classés suivant leur clé soumis à une relation d’ordre total Une relation binaire  est dite d’ordre total sur un ensemble donné E ssi elle a les propriétés suivantes pour tout élément k1, k2, k3: Totalité: on doit avoir k1  k2 ou k2  k1 Antisymétrique: si k1  k2 et k2  k1, alors k1 = k2 Transitive: si k1  k2 et k2  k3, alors k1  k3 CSI2510 CSI2510

Exemple d’ordre total ≤ et ≥ sont des relations d’ordre total sur l’ensemble des entiers L’ordre alphabétique et l’ordre alphabétique inverse sont d’ordre total Totalité: on a k1 ≤ k2 ou k2 ≤ k1 ce qui implique Réflexivité: k ≤ k Antisymétrique: si k1 ≤ k2 et k2 ≤ k1, alors k1 = k2 Transitive: si k1 ≤ k2 et k2 ≤ k3, alors k1 ≤ k3 Si on a reflexivité sans totalité on parle de ordre partiel CSI2510 CSI2510

Un autre exemple d’ordre total Ordres pour les paires de nombre… p=(x1, y1) et q=(x2,y2) 1. p ≤ q si x1 ≤ x2, et 2. p ≤ q si x1 = x2 et y1 ≤ y2 CSI2510 CSI2510

Mais… <, > sont pas d’ordres total puisque ils ne sont pas réflexive L’opérateur ‘sous-ensemble’ n’est pas d’ordre total mais il est d’ordre partiel {1,2} ⊆{1,3} ? {1,3} ⊆{1,2} ? CSI2510 CSI2510

 TAD Entry Entry (entrée) est une paire (clé, valeur) Une file de priorité stocke les entrées pour simplifier les opérations de suppression/insertion basées sur les clés Méthodes: Key(): Retourne la clé associée à l’entrée courante Value: Retourne la valeur associée à l’entrée courante CSI2510 CSI2510

Comparateurs La forme la plus générale et la plus réutilisable de file de priorité utilise des objets appelés comparateurs Les comparateurs sont externes aux clés à comparer et permettent de comparer deux objets Une file de priorité P a un comparateur quand P est construite Quand P a besoin de comparer deux clés, elle utilise le comparateur qui lui est associé Ainsi, une file à priorité peut être suffisamment générique pour contenir n’importe quel type objet CSI2510 CSI2510

Comparateurs Méthodes: -isLessThan(a, b) -isLessThanOrEqualTo(a,b) -isEqualTo(a, b) -isGreaterThan(a,b) -isGreaterThanOrEqualTo(a,b) -isComparable(a) CSI2510 CSI2510

Le TAD File de priorité Une file de priorité P supporte les méthodes suivantes: size(): Retourne le nombre d’éléments dans P isEmpty(): Vérifie si P est vide insert(k,e): Insère un nouvel élément e avec sa clé k dans P min(): Retourne (mais ne retire pas) l’élément de P ayant la plus petite clé; une erreur survient si P est vide minKey(): Retourne la plus petite clé de P; une erreur survient si P est vide removeMin(): Retire et retourne l’élément de P ayant la plus petite clé; une erreur survient si P est vide CSI2510 CSI2510

Réalisation avec séquence non-triée Les éléments de S sont composés des paires (clé, valeur) (k,e) Nous pouvons réaliser insert() en utilisant la méthode insertLast() sur les séquences. Le temps d’exécution sera alors Cependant, comme nous insérons toujours à la fin, sans tenir compte de la valeur de la clé, notre séquence n’est pas ordonnée O(1) CSI2510 CSI2510

Réalisation avec séquence non-triée La séquence n’est pas ordonnée.. Pour min(), minKey(), et removeMin(), nous devons regarder tous les éléments de S. La complexité du pire des cas est O(n). Sommaire des performances CSI2510 CSI2510

Réalisation avec séquence triée Une autre réalisation possible utilise une séquence S, triée par ordre croissant de clés. min(), minKey(), et removeMin() deviennent alors O(1) Cependant, pour réaliser insert(), nous devons maintenant parcourir la séquence entière dans le pire des cas. Ainsi, insert() s’exécute en temps O(n) CSI2510 CSI2510

Avec séquence non-triée Une observation… Avec séquence non-triée removeMin() prends toujours O(n), même dans le meilleur cas. Mais avec séquence triée: insertItem() prends au plus O(n) CSI2510 CSI2510

Une Application: Tri Une file de priorité P peut être utilisée pour trier une séquence S : en insérant les éléments de S dans P avec une suite d’opérations insert(e, e) en retirant les éléments de P en ordre croissant et en les remettant dans S avec une suite d’opérations removeMin() La clé est l'élément lui même CSI2510 CSI2510

insert ….. (2,2) (1,1) (7,7) (4,4) (3,3) CSI2510 CSI2510

CSI2510 CSI2510

remove (1,1) CSI2510 CSI2510

remove (1,1) (2,2) CSI2510 CSI2510

Schéma général d’un tri avec une file de priorité Algorithm PriorityQueueSort(S, P): Entrées: Une séquence S contenant n éléments, avec une relation d’ordre total, et une file de priorité P qui compare les clés avec cette relation Sortie: Une séquence S triée à l’aide de la relation d’ordre total while !S.isEmpty() do e  S.removeFirst() P.insert(e, e) while P is not empty do e  P.removeMin() S.insertLast(e) CSI2510 CSI2510

Selection Sort (tri par sélection) Le tri par sélection est basé sur le schéma du tri par file de priorité (PriorityQueueSort); Il utilise une séquence non-triée pour implémenter la file de priorité P : Phase 1: l’insertion d’un élément de S dans P (insert == insertLast) est exécutée en un temps O(1) Phase 2: le retrait d’un élément de P ( removeMin() ) prend un temps proportionnel au nombre d’éléments présents dans P CSI2510 CSI2510

Selection Sort Insertion dans une ordre non spécifié Sélection en ordre CSI2510 CSI2510

Selection Sort Exemple Séquence S File de priorité P Entrée: (7,4,8,2,5,3,9) () Phase 1 (a) (4,8,2,5,3,9) (7) (b) (8,2,5,3,9) (7,4) .. .. .. . . . (g) () (7,4,8,2,5,3,9) Phase 2 (a) (2) (7,4,8,5,3,9) (b) (2,3) (7,4,8,5,9) (c) (2,3,4) (7,8,5,9) (d) (2,3,4,5) (7,8,9) (e) (2,3,4,5,7) (8,9) (f) (2,3,4,5,7,8) (9) (g) (2,3,4,5,7,8,9) () insert() == insertLast() removeMin() CSI2510 CSI2510

Selection Sort (cont.) Sequence non triee Le temps d’exécution de tri par sélection: Insérer les n éléments dans la file de priorité avec n opérations de insert() est O(n) Enlever les éléments dans l'ordre trié de la file de priorité avec n opérations de removeMin() est proportionnel à n + (n – 1) + …+ 2 + 1 Le tri par sélection est exécuté en temps O(n2) CSI2510 CSI2510

Selection Sort In Place Au lieu d’utiliser de l’espace additionnel, on peut exécuter Select Sort “sur place” en divisant S en deux parties complémentaires: une triée et une non triée Pour select-sort en place - A chaque étape on cherche le plus petit élément de la partie non triée de S, on le retire de cette partie et on l’ajoute à la fin de la partie triée (vide à l’étape 0) et ainsi de suite jusqu’à trier toute la séquence S CSI2510 CSI2510

Selection Sort In Place 5 4 2 3 1 1 4 2 3 5 Partie triée Partie non triée 1 2 4 3 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 CSI2510 CSI2510

Insert-Sort (Tri par insertion) Le tri par insertion est basé sur le schéma du tri par file de priorité (PriorityQueueSort); Il utilise une séquence triée pour implémenter la file de priorité P : Phase 1: l’insertion d’un élément de S dans P (insert) est exécutée en un temps O(n) au pire des cas Phase 2: le retrait d’un élément de P ( removeMin() ) est exécutée en un temps O(1) CSI2510 CSI2510

Insertion-Sort Exemple Séquence S File de priorité P Entrée: (7,4,8,2,5,3,9) () Phase 1 (a) (4,8,2,5,3,9) (7) (b) (8,2,5,3,9) (4,7) (c) (2,5,3,9) (4,7,8) (d) (5,3,9) (2,4,7,8) (e) (3,9) (2,4,5,7,8) (f) (9) (2,3,4,5,7,8) (g) () (2,3,4,5,7,8,9) Phase 2 (a) (2) (3,4,5,7,8,9) (b) (2,3) (4,5,7,8,9) (c) (2,3,4) (5,7,8,9) (d) (2,3,4,5) (7,8,9) (e) (2,3,4,5,7) (8,9) (f) (2,3,4,5,7,8) (9) (g) (2,3,4,5,7,8,9) () insert() removeMin() CSI2510 CSI2510

Tri par insertion (suite) Séquence triée Tri par insertion (suite) Le temps d’exécution d’un tri par sélection: L’insertion des n éléments dans la file de priorité est faite avec n opérations insert() en un temps total qui est proportionnel au pire des cas à: n + (n – 1) + …+ 2 + 1 Le retrait des n éléments, dans l'ordre trié, de la file de priorité est fait avec n opérations removeMin() en un temps total O(1) Le tri par sélection est exécuté en un temps O(n2) CSI2510 CSI2510

In-place Insertion-sort Au lieu d’utiliser une deuxième structure de données P (espace occupé en plus) pour trier une séquence S, on peut exécuter le tri par insertion « sur place » (In-place Insertion sort) en divisant S en deux parties complémentaires: une triée et une non triée A chaque étape on retire le premier élément de la partie non triée de S et on l’insère dans la partie triée (vide à l’étape 0) de façon à garder cette partie triée et ainsi de suite jusqu’à insérer toute la séquence S CSI2510 CSI2510

In-place Insertion-sort 5 4 2 3 1 5 4 2 3 1 Partie triée Partie non triée 4 5 2 3 1 2 4 5 3 1 2 3 4 5 1 1 2 3 4 5 CSI2510 CSI2510

Comparaison Le tri par sélection va toujours exécuter un nombre d’opérations O(n2) peu importe la séquence d’entrée removeMin() est toujours exécuté en un temps O(n) Le temps d’exécution du tri par insertion varie selon la séquence d’entrée insertItem() est exécuté au pire des cas en un temps O(n) CSI2510 CSI2510