La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I."— Transcription de la présentation:

1 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

2 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 c c c 3 x 25c x 10c x 1c Est-ce que l'algorithme donne toujours la solution optimale ? OUI 2/23/2019 Dr. Nejib Zaguia

3 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 c c 5c c 1 x 12c x 1c La solution optimale: 1x 10c x 5c + 1x 1c 2/23/2019 Dr. Nejib Zaguia

4 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

5 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

6 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

7 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

8 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

9 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

10 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

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

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

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

14 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

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

16 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

17 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

18 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

19 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

20 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

21 CSI 3505 Algorithmes Voraces
Coût = = 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

22 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

23 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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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 = = 10 2/23/2019 Dr. Nejib Zaguia

32 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 = = 10 2/23/2019 Dr. Nejib Zaguia

33 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

34 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

35 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

36 CSI 3505 Algorithmes Voraces
Exemple: Il y a 6 ordres possibles: 123: (5 + 10) + ( ) = 38 132: (5 + 3) + ( ) = 31 213: (10 + 5) + ( ) = 43 231: (10 + 3) + ( ) = 41 312: (3 + 5) + ( ) = 29 321: (3 + 10) + ( ) = 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

37 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

38 CSI 3505 Algorithmes Voraces
Supposons que dans cet ordre I: …..….. a ………... b ………….… n On a: a < b et tia > tib Si on inverse les positions de ces deux clients: I’: …..….. 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

39 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

40 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

41 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 gi di 2/23/2019 Dr. Nejib Zaguia

42 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 gi di 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

43 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

44 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

45 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

46 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

47 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

48 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

49 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

50 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

51 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  5   4  20    5    10  2/23/2019 Dr. Nejib Zaguia

52 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

53 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

54 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

55 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

56 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

57 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

58 CSI 3505 Algorithmes Voraces
Représentation différente du graphe: 1 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

59 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

60 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

61 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

62 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

63 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 nl 110 es 101 T 100 S 011 I 010 E 001 A 000 2/23/2019 Dr. Nejib Zaguia

64 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 2/23/2019 Dr. Nejib Zaguia

65 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 11 2/23/2019 Dr. Nejib Zaguia

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

67 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

68 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

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

70 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

71 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

72 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

73 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

74 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

75 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

76 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

77 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

78 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

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

80 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

81 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

82 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


Télécharger ppt "CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I."

Présentations similaires


Annonces Google