• Aucun résultat trouvé

1.7 Morale

• En informatique les problèmes sont définis par la relation entre les entrées (on parle aussi d’instances) et les sorties (décrites généralement sous la forme d’une question). Attention ! Si un programme peut boucler sur certaines entrées, un al-gorithme ne peut pas (par définition) boucler sur certaines instances.

• Les algorithmes résolvent des problèmes, tandis que les programmes en donnent une implémentation. Une instance particulière peut être résolue par un pro-gramme sans qu’un algorithme existe pour le problème. Par exemple, le problème de laHalten’a pas d’algorithme. Pourtant, on connaît la réponse pour beaucoup de ses instances.

• Quand on programme enC un algorithme qui résout un problème donné, les en-trées et sorties du problème (en fait leurs domaines de valeurs possibles) sont partiellement capturées par le prototype de la fonction qui implémente cet al-gorithme. Par exemple,double sqrt(double) est le prototype de la fonction de la librairie standardCcalculant le réel positif√

xpour tout réel positifx. Ici un « réel positif » est seulement partiellement capturé par le typedouble.

• Pour certains problèmes on peut essayer de trouver une formule close liant les paramètres d’entrées aux sorties, comme par exemple la formule liant les coeffi-cientsa, b, cd’un polynôme de degré deux à ses deux racines. On peut aussi tenter la recherche exhaustive (oubrute-force), une technique qui consiste à essayer tous les résultats possibles.

• Mais pour la plupart des problèmes intéressants il n’existe pas de telles formules.

Et pour certains on ne peut envisager non plus de recherche exhaustive, car, par exemple, l’ensemble de tous les résultats envisageables n’est pas de taille bornée (par une fonction de la taille de l’entrée63). Pour certains problèmes il n’existe carrément pas d’algorithmes de résolution. Et ce n’est pas parce qu’on ne les a pas trouvés. C’est parce qu’on peut démontrer qu’il n’existe pas de tels algorithmes.

Inutile alors d’essayer de trouver une fonction C, un programme ou une IA les résolvant. Ces problèmes là sont indécidables, comme par exemple le problème de laHalte.

• Les problèmes de décisions très simples ne servent pas forcément à résoudre des problèmes pratiques (les problèmes pratiques sont souvent bien plus complexes).

Ils servent en revanche à montrer que le problème réel qui nous intéresse est bien trop difficile, car il contient un problème d’école (de décision) réputé difficile comme cas particulier.

• La complexité est une mesure qui sert à comparer les algorithmes entres eux. Elle permet d’écarter rapidement un algorithme qui serait, quelle que soit son

implé-63. Par exemple, le problème de savoir si l’on peut dessiner un graphe sur le plan sans croisement d’arête ne se prête pasa priorià une recherche exhaustive car le nombre de dessins possibles n’est pas de taille bornée :R2c’est grand ! même pour un graphe ànsommets. Il n’empêche, il existe des algorithmes linéaires pour le résoudre.

46 BIBLIOGRAPHIE mentation, une perte de temps car de complexité (en temps ou en espace) trop importante. Ainsi, un programme qui serait amené à exécuter 1018 opérations élémentaires sur processeur 1 GHz n’a aucun intérêt, car il prendrait plus de 30 ans. En pratique, un programme de complexité en temps trop importante aura le même comportement qu’un programme qui boucle (et donc erroné).

• L’analyse de complexité, aussi précise soit-elle, ne change en rien l’efficacité d’un programme. Cette analyse, si elle est fine, sert à comprendre où et comment est utilisée la ressource mesurée (temps ou espace). Il y des programmes qui

« marchent » sans que l’on sache pourquoi, faute de savoir les analyser.

• La complexité s’exprime toujours en fonction de la taille des entrées (générale-ment n). C’est un nombre qui n’a pas d’unité. Il s’agit d’un nombre d’opérations élémentaires (=temps) ou de mots mémoires (=espace). Certaines instructions de certains langages, comme printf(), memcpy() ou calloc() de la librairie standard C, ne sont pas élémentaires.

