1.6 Algorithme et logarithme
1.6.1 Propriétés importantes
n log2n
lnn
Figure1.12 – Courbes des fonctionslnn,log2n, et√
n. Bien que toutes crois-santes, les fonctions logarithmiques ont un taux de croissance bien plus faible que√
n:1/nvs.1/
√ 2n.
lente dès quen>b. Pour quex= logbnaugmente de 1 par exemple, il faut multipliern parb, carbx+1=b·n. On y reviendra.
Sauf mention contraire, on supposera toujours que b >1 (cf. la définition 1.1), car l’équation n= bx n’a évidemment pas en général de solution pourx lorsque b = 1. Et donc log1nn’est pas défini.
1.6.1 Propriétés importantes
La propriété vraiment importante qu’on démontrera page39et qu’il faut retenir est : Proposition 1.1 Le nombre
logbn est le nombre de chiffres dans l’écriture de n−1 en base b. C’est aussi le plus petit nombre de fois qu’il est nécessaire de divisernparb pour obtenir un ou moins.
Comme expliqué précédemment, il faut queb >1.
Donc le logarithme denest un peu la « longueur » den. Par exemple :
• Pourb= 10 etn= 103. Alorsn−1 = 999 s’écrit sur3chiffres décimaux.
• Pourb= 2 etn= 24. Alorsn−1 = 15 = 1111deuxs’écrit sur4chiffres binaires.
• Pourb= 2 etn= 13. Alorsn−1 = 12 = 1100deuxs’écrit sur
log2(12)
=d3.5849...e= 4chiffres.
Comme on peut facilement « éplucher » les chiffres d’un nombrenécrit en baseben répétant l’opérationn7→ bn/bc, grâce à l’instructionn /= bqui enCeffectue la division euclidienne, on déduit de la première partie de la proposition1.1le code suivant pour calculer
logbn, soit le nombre de chiffres pour écriren−1 en baseb:
38 CHAPITRE 1. INTRODUCTION
[Exercice. Modifiez le code précédant permettant d’afficher les chiffres de n−1 écrit en baseb.]
Attention ! Contrairement à ce que semble affirmer la proposition1.1, une boucle en langageCcomme
while(n>1) n /= b;
n’est pas répétéek=
logbn
fois avant de sortir avecn61. Par exemple, pourn= 6 etb = 2, le test(n>1) n’est vrai que deux fois. La raison est que cette boucle n’effectue pas l’opérationn7→n/bk, mais plutôt
n 7→ b. . .bbn/bc/bc · · ·/bc
| {z }
kfois
.
Évidemment, quandnest une puissance entière deb, c’est bien la même chose. On peut montrer54que, malgré les nombreuses parties entières, le résultat n’est pas très loin de n/bk. C’est en fait égal à 1 près.
Pour démontrer la proposition 1.1, on va se servir de la propriété qui est elle aussi très importante à connaître car elle revient (très) souvent : la somme desn+ 1 premiers termes d’une suite géométrique (qi)i∈Nde raison55q,1 :
s’obtient trivialement depuis d’équation (1.5) en factorisant par le premier terme «qm».
On retient dans cette dernière formule que «qm» est le premier terme et «n−m+ 1 » le nombre de termes de la somme. Notons d’ailleurs que la formule (1.5) est triviale56 à démontrer par récurrence, le problème étant de se soutenir de la formule à démontrer.
54. Cf. le fait 6.1 du chapitre 6 du cours d’Algorithmique distribuée.
55. La formule ne marche pas siq= 1. Bien évidemment, dans ce casPn
i=01i=n+ 1.
56. C’est lié au fait que [(qn+1−1)/(q−1)] +qn+1= (qn+1−1 +q·qn+1−qn+1)/(q−1) = (qn+2−1)/(q−1).
1.6. ALGORITHME ET LOGARITHME 39 Par exemple 1 + 2 + 4 + 8 +· · ·+ 2h= (2h+1−1)/(2−1) = 2h+1−1 = 111. . .1deuxdonne le nombre de sommets dans un arbre binaire complet de hauteurh. On a aussi 1+10+100+
·+ 10h= (10h+1−1)/9 = 999. . .9dix/9 = 111. . .1dix. Notons que dans ces deux exemples, le résultat est un nombre qui s’écrit avechchiffres identiques qui sont des uns.
Preuve de la proposition1.1. Le nombrek de divisions parb à partir de n nécessaire pour avoir 1 ou moins est le plus petit entierktel quen/bk 61. Par la croissance de la fonction logarithme,
n
bk 6 1 ⇔ n 6 bk ⇔ logbn 6 k . Le plus petit entierkvérifiantk>logbnest précisémentk=
logbn
qui est donc l’entier recherché.
Montrons maintenant que
logbnest aussi le nombre de chiffres pour écriren−1 en baseb. On va d’abord montrer que pour tout entierk>1, le nombrebk−1 s’écrit aveck chiffres57. D’après la formule (1.5) avecq=betn=k−1, on a :
bk−1 = (b−1)·(1 +b+b2+· · ·+bk−1)
= b−1 bk−1+ b−1 bk−2+· · ·+ b−1 b2+ b−1 b+ b−1
Cette dernière somme comprendktermes de la forme (b−1)·bi qui représentent pré-cisément les k chiffres de l’entier bk −1 écrit en base b. Chacun de ces chiffres vaut d’ailleursb−1 ce qui montre que bk−1 est le plus grand nombre qui s’écrit en baseb aveckchiffres. Il suit quebk s’écrit avec k+ 1 chiffres.
Soitkl’entier tel quebk−1< n6bk. On vient de voir quebk−1 s’écrit aveckchiffres.
Donc n−1 6 bk −1 s’écrit avec au plus k chiffres. Mais on a vu aussi que bk s’écrit avec k+ 1 chiffres. Donc n−1 > bk−1 s’écrit avec au moins (k−1) + 1 = k chiffres.
Il suit que n−1 s’écrit avec exactement k chiffres. Par la croissance du logarithme, bk−1 < n6bk ⇔k−1<logbn6k, ce qui revient à dire quek=
logbn
. Cela termine la
preuve de la proposition1.1. 2
Notons que la proposition 1.1 est encore une autre façon de se convaincre que la fonction logbncroît très lentement. En effet, log10(100) = 2 et log10(1 000 000 000) = 9 seulement.
La fonction logarithme possède d’autres propriétés importantes découlant de la dé-finition1.1, comme celles-ci :
57. Un exemple qui ne démontre rien : 103−1 = 999 s’écrit sur 3 chiffres décimaux.
40 CHAPITRE 1. INTRODUCTION
Proposition 1.2
• logbn= (logan)/(logab) pour toute basea >1.
• logb(x·y) = logbx+ logby pour toutx, y >0.
• logb(nα) =αlogbn pour toutα>0.
• logbn nα pour toute constanteα >0.
Pour le premier point. Calculons le nombre blogan/logab en remplaçant la première occurrence debparb=alogab, par définition de logab. Il vient :
blogan/logab =
alogablogan/logab
= a(logab)(logan)/logab = alogan = n . On a donc à la foisblogan/logab=netn=blogbn, c’est donc que logan/logab= logbn.
Le premier point a pour conséquence que lorsquebest une constante devantn (c’est-à-dire b=O(1)), les fonctions logbn, log2n, log10n ou même comme on va le voir lnn, sont toutes équivalentes à une constante multiplicative près. On a par exemple log2n= log10n/log102≈3.32 log10net lnn= log2n/log2e≈0.69 log2n.
Dans les notations asymptotiques faisant intervenir des logarithmes, on ne précise pas la base (si celle-ci est une constante). On note donc simplementO(logn) au lieu deO(log2n),O(log10n) ou encoreO(logπn).
De la même manière, on n’écrit jamais quelque chose du typeO(2n+1) ouO(3 logn), l’objectif de la notation asymptotique étant de simplifier les expressions. La remarque s’applique aussi aux notationsΩetΘ.
Pour le deuxième point. D’une partx·y=blogb(x·y)par définition de logb(x·y). D’autre part
blogbx+logby = blogbx·blogby = x·y = blogb(x·y)
et donc logbx+ logby= logb(x·y). C’est la propriété fondamentale des fonctions loga-rithmes de transformer les produits en sommes.
Pour le troisième point. Il peut se déduire directement du précédent seulement si α est un entier. L’argument est cependant similaire aux précédents. D’une part nα = blogb(nα) par définition de logb(nα). D’autre part
nα =
blogbnα
= b(logbn)α = bαlogbn et doncblogb(nα)=bαlogbn. On a donc que logb(nα) =αlogbn.
1.6. ALGORITHME ET LOGARITHME 41 Pour le quatrième point. On note «f(n)g(n) » pour dire quef(n)/g(n)→0 lorsque n→ +∞. C’est pour dire que f(n) est significativement plus petite queg(n). En math, on le note aussif(n) =o(g(n)). En utilisant la croissance de la fonction logarithme et le changement de variableN= logblogbn:
Commebetαsont des constantes, logbα=O(1) est aussi une constante (éventuellement négative siα <1). Lorsquendevient grand,Ndevient grand aussi. Clairement logbN N−O(1), la « longueur » deN (cf. la proposition1.1) étant significativement plus petite queN quandN est grand. D’où logbnnα. Notez que ce point implique par exemple que log2n√
n(α= 0.5).
[Question. Sur la figure 1.12, où se situerait la fonction log10n pour n est assez grand ?]