CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.

Slides:



Advertisements
Présentations similaires
Introduction à la notion de fonction 1. Organisation et gestion de données, fonctions 1.1. Notion de fonction ● Déterminer l'image d'un nombre par une.
Advertisements

Chapitre 3 La numération octale et hexadécimale. Chapitre 3 : La numération octale et hexadécimale 1 - Introduction 2 - Le système Octal Définition.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
7. Problème de flot à coût minimum. 7.1 Graphes, graphes orientés, réseaux Un graphe G =(V, E) est constitué d’un ensemble non vide fini de sommets V.
Volée 1316 S3 Cours No 2_3 : Le nombre en 1-2H. Les fonctions du nombre  Dénombrer, énumérer, décrire une collection. Aspect cardinal  Dater, classer,
Cours COMPOSANTES DES VECTEURS Dimitri Zuchowski et Marc-Élie Lapointe.
Information, Communication, Calcul
Coloration de graphe, backtracking, branch and bound
V Graphes étiquetés Ce sont des graphes orientés où les arêtes sont affectées d’étiquettes. Lorsque les étiquettes sont des nombres, on dit que le graphe.
Un Algorithme , c'est Quoi ?
LES TABLEAUX EN JAVA.
Algorithme et programmation
CCNP Routage Chapitre 4 - Questionnaire N°1
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Algorithmique AU El harchaoui noureddine
Algorithmique demander jeu du pendu.
Reprise du cours ( ) Aujourd’hui :
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Représentation de l'information en binaire:
Probabilités.
L’Instruction de Test Alternatif
Javadoc et débogueur Semaine 03 Version A16.
Principes de programmation (suite)
Initiation à la programmation impérative et algorithmique
VI. Tri par tas (Heap sort)
Programmation Impérative II
Codification et Représentation de l’information
Techniques du Data Mining
Information, Communication, Calcul
Stabilité des porteurs horizontaux (Poutres)
Création Et Modification De La Structure De La Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
1.2 dénombrement cours 2.
Package R Markdown: Un outil pour générer des pages html avec R Studio
DATA WEARHOUSE 1ère année LA: Technologies systèmes d’information
Formation sur les bases de données relationnelles.
Techniques du Data Mining
Tâches Tâches antérieures Durée A -- 6 B 5 C 4 D E F A D G E F Niveaux
Chapitre 3 : Caractéristiques de tendance centrale
SDRP & MA Problème du rendez vous : un algorithme probabiliste et une analyse probabiliste 09/11/2018.
Adaptive Neuro Fuzzy Inference System (ANFIS)
Eléments de la Théorie des Probabilités
Révision du format des données
Cycle, Cocycle, Arbre et Arborescence
B.Shishedjiev - Informatique
4°) Intervalle de fluctuation :
Lois de Probabilité Discrètes
Élections locales probabilistes
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Présentation 4 : Sondage stratifié
MATHÉMATIQUES FINANCIÈRES I
Championnat de France individuel
Reconnaissance de formes: lettres/chiffres
Logiciel de présentation
IFT313 Introduction aux langages formels
CSI 3505 Algorithmes Voraces
H. Wertz -- Exécution Symbolique
Tris Simples/Rapides.
PROGRAMMATION ET ENSEIGNEMENT
Arbre binaire.
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Chapter 11: Récursivité Java Software Solutions Second Edition
UMLV ã Plus courts chemins Toutes paires d'états
Python Nicolas THIBAULT
Elections locales probabilistes
Type Tableau Partie 1 : Vecteurs
Dérivation – Fonctions cosinus et sinus
Séquence 1:Analyse du système d’information comptable
Transcription de la présentation:

CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I. Plan du Cours Introduction (Chapitre 1) Techniques de résolution: Diviser pour régner (Chapitre 2) Techniques de résolution: Programmation dynamique(Chapitre 3) Techniques de résolution: Algorithmes voraces(Chapitre 4) Introduction a la théorie de Complexité du calcul(Chapitre 9) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Faire de la monnaie, canadienne. Nous voulons rendre la monnaie à un client en lui donnant le moins de pièces possibles. Exemple 1: Rendre 87c en utilisant des pièces de: 25c 10c 5c 1c 3 x 25c + 1 x 10c + 2 x 1c Est-ce que l'algorithme donne toujours la solution optimale ? OUI 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme vorace: à chaque étape, choisir la plus grande pièce possible. Exemple 2: Rendre 16c en utilisant des pièces de: 25c 12c 10c 5c 1c 1 x 12c + 4 x 1c La solution optimale: 1x 10c + 1x 5c + 1x 1c 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces C'est un algorithme qui prends un meilleur choix possible à chaque étape de la construction de la solution. Ce sont des algorithmes généralement assez simple. Ils servent typiquement à résoudre des problèmes d'optimisation. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces fonction monnaie(P:ensemble {pièces}; s:entier {somme a rendre}): ensemble avec répétitions S :=  {solution} tantque s > 0 faire p := plus grande pièce de P dont la valeur ne dépasse pas s; S := S  {p} s := s-p retourner S 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces L'approche vorace Note : On utilise aussi le terme « glouton » plutôt que vorace. Intuition : dans l'approche vorace, une solution est obtenue en effectuant une séquence de choix, chaque choix se faisant sur la base d'information locale, en choisissant ce qui semble le mieux au moment ou le choix s'effectue (et en espérant que cela mène a la solution optimale globale). 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Les algorithmes voraces sont souvent utilisés, comme les algorithmes de programmation dynamique, pour résoudre des problèmes d'optimisation. Ils produisent un résultat optimal si le problème satisfait la propriété de choix vorace (greedy choice) = la solution globale peut être obtenue par une série de choix optimums locaux. Mais, . . . , ce ne sont pas tous les problèmes qui satisfont cette propriété. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Principales composantes d'une approche vorace : L'algorithme débute avec un ensemble vide d'items et ajoute, de façon répétitive, des items dans l'ensemble jusqu'a ce qu'une solution optimale soit obtenue. Chaque itération consiste dans les composantes suivantes : Une procédure de sélection, qui choisit le prochain item à inclure dans l'ensemble. Un test de faisabilité, qui détermine si le nouvel ensemble conduit a une solution faisable, c'est-à-dire, pouvant être étendu en complétant cet ensemble par d'autres éléments. Une vérification de la solution, qui détermine si le nouvel ensemble constitue une solution à l'instance du problème. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Schéma général: C: ensemble de candidats S :=  tantque S n'est pas une solution et C   x := élément de C qui maximise un critère de sélection C := C - x si (S  {x}) est réalisable alors S := S  {x} si S est une solution alors retourner S sinon retourner pas-de-solution 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Le commis voyageur: Soit un graphe complet et pondéré (poids non négatifs) à n sommets, trouver un tour de poids minimal. Choisir, à chaque étape, l'arête la plus courte non encore considérée a condition qu'elle: - ne forme pas de cycle avec les arêtes déjà choisies (sauf par la dernière) - ne soit pas la troisième arête choisie incidente a un même sommet 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces : point dans le plan arête = distance entre le points 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces L'algorithme vorace ne trouve pas toujours la solution optimale 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces B C E 2 1 20 10 D Exemple: 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces B C D E 2 1 20 10 1 A B C D E 2 20 10 A B C E 2 1 20 10 D C A B D E 2 1 20 10 A B C D E 2 1 20 10 A B C E 2 1 20 10 D 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Coût: 1+1+10+20+2 = 34 !!!! Coût: 2+2+2+10+2 = 18 A B D E 2 1 20 10 A B D E 2 1 20 10 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Arbres sous-tendants minimaux G = (V,E) : graphe connexe non-orienté A chaque arête est associée une longueur non-négative Trouver un sous-ensemble T des arêtes E tel que tous les sommets restent connectés par les arêtes dans T, et que la somme des longueurs soit aussi petite que possible Le graphe partiel (V,T) est un arbre 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Un ensemble d'arêtes est: - une solution s’il forme un arbre sous-tendant - réalisable si il ne contient aucun cycle Un arête rejoint un ensemble de sommets si une et une seule de ses extrémités est dans cet ensemble 3 4 2 6 5 1 v1 v2 v4 v5 v3 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme vorace de Kruskal Nos candidats sont les arêtes L’algorithme maintient une forêt (un ensemble d’arbres) À chaque itération, on choisit une arête la plus courte : Si elle joint deux arbres, on l’ajoute, sinon on la rejette car elle créerait un cycle On s’arrête lorsqu’on n'a plus qu’un seul arbre. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme de Kruskal |V| = n |E| = m T:=  A := E répéter Choisir l'arête e A avec le coût plus petit Si T  e est réalisable {pas de cycle} T := T  e A := A - e jusqu'a ce que T est une solution jusqu'a ce que |T| = n-1 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple 1 4 2 6 5 3 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v4 v5 v3 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Coût = 1+2+3+4 = 10 4 2 6 5 3 1 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v5 v4 v3 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Un sous ensemble d'arêtes F est dit prometteur si on peut l’étendre a un arbre sous-tendant minimal. 1 4 2 6 5 3 v1 v2 v4 v5 v3 {(v1, v2), (v1, v3)} est prometteur {(v3, v4)} est prometteur {(v2, v3), (v4, v5)}n’est pas prometteur 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Lemme 4.2 (page 154) Soit G=(V,E) un graphe connexe non orienté, avec une longueur associée a chaque arête. Soit F  E un ensemble prometteur d'arêtes et soit e une arête de longueur minimale dans E-F tel que F {e} n’a pas de cycle. Alors, F {e} est prometteur. E-F e' e F minimal Preuve: page 154 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces L’algorithme de Kruskal produit toujours un un arbre sous-tendant: Une preuve simple par récurrence utilisant le lemme précédent 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Implantation efficace: Manipulation d'ensembles: Structure d'ensembles disjoints trouver(x): dans quel ensemble l'élément x se trouve fusionner(A, B): pour fusionner deux ensembles 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces fonction Kruskal (G =(V, E): graphe, longueur:A R+) :ensemble trier A par longueur croissante T := ; n := |V| Initialiser n ensembles, chacun contenant un élément différent de V répéter (u,v): = plus courte arête non encore considérée; ucomp := trouver(u); vcomp: = trouver(v); Si ucomp  vcomp fusionner(ucomp,vcomp); T := T  {(u,v)}; jusque |T| = n-1 retourner T; 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Complexité trier A par longueur croissante T := ; n := |V| Initialiser n ensembles, chacun contenant un élément différent de V répéter (u,v): = plus courte arête non encore considérée; ucomp := trouver(u); vcomp: = trouver(v); Si ucomp  vcomp fusionner(ucomp,vcomp); T := T  {(u,v)}; jusque |T| = n-1 retourner T;  (m logm) (n) m fois  (m logm) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Trier: O(m log m) Initialiser les n ensembles: O(n) Trouver & Fusionner: ( a chacune des m itérations « au plus ») 2 trouver + 1 fusionner (si l'arête fait partie deux ensembles différents) O(m log m) Complexité: O(m log m) = O(n2 log n) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme de Prim Nos candidats sont les arêtes L’algorithme de Prim maintient un seul arbre À chaque itération, on choisit une nouvelle arête la plus courte. On s’ arrête après n-1 répétitions. Dans l'algorithme de Kruskal, on choisi des arêtes prometteuses sans se préoccuper de leur connections avec les arêtes déjà choisies. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces B = { un élément quelconque de V} tant que B  V (u,v) := arête minimale telle que u  V-B et v  B T := T  {(u,v)} B := B  {u} retourner T 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple:Algorithme de Prim (point de départ v2) 4 2 6 5 3 1 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v4 v5 v3 4 2 6 5 3 1 v1 v2 v4 v5 v3 Coût = 1+3+2+4 = 10 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple:Algorithme de Prim (point de départ v5) 3 4 2 6 5 1 v1 v2 v4 v5 v3 3 4 2 6 5 1 v1 v2 v4 v5 v3 3 4 2 6 5 1 v1 v2 v4 v5 v3 3 4 2 6 5 1 v1 v2 v4 v5 v3 Coût = 2+3+1+4 = 10 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Lemme 4.1 (page 149) Soit G=(V,E) un graphe connexe non orienté, avec une longueur associée a chaque arête. Soit F  E un ensemble prometteur d'arêtes et soit Y l’ensemble des sommets connectés par les arêtes en F. Soit e une arête de longueur minimale parmi celles qui connectent un sommet de Y avec un sommet de V-Y. Alors, F {e} est prometteur . 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Complexité: n étapes A chaque étape: -recherche d’une arête minimale -mettre a jour le tableau O(n) O(n) O(n2) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithmes voraces pour l'ordonnancement des (tâche) travaux: problème de minimisation de l'attente n clients Un seul serveur ti: temps que prendra le client i (connu a-priori) On veut minimiser la somme totale des attentes des clients:  (temps passé dans le système par le client i) i=1 n 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple: Il y a 6 ordres possibles: 123: 5 + (5 + 10) + (5 + 10 + 3) = 38 132: 5 + (5 + 3) + (5 + 3 + 10) = 31 213: 10 + (10 + 5) + (10 + 5 + 3) = 43 231: 10 + (10 + 3) + ( 10 + 3 + 5) = 41 312: 3 + (3 + 5) + (3 + 5 + 10) = 29 321: 3 + (3 + 10) + ( 3 + 10 + 5 ) = 34 t1 = 5 t2 = 10 t3 = 3 Algorithme vorace:A chaque étape, ajouter à la fin de la liste le client demandant le moins de service entre tous ceux qui restent. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Théorème. L'algorithme vorace donne toujours la solution optimale. Preuve. Soit I = (i1,i2,…,in) une permutation quelconque des entiers {1,2, …, n}. Si les clients sont servis dans l'ordre I, le temps total que tous les clients passent dans le système: T(I) = ti1 + (ti1 + ti2 ) + (ti1 + ti2 + ti3 ) + ….. k=1 n = (n - k + 1) tik 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Supposons que dans cet ordre I: 1 2 …..….. a ………... b ………….… n On a: a < b et tia > tib Si on inverse les positions de ces deux clients: I’: 1 2 …..….. b ………... a ………….… n ti1 ti2 …..….. tib ………... tia ………….… tin T(I') = (n - a + 1) tib + (n - b + 1) tia +  (n - k + 1) tik k = 1 k  {a,b} n 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Comparons les deux ordres: k=1 n T(I) = (n - k + 1) tik T(I') = (n - a + 1) tib + (n - b + 1) tia +  (n - k + 1) tik k = 1 k  {a,b} n T(I) - T(I') = (n - a + 1) (tia- tib) + (n - b + 1) (tib - tia) = (b-a) (tia- tib) > 0 Donc l’ordre I’ d’exécution des tâches est meilleur que I 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Conclusion: L’algorithme vorace donne toujours une solution optimale. Une solution qui n’est pas construite avec une méthode vorace ne peut être optimale. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Ordonnancement avec échéances n tâches a exécuter - chacune en temps unitaire une et une seule tâche est exécuter a chaque instant t = 1, 2 …. La tâche i apporte un gain gi > 0 si et seulement si elle est exécutée au plus tard a l'instant di On n’est pas obligé d’exécuter toutes les tâches Exemple n = 4 i 1 2 3 4 gi 50 10 15 30 di 2 1 2 1 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Il y des séquences qui ne donne aucun gain « 0 » … les autres .. Séq. possibles: gain 1 50 2 10 3 15 4 30 1,3 65 2,1 60 2,3 25 3,1 65 4,1 80 4,3 45 i 1 2 3 4 gi 50 10 15 30 di 2 1 2 1 Les séquences 1 et 1, 2, 3 correspondent au même gain. Il n’y a que la tâche 1 qui donne un gain. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Ensemble de tâche T est réalisable s’il existe au moins un ordre des tâche de T (séquence réalisable) et qui permet d'exécuter toutes les tâches de l'ensemble T avant leur échéances Un ensemble de tâche T est réalisable si est seulement si la séquence croissante des tâches de T triées par leurs temps d’échéance est réalisable 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Supposons que S est réalisable suivant l’ordre: t1 t2 … ti … tj … tk Et que d(tj) < d(ti), en échangeant ti et tj dans l’ordre S, on obtient un ordre réalisable t1 t2 … tj … ti … tk En utilisant d’une façon répétitive ces échanges on arrive aux mêmes tâches dans l’ordre croissant, et qui est aussi réalisable. L’inverse est évidemment vrai. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Conséquence: Comment savoir si un ensemble de tâches est réalisable? Il suffit de tester les tâches dans un seul ordre: l’ordre croissant des tâches de T triées par leurs temps d’échéance 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme vorace: Construire l'ensemble des tâches à exécuter étape par étape, Ajouter, a chaque étape, la tâche non encore considérée ayant la plus grande valeur de gi a condition que le nouveau ensemble de tâches soit réalisable. Combien d’étapes? n-1 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces trier l’ensemble des tâches T en ordre décroissant relativement au gain S:=  répéter Choisir la tâche e T avec le gain le plus grand T := T - e Si S  e est réalisable S := S  e jusqu'a ce que T est vide 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Complexité - Cas Pire taille du problème: n, le nombre de tâches opération: comparaisons Trier les tâches: O(n log n) A chaque pas: (i-1) comparaisons pour ajouter la i-ème tâche i comparaisons pour vérifier si l'ensemble est réalisable  [(i-1) + i] = n2 -1 i=2 n 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme de Dijkstra: Approche vorace. trouver les plus courts chemins entre un sommet v et chacun des autres sommets d’un graphe. C: ensemble de sommet contenant les candidats disponibles S: ensemble de sommet contenant le candidats choisis 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces A tout moment, S contient l'ensemble de sommets dont la distance minimale de la source est connue. C contient les autres. Au départ S contient seulement la source. A la fin S contient tous les sommets. A chaque étape on choisit dans C le sommet v dont la distance de la source est minimal et on l'ajoute a S. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Sommet numérotes de 1 a n L: matrice des poids: L[i,j]  0 si (i,j) existe, sinon L[i,j] =  1 2 3 4 5 1  50 30 100 10 2      3  5  50  4  20    5    10  2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Fonction Dijkstra(L[1..n][1..n]): tableau[2..n] {initialisation} C = {2,3,..,n} // S = V - C existe seulement implicitement pour i =2 a n faire: D[i] = L[1,i] répéter n-2 fois v = élément de C qui minimise D[v] C = C - {v} // donc, implicitement S = S  {v} pour chaque élément w de C faire: D[w] = min{D[w], D[v]+L[v,w]) retourner D. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Étape v C D init. {2,3,4,5} [50,30,100,10] 1 5 {2,3,4} [50,30,20,10] 2 4 {2,3} [40,30,20,10] 3 3 {2} [35,30,20,10] 1 10 50 5 30 2 100 10 5 20 4 50 3 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces On a trouve la longueur du plus court chemin; si on veut savoir aussi par ou il passe: Ajouter un deuxième tableau P[2..n] ou P[v] pour stocker le numéro du sommet qui précède v dans le plus court chemin Initialiser P[i] = 1 pour i = 2,3,…,n remplacer le contenu de la boucle par: si D[w] > D[v] + L[v,w] alors D[w] = D[v] + L[v,w] P[w] = v 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Théorème 1) Si un sommet i est dans S, alors D[i] donne la longueur du plus court chemin de la source vers i. 2) Si un sommet i n'est pas dans S, alors D[i] donne la longueur du plus court chemin de la source vers i qui ne passe que par les sommet dans S. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Complexité n sommets m arêtes Initialisation; O(n) n-2 répétitions: n-1 n-2 2 ---- O(n2) Total: O(n2) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Observation: Si m est beaucoup plus petit que n, il est concevable qu'on puisse éviter l'examen des nombreuses entrée contenant . 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Représentation différente du graphe: 1 2 3 4 5 2:50 3:30 4:100 5:10 2:5 4:10 pour chaque élément w de C faire: D[w] = min{D[w], D[v]+L[v,w]) Il suffit de le faire pour les w adjacents a v mais …….. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Solution:Heap contenant un noeud pour chaque élément v de C ordonne par la valeur de D[v] élément de C qui minimise D[v] Racine du heap Initialisation heap: O(n) instruction C = C - {v} O(log n) pour chaque w de C faire: D[w] = min{D[w], D[v]+L[v,w]) (modifier D[w] et mettre-a-jour le heap O(log n) pas plus qu'une fois pour arc) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces éliminer racine du heap n-2 fois mettre a jour au plus m fois O((m+n) log n) = O(m log n) 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Les plus courts chemins: G = (V,E) : graphe connexe. A chaque arête est associée une longueur non-négative. Déterminer la longueur du plus court chemin entre chaque paire de sommets. 1 2 3 4 15 5 50 30 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Le code de Huffman est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman (1952) est un code de longueur variable optimal, c'est-à-dire tel que la longueur moyenne d'un texte codé soit minimale. On observe ainsi des réductions de taille de l'ordre de 20 à 90%. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Codes de longueur fixe: Chaque caractères est codé avec le même nombre de bits. Pour C caractères on a besoin de log2 C bits Simple, et facile a manipuler TEST 100001011100 nl 110 es 101 T 100 S 011 I 010 E 001 A 000 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple 1 nl 110 es 101 T 100 S 011 I 010 E 001 A 000 A E I S T es nl 1 000 001 010 011 100 101 110 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Exemple 2 longueur variable nl 11 es 101 T 100 S 011 I 010 E 001 A 000 A E I S T es nl 1 000 001 010 011 100 101 11 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces nl 1 00000 00001 0001 001 01 10 11 Exemple 3 Symbol Code 00001 nl 001 es 11 T 00000 S 0001 I 10 E 01 A TEST = 11100000011 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces 110 101 100 011 010 001 000 Code Longueur fixe 441 15 54 96 12 36 105 123 Total Bits Longueur variable 5 18 32 4 35 41 Fréquence 363 25 64 20 48 70 82 Caractère 00001 nl es 11 T 00000 S 0001 I 10 E 01 A 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Pour qu’un codage soit sans ambiguïté il doit avoir la propriété de préfixe: une séquence binaire ne peut jamais être à la fois représentative d'un élément codé et constituer le début du code d'un autre élément. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces 11010000111 = 11 01 00 001 11 00 P Symbole Code 00001 nl 001 es 11 T 00000 S 0001 I 10 E 01 A Ou 11 01 00001 11 I es P A E T S nl 1 00000 00001 0001 001 01 10 11 Préfixe!! 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Cette caractéristique préfixe du codage permet une codification à l'aide d'une structure d'arbre binaire. l'arbre de décodage du code Les caractères sont placés uniquement sur les feuilles de l’arbre. Tout nœud interne (c'est-à-dire qui n'est pas une feuille) a deux fils non vides. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Problème: Input Une liste de caractères et leurs fréquences. Output l'arbre de décodage du code avec un Coût total minimal Coût total = ls = nombre de bits du code pour le caractère s fs = fréquences du caractère s 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Algorithme de Huffman (1952) un code optimal de longueur variable Huffman propose de recoder les données qui ont une occurrence très faible sur une longueur binaire supérieure à la moyenne, et recoder les données très fréquente sur une longueur binaire très courte. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces L'algorithme opère sur une forêt. Ceux-ci sont des arbres étiquetés complets: tout noeud interne (c'est-à-dire qui n'est pas une feuille) a deux fils non-vides. La forêt initiale est formée d'un arbre à un noeud pour chaque caractère du langage-source, dont l'étiquette est la fréquence (ou probabilité) de ce caractère . La forêt finale est formée d'un unique arbre, qui est l'arbre de décodage du code. L'algorithme est de type vorace «glouton»: il choisit à chaque étape les deux arbres d'étiquettes minimales, soit x et y, et les remplace par l'arbre formé de x et y et ayant comme étiquette la somme de l'étiquette de x et de l'étiquette de y. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Le code d'un caractère est alors déterminé en suivant le chemin depuis la racine de l'arbre jusqu'à la feuille associée à ce caractère en concaténant successivement un 0 ou un 1 selon que la branche suivie est à gauche ou à droite. 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces P A E T S L 32 25 12 4 30 18 5 T1 S L 9 I P A E T 32 25 12 30 18 T1 I S L T2 21 P A E T 32 25 30 18 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces P A E S L T2 T3 41 35 32 39 T1 I P A S L T2 T3 41 39 T E T4 67 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces P A E S L T2 T3 T4 T5 67 80 T1 I T P A E S L T2 T3 T4 T5 147 T6 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Codage T1 I T P A E S L T2 T3 T4 T5 147 T6 Symbol Code 00001 L 001 P 11 T 00000 S 0001 I 10 E 01 A 1 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces P A E S L T E A P S L I 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces On utilise pour les noeuds une liste prioritaire “heap” Un noeud est un enregistrement contenant: Caractère de type char Fréquence de type int Fils droit de type noeud Fils gauche de type noeud 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Huffman (C) n = nombre de Caractères dans C Initialisation du heap Q, en utilisant les Fréquences comme priorité for i in 1..n-1 do z = nouveau noeud dans l’arbre x = Extraire-Minimum (Q) y = Extraire-Minimum (Q) fils gauche z = x fils droit z = y f[z] = f[x] + f[y] Insérer (Q, z) end for Retourner l’arbre 2/23/2019 Dr. Nejib Zaguia

CSI 3505 Algorithmes Voraces Complexité: Initialisation du heap n-1 itérations dans la boucle for: chaque itération (nombre constant d’opérations sur le heap) O(n) log (n) Total: O(n logn) 2/23/2019 Dr. Nejib Zaguia