• Il n’y a pas de notation dédiée à la complexité en temps ou en espace. Les no-tations O,Ω,Θ n’ont pas de rapport direct avec la complexité. Ce sont des nota-tions pour alléger les expressions mathématiques portant sur des valeurs asymp-totiques. Elles évitent d’écrire∃n0∈N,c >0,∀n>n0, ...

• Il est difficile de calculer la complexité de manière exacte. On utilise plutôt des ordres de grandeurs et on l’évalue lorsque la taillen est « suffisamment grande » (n → +∞). On utilise alors souvent les notations asymptotiques pour simplifier l’écriture, notamment O,Ω,Θ. Ces notations sont parfois sources de pièges qu’il est bon de connaître.

• Le logarithme en basebden(=logbn) est une fonction à connaître, surtout lorsque b= 2, car elle est omniprésente en algorithmique. Et ce n’est pas le président

- du Conseil Scientifique de la Société Informatique de France (SIF) qui me contredira ! (voir l’affiche ci-après et lavidéo).

Bibliographie

[CEH+19] K. Cordwell, A. Epstein, A. Hemmady, S. J. Miller, E. Palsson, A. Sharma, S. Steinerberger, and Y. N. Truong Vu, On algorithms to calculate ingeter complexity, Integers, 19 (2019), pp. 1–13.

[Cha18] T. M. Chan, More logarithmic-factor speedups for 3SUM, (median,+)-convolution, and some geometric 3SUM-hard problems, in 29th Symposium on Discrete Algorithms (SODA), ACM-SIAM, 2018, pp. 881–897. doi : 10.1137/1.9781611975031.57.

[DDU+10] E. D. Demaine, M. L. Demaine, R. Uehara, T. Uno, and Y. Uno,UNO is hard, even for a single player, in 5th International Conference Fun with Algorithms

BIBLIOGRAPHIE 47

(FUN), vol. 6099 of Lecture Notes in Computer Science, Springer, June 2010, pp. 133–144. doi:10.1007/978-3-642-13122-6_15.

[DVW16] E. D. Demaine, G. Viglietta, and A. Williams,Super mario bros. is harder/ea-sier than we thought, in 8th International Conference Fun with Algorithms (FUN), vol. 49 of LIPIcs, June 2016, pp. 13 :1–13–14. doi : 10.4230/LI-PIcs.FUN.2016.13.

[FGKT16] K. Ford, B. Green, S. Konyagin, and T. Tao, Large gaps between primes, Annals of Mathematics, 183 (2016), pp. 935–974. doi : 10.4007/an-nals.2016.183.3.4.

[GRS14] E. K. Gnang, M. Radziwiłł, and C. Sanna, Counting arithmetic formu-las, European Journal of Combinatorics, 47 (2014), pp. 40–53. doi : 10.1016/j.ejc.2015.01.007.

[Han04] Y. Han,Deterministic sorting inO(nlog logn)time and linear space, Journal of Algorithms, 50 (2004), pp. 96–10. doi:10.1016/j.jalgor.2003.09.001. Also appears in STOC ’02.

[HT02] Y. Han and M. Thorup, Integer sorting in O(np

log logn) expected time and linear space, in 43rd Annual IEEE Symposium on Foundations of Computer Science (FOCS), IEEE Computer Society Press, November 2002, pp. 135–

144. doi:10.1109/SFCS.2002.1181890.

[May16] J. Maynard,Large gaps between primes, Annals of Mathematics, 183 (2016), pp. 915–933. doi:10.4007/annals.2016.183.3.3.

[MP53] K. Mahler and J. Popken, On a maximum problem in arithmetic (dutch), Nieuw Archief voor Wiskunde, 3 (1953), pp. 1–15.

48 BIBLIOGRAPHIE [San15] C. Sanna, On the number of arithmetic formulas, International Journal of Number Theory, 11 (2015), pp. 1099–1106. doi : 10.1142/S1793042115500591.

[Sch18] P. Schorer,A solution to the3x+ 1problem, June 2018.

