Cyril Gavoille LaBRI
Laboratoire Bordelais de Recherche en Informatique, Université de Bordeaux
[email protected]
16 août 2020 – 175 pages –
c b n a
Ce document est publié sousLicence Creative Commons « Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International (CC BY-NC-SA 4.0) ».Cette licence vous autorise une utilisation libre de ce document pour un usage non com- mercial et à condition d’en conserver la paternité. Toute version modifiée de ce document doit être placée sous la même licence pour pouvoir être diffusée.https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr
ii
Objectifs : Introduire, aux travers d’exemple de problèmes simples, diverses ap- proches algorithmiques, les programmer et les tester sur machines. Les approches abor- dées sont :
• Formule close ;
• Exhaustive (Brute-Force) ;
• Récursive ;
• Programmation dynamique ;
• Heuristique ;
• Approximation ;
• Gloutonne (Greedy) ;
• Diviser pour régner (Divide-and-Conquer).
Faute de temps, les approches suivantes ne seront pas abordées :
• Probabiliste ;
• Programmation linéaire ;
• Branchement et élagage (Branch-and-Bound) ;
• Solveur SAT.
Nous programmerons enCavec un tout petit peu d’OpenGL/SDL pour plus de gra- phismes. Les concepts techniques et les objets que l’on croisera seront : les algorithmes, la complexité, les graphes, les distances, les points du plan, ...
Pré-requis : langageC, notions algorithmiques, notions de graphes
Quelques ouvrages de référence :
Programmation efficace
Christoph Dürr et Jill-Jênn Vie Ellipses 2016
The Algorithm Design Manual (2nd edition) Steven S. Skiena
Springer 2008
iv
Algorithm Design
Robert Kleinberg et Éva Tardos Pearson Education 2006
Introduction à l’algorithmique (2e édition)
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein
Dunod 2001
Algorithms (4th edition)
Robert Sedgewick et Kevin Wayne Addison-Wesley 2011
Algorithms JeffErickson
Creative Commons 2019
1 Introduction 1
1.1 Tchisla . . . 2
1.2 Des problèmes indécidables . . . 5
1.3 Approche exhaustive . . . 9
1.4 Rappels sur la complexité . . . 18
1.4.1 Compter exactement? . . . 20
1.4.2 Pour résumer . . . 24
1.5 Notations asymptotiques . . . 24
1.5.1 Exemples et pièges à éviter . . . 25
1.5.2 Complexité d’un problème . . . 27
1.5.3 Sur l’intérêt des problèmes de décision . . . 28
1.6 Algorithme et logarithme . . . 30
1.6.1 Propriétés importantes . . . 32
1.6.2 Et la fonction lnn? . . . 36
1.6.3 Tchisla et logarithme . . . 37
1.7 Morale . . . 39
Bibliographie . . . 42
2 Partition d’un entier 43 2.1 Le problème . . . 43
2.2 Formule asymptotique . . . 44
2.3 Approche exhaustive . . . 47
2.4 Récurrence . . . 48
2.5 Programmation dynamique . . . 54
2.6 Mémorisation paresseuse . . . 57