Cours Algo 1 Resume

3,802 views
3,627 views

Published on

introduction a l algorithmique commencer a comprendre

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,802
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
171
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Cours Algo 1 Resume

  1. 1. Cours d’Algorithmique Marc Gengler [email_address] Alexandra Bac - Henry Kanoui - Alain Samuel 24h de cours 24h de TD des devoirs un projet … et un examen
  2. 2. <ul><li>Trier et chercher </li></ul><ul><li>Listes et arbres </li></ul><ul><li>Le back-track </li></ul><ul><li>Arbres équilibrés </li></ul><ul><li>Récursivité et induction sur la structure </li></ul><ul><li>Divide and conquer </li></ul><ul><li>Minimax </li></ul><ul><li>Dérécursion </li></ul><ul><li>Divers problèmes particuliers </li></ul><ul><li>Logique de Hoare </li></ul><ul><li>Programmation dynamique </li></ul><ul><li>Complexité et calculabilité </li></ul>Les grandes lignes du cours
  3. 3. Bibliographie <ul><li>Tout ce qui contient </li></ul><ul><ul><li>algorithmes, algorithms. </li></ul></ul><ul><li>Internet </li></ul><ul><ul><li>souvent, c’est très (trop) simplifié, </li></ul></ul><ul><ul><li>et pas toujours correct. </li></ul></ul><ul><li>Mes choix </li></ul><ul><ul><li>Introduction to Algorithms, Leiserson et al. </li></ul></ul><ul><ul><li>Algorithms, Sedgewick. </li></ul></ul><ul><ul><li>Fundamental Algorithms, Knuth. </li></ul></ul><ul><ul><li>des anciens cours ;-) </li></ul></ul><ul><li>D’autres choix </li></ul><ul><ul><li>Introduction à l’algorithmique, Leiserson et al. </li></ul></ul><ul><ul><li>chez Dunod. </li></ul></ul><ul><ul><li>Initiation à l’algorithmique et aux structures de données, Courtin et Kowarski. </li></ul></ul>
  4. 4. Al Khwarizmi <ul><li>Célèbre mathématicien à Bagdad, </li></ul><ul><li>vers 780-850. </li></ul><ul><li>« Kitâb al-jabr wa al-muqâbala ». Livre sur la science de la transposition et de la réduction : résolution systématique de l’équation du second degré. </li></ul><ul><li>Traduit en latin au 12 e siècle par Gherardo di Cremona sous le titre «  Dixit Algorismi  ». </li></ul><ul><li>Aussi : « Kitâb al Jami wa al Tafriq bi Hisab al Hind ». Livre de l'addition et de la soustraction d'après le calcul des indiens. </li></ul><ul><li>http ://trucsmaths.free.fr/alkhwarizmi.htm </li></ul><ul><li>http://publimath.irem.univ-mrs.fr/glossaire/AL016.htm </li></ul>
  5. 5. Al Khwarizmi 16 + X^2 + 8 * X = 33 + 16 X^2 2 * X 4 ( X + 4 )^2 = 7^2
  6. 6. Les tris sur tableaux ----------------------------------------------------------------- <ul><li>Tableau d’entrées 0 à n-1. </li></ul><ul><li>Entiers naturels, mais n’importe quel ensemble ordonné peut convenir. </li></ul><ul><li>Les répétitions sont possibles. </li></ul>Les hypothèses : Le but : <ul><li>Ordonner le tableau par valeurs non décroissantes. </li></ul>Nous trions pour accélérer les recherches !
  7. 7. Les tris sur tableaux ----------------------------------------------------------------- <ul><li>En général, l’ordre est imposé par le monde extérieur. </li></ul><ul><li>Je peux trier des personnes : </li></ul><ul><ul><li>d’après l’âge, </li></ul></ul><ul><ul><li>d’après le poids, </li></ul></ul><ul><ul><li>d’après la taille, </li></ul></ul><ul><ul><li>d’après l’ordre lexicographique des patronymes, </li></ul></ul><ul><ul><li>. . . </li></ul></ul>Quelle relation d’ordre ?
  8. 8. Les tris sur tableaux ----------------------------------------------------------------- Situation initiale Valeurs 0 1 2 3 … n-1 Pas de relation entre les indices et les valeurs !
  9. 9. Les tris sur tableaux ----------------------------------------------------------------- Situation finale Valeurs 0 1 2 3 … n-1 Une relation claire entre les indices et les valeurs !
  10. 10. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées Non triées et plus grandes i-1
  11. 11. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange - suite <ul><li>Les entrées de 0 à i-1 sont triées. </li></ul><ul><li>Elles sont plus petites que les entrées suivantes. </li></ul><ul><li>Les entrées à partir de l’indice i ne sont pas triées. </li></ul>Les hypothèses : A faire pour mettre en place l’entrée i : <ul><li>Chercher l’indice j du minimum à partir de i. </li></ul><ul><li>Echanger les éléments i et j. </li></ul>
  12. 12. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées Non triées et plus grandes i j <- échange ->
  13. 13. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées Non triées et plus grandes i j
  14. 14. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- propriété invariante <ul><li>Nous avions une certaine situation sur l’intervalle [ 0 .. i-1 ] : </li></ul><ul><ul><li>les éléments jusqu’à i-1 sont triés, </li></ul></ul><ul><ul><li>ceux qui suivent sont plus grands, mais pas triés. </li></ul></ul><ul><li>Nous retrouvons la même situation sur l’intervalle [ 0 .. i ] : </li></ul><ul><ul><li>les éléments jusqu’à i sont triés, </li></ul></ul><ul><ul><li>ceux qui suivent sont plus grands, mais pas triés. </li></ul></ul><ul><li>Cette propriété est donc invariante avec i, on l’appelle </li></ul>un invariant
  15. 15. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- le code for ( i=0 ; i<n-1 ; i++ ) {ind_min = i; for ( j=i+1 ; j<n ; j++ ) if ( t[j] < t[ind_min] ) ind_min = j; aux = t[i]; t[i] = t[ind_min]; t[ind_min] = aux; }
  16. 16. Les tris sur tableaux ----------------------------------------------------------------- Tri par échange --- la complexité <ul><li>Ont fait n-1 fois, pour i de 0 à n-2 : </li></ul><ul><li>Un parcours de [i..n-1]. </li></ul><ul><li>Il y a donc un nombre de lectures qui vaut : </li></ul>   (n-i) = 0 (n^2) i=0..n-2 Tri en complexité quadratique.
  17. 17. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées Non triées et quelconques i-1
  18. 18. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion - suite <ul><li>Les entrées de 0 à i-1 sont triées. </li></ul><ul><li>Elles sont plus petites que les entrées suivantes. </li></ul><ul><li>Les entrées à partir de l’indice i ne sont pas triées. </li></ul>Les hypothèses : A faire pour mettre en place l’entrée i : <ul><li>Si elle est plus grande que les précédentes : RIEN ! </li></ul><ul><li>Si elle est plus petite que certaines précédentes : l’insérer plus à gauche en décalant d’autres entrées. </li></ul>////////////////////////////////////////////
  19. 19. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées i-1 Plus grande : Rien à faire ! Non triées et quelconques
  20. 20. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- situation intermédiaire Valeurs 0 1 2 3 … n-1 Triées i-1 Non triées et quelconques Plus petit : L’insérer à gauche.
  21. 21. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- situation intermédiaire <ul><li>Vous avez vu qu’il y a à nouveau un INVARIANT ? </li></ul><ul><li>Lequel est-ce ?????????????????? </li></ul><ul><li>Les éléments déjà traités sont triés, </li></ul><ul><li>les autres sont dans le désordre et sans rapport particulier (ni plus grands, ni plus petits) aux premiers. </li></ul>
  22. 22. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- le code for ( i=1 ; i<n ; i++ ) {cont = 1; j = i; while ( j>0 && cont ) {if ( t[j] < t[j-1] ) echange(t, j-1, j); else cont = 0; j--; } }
  23. 23. Les tris sur tableaux ----------------------------------------------------------------- Tri par insertion --- la complexité <ul><li>Ont fait n-1 fois, pour i de 1 à n-1 : </li></ul><ul><li>Jusqu’à i échanges au maximum (peut-être moins). </li></ul><ul><li>Le nombre d’échanges peut donc atteindre : </li></ul>   i = 0 (n^2) i=1..n-1 Tri en complexité quadratique.
  24. 24. Les tris sur tableaux ----------------------------------------------------------------- Tri bulle Valeurs 0 1 2 3 … n-1 Situation normale Situation anormale : Une bulle
  25. 25. Les tris sur tableaux ----------------------------------------------------------------- Tri bulle : on échange l’ordre dans la bulle Valeurs 0 1 2 3 … n-1 Situation normale La bulle a disparu par échange
  26. 26. Les tris sur tableaux ----------------------------------------------------------------- Tri bulle : évolution des bulles Valeurs 0 1 2 3 … n-1 Régions qui peuvent être ignorées lors du prochain passage.
  27. 27. Les tris sur tableaux ----------------------------------------------------------------- Tri bulle - principe des algorithmes <ul><li>Tant qu’il y a des bulles, </li></ul><ul><li>on en choisit une et on la fait monter. </li></ul>L’idée : De nombreuses optimisations : <ul><li>Suivre une bulle et la faire monter aussi haut que possible. </li></ul><ul><li>Si au dernier passage la première bulle était ( i , i+1 ) , il ne peut y avoir de bulle avant ( i-1 , i ) au passage courant. </li></ul><ul><li>Faire alternativement monter et descendre des bulles. </li></ul><ul><li>… et puis d’autres trucs ! </li></ul>
  28. 28. Les tris sur tableaux ----------------------------------------------------------------- Tri bulle - complexité <ul><li>Le tri bulle a une complexité quadratique, car il existe des instances pour lesquels il faut 0 (n^2) échanges. </li></ul><ul><li>Par contre, pour de nombreuses instances, le nombre des échanges est bien plus petit. </li></ul><ul><li>Le tri bulle est bien adapté, comme d’autres tris, pour rétablir l’ordre dans un tableau presque trié (léger désordre produit par quelques insertions d’éléments par exemple). </li></ul>
  29. 29. Les tris sur tableaux ----------------------------------------------------------------- Différentes notions de complexité <ul><li>Complexité du meilleur cas : </li></ul><ul><ul><li>inintéressante, car ce n’est pas le cas typique. </li></ul></ul><ul><li>Complexité du cas moyen : </li></ul><ul><ul><li>intéressante, mais difficile à établir, </li></ul></ul><ul><ul><li>est-ce que mes instances du problème sont dans la moyenne ? </li></ul></ul><ul><li>Complexité du pire cas : </li></ul><ul><ul><li>donne une limite supérieure pour le nombre d’opérations, </li></ul></ul><ul><ul><li>celle-ci peut être atypique, </li></ul></ul><ul><ul><li>souvent assez facile à calculer, </li></ul></ul><ul><ul><li>mais, c’est la COMPLEXITE utilisée PAR DEFAUT. </li></ul></ul>
  30. 30. Les tris sur tableaux ----------------------------------------------------------------- Principe du tri par fusion <ul><li>Couper le tableau en deux (mentalement et de façon non violente), </li></ul><ul><li>trier récursivement chaque partie </li></ul><ul><li>et fusionner les deux parties triées (cf. cours d’Introduction à la programmation). </li></ul>
  31. 31. Les tris sur tableaux ----------------------------------------------------------------- Principe du tri par fusion Tri récursif des deux moitiés. Fusion des deux suites.
  32. 32. Les tris sur tableaux ----------------------------------------------------------------- Complexité du tri par fusion <ul><li>Soit f(n) la fonction de complexité pour trier n éléments. </li></ul><ul><li>Le découpage se fait en temps constant ou 0( n ), s’il y a copie. </li></ul><ul><li>Les deux appels récursifs nécessitent 2 * f( n/2 ). </li></ul><ul><li>La fusion se fait en 0( n ). </li></ul><ul><li>Donc f(n) = 0(n) + 2 * f(n/2) </li></ul><ul><li>= 0(n) + 2 * ( 0(n/2) + 2 * f(n/4) ) </li></ul><ul><li>= 2 * 0(n) + 2^2 * f(n/2^2) </li></ul><ul><li>= 3 * 0(n) + 2^3 * f(n/(2^3)) </li></ul><ul><li>= k * O(n) + 2^k * f(n/(2^k)) </li></ul><ul><li>= 0(n * log n) + 2^(log n) * f(n/(2^(log n))) </li></ul><ul><li>= 0(n * log n) car f(n/(2^(log n))) = f(1) = 0 </li></ul>Tri en complexité n log n.
  33. 33. Recherche dans des tableaux triés ----------------------------------------------------------------- <ul><li>On utilise l’ordre pour </li></ul><ul><ul><li>anticiper l’abandon dans une recherche linéaire, </li></ul></ul><ul><ul><li>guider la recherche : recherche par dichotomie. </li></ul></ul>petit grand moyen 0 n-1 (n-1)/2 X X < moyen Oui ! Chercher X dans [ 0 .. (n-1)/2- 1 ] Non ! Chercher X dans [ (n-1)/2 .. n-1 ]
  34. 34. Recherche dans des tableaux triés ----------------------------------------------------------------- Recherche par dichotomie - complexité <ul><li>1 test -> n/2 éléments. </li></ul><ul><li>2 tests -> n/4 éléments. </li></ul><ul><li>0( log n) tests -> 1 élément. </li></ul><ul><li>Est-ce bien lui ? Donc un test en plus. </li></ul><ul><li>Il existe des arguments théoriques (théorie de l’information) qui montrent que l’on ne peut pas faire mieux. </li></ul>
  35. 35. Recherche dans des tableaux triés ----------------------------------------------------------------- d = 0; f = n-1; While ( d < f ) if ( d == f-1 ) if ( x == t[d] ) f = d; else d = f; else {m = (d+f)/2; if ( x < t[m] ) f = m-1; else d = m; } Return ( x == t[d] ); Résultat. Cas général. Intervalle de 2 éléments. Initialisation.
  36. 36. Recherche dans des tableaux triés ----------------------------------------------------------------- Di-chotomie - Tri-chotomie - etc. <ul><li>Di-chotomie : </li></ul><ul><ul><li>1 test -> 2 intervalles de n/2 éléments. </li></ul></ul><ul><ul><li>Donc, 1 * log_2 (n) + 1 tests. </li></ul></ul><ul><li>Tri-chotomie : </li></ul><ul><ul><li>2 tests -> 3 intervalles de n/3 éléments. </li></ul></ul><ul><ul><li>Donc, 2 * log_3(n) + 1 tests. </li></ul></ul><ul><li>K-chotomie : </li></ul><ul><ul><li>k-1 tests -> k intervalles de n/k éléments. </li></ul></ul><ul><ul><li>Donc, (k-1) * log_k(n) + 1 tests. </li></ul></ul>Optimal si k = 2 ! ! !
  37. 37. Soyons critiques ! ----------------------------------------------------------------- <ul><li>Tableau trié : </li></ul><ul><ul><li>Recherche efficace  </li></ul></ul><ul><ul><li>Insertions et suppressions pénibles  </li></ul></ul><ul><li>Liste triée : </li></ul><ul><ul><li>Insertions et suppressions efficaces  </li></ul></ul><ul><ul><li>Recherche pénible  </li></ul></ul><ul><li>Hashage sur tableaux & arbres de recherche équilibrés : </li></ul><ul><ul><li>Toutes les opérations sont efficaces   </li></ul></ul>
  38. 38. Hashage ----------------------------------------------------------------- H : Eléments à stocker Indices d’un tableau INSEE(Marc Gengler) 1.61.01 … 1.61.01 … MG Attention, certaines cases du tableau contiennent des valeurs alors que d’autres sont vides.
  39. 39. Hashage ----------------------------------------------------------------- Une seule valeur par entrée du tableau ! ! ! <ul><li>Parfait, si H est injective </li></ul><ul><ul><li>Si H(x) = H(y) alors x = y. </li></ul></ul><ul><li>Souvent, H ne l’est pas : </li></ul><ul><ul><li>x = y mais H(x) = H(y) - il y a donc collision ! </li></ul></ul><ul><ul><li>Il y a différentes manières de gérer les collisions. </li></ul></ul>/
  40. 40. Hashage ----------------------------------------------------------------- <ul><li>Résolution locale des collisions : </li></ul><ul><ul><li>Petite recherche séquentielle dans une liste chainée. </li></ul></ul><ul><ul><li>Prendre la première case libre en séquence dans le tableau. </li></ul></ul><ul><ul><li>Et si on peut supprimer des éléments ????? Des éléments qui étaient responsables d’une collision viennent à disparaître ! </li></ul></ul><ul><li>Re-hashage : </li></ul><ul><ul><li>Si H(x) est déjà occupé on calcule H’(x) ou H(x+  ), etc. jusqu’à trouver une place. </li></ul></ul><ul><ul><li>Et si on peut supprimer des éléments ????? </li></ul></ul>La solution la plus fréquente : chainage des collisions !
  41. 41. Hashage ----------------------------------------------------------------- X X Y Y /
  42. 42. Hashage ----------------------------------------------------------------- <ul><li>Faits : </li></ul><ul><ul><li>La fonction de hashage doit être « uniforme » : pour des choix au hasard de données d , les indices H( d ) doivent être répartis le plus uniformément possible. </li></ul></ul><ul><ul><li>A ce moment, le taux de remplissage donne la proportion des collisions. </li></ul></ul><ul><li>Coût : </li></ul><ul><ul><li>Coût du calcul de H multiplié par le nombre moyen de collisions (re-hashage). </li></ul></ul><ul><ul><li>Coût du calcul de H plus le coût de la recherche dans la liste chainée. </li></ul></ul><ul><ul><li>… </li></ul></ul>

×