[Ste14] S. Steinerberger, A short note on integer complexity, Contributions to Dis-crete Mathematics, 9 (2014), pp. 63–69. doi:10.11575/cdm.v9i1.62145.

[Tan15] I. J. Taneja,Single digit representations of natural numbers, RGMIA Research Report Collection, 18 (2015), pp. 1–55.

[Tao20] T. Tao,Almost all orbits of the Collatz map attain almost bounded values, Tech.

Rep.1909.03562v3 [math.PR], arXiv, June 2020.

[Tho97] M. Thorup,Randomized sorting in O(nlog logn) time and linear space using addition, shift, and bit-wise boolean operations, in 8th Symposium on Discrete Algorithms (SODA), ACM-SIAM, January 1997, pp. 352–359.

[Tho02] M. Thorup,Randomized sorting in O(nlog logn) time and linear space using addition, shift, and bit-wise boolean operations, Journal of Algorithms, 42 (2002), pp. 205–230. doi:10.1006/jagm.2002.1211.

CHAPITRE

2 Partition d’un entier

Sommaire

2.1 Le problème . . . 49 2.2 Formule asymptotique . . . 51 2.3 Approche exhaustive . . . 54 2.4 Récurrence . . . 55 2.5 Programmation dynamique . . . 65 2.6 Mémorisation paresseuse . . . 69 2.7 Morale . . . 75 Bibliographie . . . 77

Mots clés et notions abordées dans ce chapitre :

• nombre de partitions

• formule asymptotique

• récurrence, arbre des appels

• programmation dynamique

• mémorisation paresseuse (mémoïsation)

2.1 Le problème

On s’intéresse à toutes les façons de partitionner un ensemble d’éléments indistin-guables. Par exemple, il y a cinq façons de partager un ensemble de 4 billes :

• : 1 paquet de 4 billes ;

• : 1 paquet de 3 billes et 1 paquet d’1 bille ;

50 CHAPITRE 2. PARTITION D’UN ENTIER

• : 2 paquets de 2 billes ;

• : 1 paquet d’2 billes et 2 paquets d’1 bille ;

• : 4 paquets d’1 bille.

Le nombre de partitions d’un ensemble ne dépend pas de ses éléments a proprement parlé, mais de sacardinalité. En effet, les éléments étant indistinguables, c’est la même chose que l’ensemble contiennent des billes ou des choux.

Rappelons que lacardinatitéd’un ensemble finiXest son nombre d’éléments. Elle est notée|X|ou parfois card(X).

Les différentes partitions d’un ensemble peuvent être vues comme les différentes façons d’écrire la cardinalité de l’ensemble en somme de cardinalité de ses parts non vides. La cardinatlité étant un entier, on parle donc plutôt dePartition d’un entier.

Pour notre exemple précédent, les cinq partages possibles d’un ensemble de 4 billes reviennent à écrire :

4 = 4

= 3 + 1

= 2 + 2

= 2 + 1 + 1

= 1 + 1 + 1 + 1

Les éléments étant indistinguables, la somme 1 + 3 représente la même partition que 3 + 1. Par habitude on écrit les sommes par ordre décroissant des parts.

Pour simplifier un peu le problème, on va se contenter de compter le nombre de partitions d’un entiern, et on noterap(n) ce nombre. Les premières valeurs sont :

n 1 2 3 4 5 6 7 8 9 10 ... 100

p(n) 1 2 3 5 7 11 15 22 30 42 ... 190 569 292 Et le problème précis est :

Partition d’un entier Instance: Un entiern >0.

Question: Calculerp(n), le nombre de partitions den, soit le nombre de façons de partitionner un ensemble denéléments indistinguables en sous-ensembles non vides.

Ce nombre de partitions intervient, par exemple, dans le nombre d’expressions arithmétiques de valeurn(avec un nombre restreint de symboles et en tenant compte de l’associativité et de la commutativité), cf. la formule en 24n/24+O(

n) page18. Contraire-ment à la suitefc(n) du chapitre précédent, la suitep(n) est richement documentée par

2.2. FORMULE ASYMPTOTIQUE 51