• Aucun résultat trouvé

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)iNde 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 «nm+ 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+11)/(q1)] +qn+1= (qn+11 +q·qn+1qn+1)/(q1) = (qn+21)/(q1).

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+· · ·+bk1)

= b−1 bk1+ b−1 bk2+· · ·+ 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 quebk1< 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 > bk1 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, bk1 < n6bkk−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 : 1031 = 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 NO(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 ?]