|
4 | 4 | Survol algorithmique
|
5 | 5 | ====================
|
6 | 6 |
|
7 |
| -Il est facile de caler un modèle statistiques lorsque les données sont propres |
8 |
| -et de taille raisonnable. Ce n'est quasiment jamais le cas. |
9 |
| -On a besoin de nettoyer ou de transformer les données. On a besoin |
10 |
| -de réduire le temps de calcul d'un algorithme car il est inexploitable en l'état. |
11 |
| -Pour ces deux raisons, il est utile de connaître quelques algorithmes |
12 |
| -afin d'avoir d'avoir des idées. On a besoin d'avoir un moyen rapide, visuelle |
13 |
| -et efficace de comparer deux résultats. |
| 7 | +L'algorithmie est une partie des mathématiques. On part toujours d'un état |
| 8 | +initial pour arriver après une série d'opérations connues à un état final. |
| 9 | +Cette série dépend de l'état initial. Elle peut inclure de l'aléatoire. |
| 10 | +On parle d'algorithme lorsqu'on arrive à démontrer que la séquence |
| 11 | +d'opération qu'il produit mène toujours à l'état final souhaité |
| 12 | +quel que soit l'état initial. Il existe une grande variété de problèmes |
| 13 | +déjà résolus qu'il est utile de connaître. C'est autant d'outils disponibles |
| 14 | +pour créer ses propres algorithmes. |
14 | 15 |
|
15 | 16 | Ordres de grandeur
|
16 | 17 | ++++++++++++++++++
|
@@ -119,7 +120,7 @@ Catalogue d'algorithmes
|
119 | 120 | * `problème d'ordonnancement <http://fr.wikipedia.org/wiki/Th%C3%A9orie_de_l'ordonnancement>`_ **algo**
|
120 | 121 | * Permutations
|
121 | 122 | * `Sattolo's algorithm <https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Sattolo's_algorithm>`_ **algo**
|
122 |
| -* Problème non `NP-complet <http://fr.wikipedia.org/wiki/Liste_de_probl%C3%A8mes_NP-complets>`_ |
| 123 | +* Problème non :epkg:`NP-complet` |
123 | 124 | * `Problème du voyageur de commerce <http://fr.wikipedia.org/wiki/Probl%C3%A8me_du_voyageur_de_commerce>`_ **algo**
|
124 | 125 | (ou `Graphe Hamiltonien <http://fr.wikipedia.org/wiki/Graphe_hamiltonien>`_),
|
125 | 126 | lire `Solution of a Large-Scale Traveling-Salesman Problem <http://www.cs.uleth.ca/~benkoczi/OR/read/tsp-dantzig-fulkerson-johnson-54.pdf>`_.
|
@@ -225,17 +226,88 @@ le tri `heapsort <https://github.com/nryoung/algorithms/blob/master/algorithms/s
|
225 | 226 | Problèmes NP-complets
|
226 | 227 | +++++++++++++++++++++
|
227 | 228 |
|
| 229 | +On distingue trois classes de problèmes |
| 230 | +*P*, *NP*, *NP-complet*. |
| 231 | + |
| 232 | +**coût** |
| 233 | + |
| 234 | +**P** |
| 235 | + |
| 236 | +Un problème appartient à la |
| 237 | +`classe P <https://fr.wikipedia.org/wiki/P_(complexit%C3%A9)>`_ |
| 238 | +s'il peut être décidé en temps polynômial. |
| 239 | + |
| 240 | +**NP** |
| 241 | + |
| 242 | +Un problème de décision est dans |
| 243 | +`NP <https://fr.wikipedia.org/wiki/NP_(complexit%C3%A9)>`_ |
| 244 | +s'il est décidé par une |
| 245 | +`machine de Turing non déterministe <https://fr.wikipedia.org/wiki/Machine_de_Turing_non_d%C3%A9terministe>`_ |
| 246 | +en temps polynomial par rapport à la taille de l'entrée. |
| 247 | +Cela implique que pour un problème *A*, il est possible |
| 248 | +de vérifier qu'un *mot m* est solution de *A* en temps polynomial. |
| 249 | + |
| 250 | +**NP-complet** |
| 251 | + |
| 252 | +Un problème :epkg:`NP-complet` |
| 253 | +est un problème qui n'admet pas d'algorithmes capables de trouver une solution |
| 254 | +en un temps polynomial. Plus précisément, pour deux problèmes *A* et *B* de cette classe, |
| 255 | +il existe une transformation (ou *réduction*) *f* qui transforme |
| 256 | +le problème *A* en *B*. |
| 257 | + |
| 258 | +**BPP** |
| 259 | + |
| 260 | +La classe `BPP <https://fr.wikipedia.org/wiki/BPP_(complexit%C3%A9)>`_ |
| 261 | +est un objet de la théorie de la complexité, en informatique théorique. |
| 262 | +C'est une classe de problèmes de décision qui peut être définie avec des |
| 263 | +`machines de Turing probabilistes <https://fr.wikipedia.org/wiki/Machine_de_Turing_probabiliste>`_. |
| 264 | +L'acronyme BPP vient de Bounded-error Probabilistic Polynomial time. |
| 265 | + |
| 266 | +**P=NP ?** |
| 267 | + |
| 268 | +C'est un problème encore irrésolu : |
| 269 | +`Problème P = NP <https://fr.wikipedia.org/wiki/Probl%C3%A8me_P_%3D_NP>`_. |
| 270 | + |
| 271 | +**Problème NP complets** |
| 272 | + |
228 | 273 | * `21 problèmes NP-complet de Karp <https://fr.wikipedia.org/wiki/21_probl%C3%A8mes_NP-complets_de_Karp>`_
|
229 | 274 | * `Liste de problèmes NP complets <https://fr.wikipedia.org/wiki/Liste_de_probl%C3%A8mes_NP-complets>`_
|
230 | 275 | (`en <https://en.wikipedia.org/wiki/List_of_NP-complete_problems>`_)
|
231 |
| -* :ref:`l-np-complets` |
232 | 276 |
|
233 |
| -.. index:: morphisme |
234 | 277 |
|
235 |
| -Un peu de morphisme parce que ça m'a toujours fasciné : |
| 278 | +Idée pour démonstrer qu'un problème est NP-complet |
| 279 | +++++++++++++++++++++++++++++++++++++++++++++++++++ |
| 280 | + |
| 281 | +Une preuve complète est donnée dans le cours |
| 282 | +`Logique, modèles, calculs (INF 423) |
| 283 | +<https://www.enseignement.polytechnique.fr/informatique/INF423/uploads/Main/poly-good.pdf>`_. |
| 284 | + |
| 285 | +**1** |
| 286 | + |
| 287 | +L'idée est toujours la même : il faut partir d'un problème NP-complet connu |
| 288 | +et le réduire de façon polynomial au problème *P* dont on cherche à démontrer qu'il |
| 289 | +est NP-complet. La *réduction* est une transformation d'un problème |
| 290 | +*A* en *P* de telle sorte qu'une solution problème *A* |
| 291 | +puisse être transformé en une solution du problème *P* et réciproquement. |
236 | 292 |
|
237 |
| -* `Efficient and practical tree preconditioning for solving Laplacian systems <http://www.lix.polytechnique.fr/~maks/papers/SEA_2015_draft.pdf>`_ |
238 |
| -* `A Survey on Data-driven Dictionary-based Methods for 3D Modeling <http://www.lix.polytechnique.fr/~maks/papers/dictionary_survey.pdf>`_ |
| 293 | +**2** |
| 294 | + |
| 295 | +Il faut un premier problème NP-complet pour lequel il faut démontrer la NP-complétude. |
| 296 | +C'est le théorème de `Stephen Cook <https://fr.wikipedia.org/wiki/Stephen_Cook>`_ : |
| 297 | +le problème `SAT <https://fr.wikipedia.org/wiki/Probl%C3%A8me_SAT>`_ est NP-complet. |
| 298 | +On peut montrer que les problème SAT et |
| 299 | +`3-SAT <https://fr.wikipedia.org/wiki/Probl%C3%A8me_SAT#3-SAT>`_ sont équivalents. |
| 300 | + |
| 301 | +**3** |
| 302 | + |
| 303 | +Beaucoup de problèmes se présentent sous la forme d'une optimisation. |
| 304 | +Or *SAT* est un problème de décision : existe-t-il un point de |
| 305 | +:math:`\acc{0,1}^N` qui vérifie une clause logique : |
| 306 | +:math:`\vee_k ( y_{1k} \wedge ... \wedge y_{n_k k} )` |
| 307 | +avec :math:`y_{ik}` est soit :math:`x_i` soit :math:`\neg x_i` ? |
| 308 | +Pour passer de l'un à l'autre, on transforme le problème d'optimisation |
| 309 | +en un problème de décision : existe-t-il une solution dont l'évaluation |
| 310 | +est inférieure ou supérieur à un certain seuil ? |
239 | 311 |
|
240 | 312 | Liens
|
241 | 313 | +++++
|
@@ -276,6 +348,13 @@ Livres
|
276 | 348 | (`documentation <http://jilljenn.github.io/tryalgo/>`_)
|
277 | 349 | et d'un site web `Résolution de problèmes algorithmiques <http://tryalgo.org/>`_
|
278 | 350 |
|
| 351 | +Des applications possibles : |
| 352 | + |
| 353 | +* `Efficient and practical tree preconditioning for solving Laplacian systems |
| 354 | + <http://www.lix.polytechnique.fr/~maks/papers/SEA_2015_draft.pdf>`_ |
| 355 | +* `A Survey on Data-driven Dictionary-based Methods for 3D Modeling |
| 356 | + <http://www.lix.polytechnique.fr/~maks/papers/dictionary_survey.pdf>`_ |
| 357 | + |
279 | 358 | Pour s'entraîner
|
280 | 359 | ++++++++++++++++
|
281 | 360 |
|
|
0 commit comments