Vous êtes sur la page 1sur 17

A VANT - PROPOS

Cest en forgeant quon devient forgeron... Ce vieil adage, dont les hommes ont us depuis la nuit des temps, est mis dans cet ouvrage au service des tudiants de licence et de premire anne de master de mathmatiques et dinformatique, des lves-ingnieurs et de toute autre personne souhaitant goter les joies et matriser les dicults de lalgorithmique. Au cur de linformatique, cette science est celle de la conception de mthodes ecaces pour rsoudre des problmes laide dun ordinateur. Elle dnit des outils gnraux permettant de rpondre aux questions suivantes : Sur quelle proprit mathmatique dun problme peut-on tablir une mthode de rsolution ? tant donn un algorithme, rsout-il le problme pos ? Lorsque lon dispose de deux mthodes de rsolution direntes, laquelle est prfrable ? Lalgorithmique a donn lieu de nombreux ouvrages remarquables depuis plus de trente ans, sur lesquels se fondent les enseignements dispenss dans les universits et coles dingnieurs, et dont nous donnons une liste non exhaustive la n de cet ouvrage. Lexprience des auteurs, enseignants chevronns dans direntes universits, les a depuis longtemps confronts aux dicults de leurs tudiants face cette matire. Celles-ci semblent de plusieurs ordres : il est ncessaire de pouvoir exprimenter les algorithmes sur dirents exemples pour en comprendre intuitivement le fonctionnement ;

apprendre des lments de cours implique de pouvoir refaire, au besoin, les dmonstrations qui y ont t prsentes, de les rdiger ; les algorithmes manipulent des entits qui voluent dans le temps, et cela ajoute une dimension inhabituelle aux raisonnements mathmatiques ncessaires pour les prouver et analyser leurs performances ;

Dunod. La photocopie non autorise est un dlit.

lapprentissage souvent simultan dun langage de programmation peut parfois ajouter des dicults de comprhension dues la syntaxe propre du langage. Cest pour rpondre ces dicults que les auteurs ont form le projet de cet ouvrage, partir dexercices progressifs conus lors de leurs annes de pratique, et utiliss dans le cadre de travaux dirigs, dexamens, ou pour des devoirs de plus grande envergure. Louvrage a pour objectif daider ltudiant dans son apprentissage de la conception et de lanalyse dalgorithmes en insistant sur le raisonnement et sa rdaction, en vue dcrire dans le langage de son choix des programmes ecaces. Si la plupart des ouvrages de cours dalgorithmique contiennent des noncs dexercices, peu sont corrigs. Cest donc lune des originalits de ce livre que de

VII

Avant-propos

proposer une correction entirement rdige, rigoureuse et complte de chaque question. On y trouvera, pour chaque notion, des exercices visant la comprhension du cours, qui permettent dappliquer un algorithme connu des donnes numriques, ou de redmontrer, partir dlments de base dont les dnitions sont explicites, les proprits de certains algorithmes du cours dcomposes en questions progressives. On y trouvera aussi des exercices qui enrichissent des algorithmes classiques de nouvelles fonctionnalits ou qui permettent de les intgrer dans des applications originales. Concernant la programmation, le parti pris de cet ouvrage est demployer, pour la rdaction des algorithmes, un pseudo-langage impratif, plutt quun vritable langage de programmation, an de se concentrer sur ce qui ressort de la conception de lalgorithme, et non sur son implmentation. Ce choix devrait toutefois permettre une implmentation aise des algorithmes dans des langages comme Pascal, C ou C++, avec sans doute un eort supplmentaire en ce qui concerne les langages objets. Nous indiquons plus loin les conventions dcriture de ce langage, auxquelles le lecteur pourra se rfrer pour comprendre, mais aussi pour programmer les algorithmes dans le langage de son choix. Louvrage aborde un panel assez vaste de domaines dapplication de lalgorithmique, et devrait couvrir la plupart des cours dispenss actuellement en license et master de mathmatiques et informatique et en coles dingnieurs. On y dveloppe notamment, aprs un chapitre mthodologique qui traite de la preuve et de lanalyse de la complexit dun algorithme, les types de donnes abstraits pour reprsenter, grer et manipuler des ensembles dynamiques, et leur implmentation laide de structures de donnes linaires ou arborescentes (piles, les, listes, arbres binaires de recherche, arbres quilibrs, tas). On aborde ensuite ltude des algorithmes de tri. Les chapitres suivants sont consacrs ltude de lalgorithmique de base des graphes valus et non valus : connexit, accessibilit, parcours, arbres couvrants et chemins de cot minimum, pour ne citer que les principaux problmes abords. Ensuite, deux chapitres consacrs lun aux algorithmes relatifs la gomtrie plane et lautre aux algorithmes relatifs aux automates et aux mots achvent cet ouvrage. Dans chaque section, les exercices sont prsents dans un ordre de dicult croissante, sauf ncessit de regroupement thmatique, et souvent les questions dun exercice respectent une certaine progressivit dans la dicult. Dautres algorithmes auraient mrit de gurer dans ce livre, plus proches de lalgorithmique numrique, ou de la recherche oprationnelle. Avec quelques encouragements, les auteurs pourraient envisager une suite...

VIII

Avant-propos

Prrequis
Le livre ncessite les connaissances de mathmatiques du niveau des deux premires annes de licence, en particulier une bonne matrise du raisonnement par rcurrence, ainsi que la connaissance de base dun langage de programmation. Chacun des chapitres demande des prrequis, explicits dans les exercices lorsque cela semble ncessaire. Il est recommand de traiter les exercices en ayant dautre part tudi un cours oral ou un livre de rfrence. Toutefois, de nombreux exercices peuvent tre traits en se rfrant uniquement aux dnitions et rsultats de base rappels en dbut de sous-chapitre. Cet en-tte de chapitre na pas pour objectif dtre un abrg de cours. Les dnitions prsentes sont loin dtre exhaustives, mais sont celles juges indispensables pour traiter les exercices avec le plus dautonomie possible.

Conventions relatives la prsentation des algorithmes


Les algorithmes se prsentent sous la forme de segments de code, de fonctions ou de procdures. Les types des paramtres, des fonctions et des variables sont toujours explicits. Par dfaut, les passages de paramtres se font par valeur. Un texte accompagne lalgorithme lorsquun paramtre est modi, et que le passage doit se faire par rfrence. Comme dans tous les langages de programmation impratifs, les structures de contrle suivantes sont employes :

si condition alors instruction sinon instruction nsi ; tant que condition faire instruction ntantque ; rpter instruction jusqu condition nrpter ; pour variable de valeur initiale valeur nale faire instruction npour ; pour tout lment dun ensemble faire instruction npour.

Dunod. La photocopie non autorise est un dlit.

Les tableaux sont indexs par des entiers, et un lment dindice i dun tableau T scrit T [i], de mme les lments dun tableau M deux dimensions se notent M [i, j]. La principale spcicit du pseudo-langage est le traitement des pointeurs. Dabord, nous nous aranchissons des problmes lis lallocation dynamique de mmoire (les objets manipuls sont supposs allous). Ensuite, pour ne pas alourdir la prsentation des algorithmes, lorsquune variable x dsigne un pointeur sur un enregistrement plusieurs champs, par exemple un enregistrement comportant des champs nomms a et b, alors on notera x.a la variable correspondant au champ a de lenregistrement point par x. La mme notation sera employe lorsque x reprsente lenregistrement lui-mme. Un pointeur qui ne pointe sur aucun enregistrement a la valeur nul.
IX

Avant-propos

Conventions relatives lindex


Les entres de lindex font rfrence des notions de base traites dans louvrage. Lorsquune notion fait lobjet dune dnition explicite, ou dun exercice qui lui est spciquement consacr, le numro de page rfrenc apparat en gras. Lorsquil sagit dun algorithme, le numro de page apparat en italique.

Remerciements
Les auteurs se souviennent avec tendresse du vide de leurs premiers regards quune explication miraculeuse a un jour allum dune petite amme. Ils saluent leurs matres, qui leur ont inculqu une forme de pense archaque consistant chercher en toute circonstance la matrise absolue de la situation, par lintermdiaire dune preuve au pire longue et laborieuse, au mieux lgante et belle. Ils arrosent dune larme mue les bancs des facults, uss par ceux qui ont, depuis vingt ans, leur insu, particip la conception de cet ouvrage. Ils remercient chaleureusement les collgues dont ils ont sans vergogne pill les archives.

Troisime dition
La troisime dition introduit dans la plupart des chapitres des exercices nouveaux qui se caractrisent par une plus grande originalit, une plus grande dicult et par leur intrt pdagogique pour apprhender en profondeur les fondements thoriques des concepts algorithmiques prsents dans le chapitre.

P REUVE
ET COMPLEXIT

Un algorithme (O, V, S) est form dun ensemble ni O doprations lies par une structure de contrle S et dont les oprandes portent sur un ensemble ni V de variables. Un algorithme rsout le problme P si pour tout nonc I de P (stock dans le sous-ensemble des variables dentre de V), dune part la suite des oprations excutes est nie (condition de terminaison) et si dautre part, lors de la terminaison, le sous-ensemble des variables de sortie de V contient le rsultat associ lnonc I (condition de validit). Prouver un algorithme, cest dmontrer mathmatiquement que la proprit prcdente est satisfaite. Une mesure de complexit dun algorithme est une estimation de son temps de calcul, mmoire utilise ou de toute autre unit signicative. On sintresse le plus souvent la recherche dune estimation par excs une constante positive multiplicative prs du cas le plus dfavorable sur le sousensemble des noncs de taille xe n (complexit dite pire-cas ). On obtient ainsi le taux asymptotique de croissance de la mesure indpendamment de la machine sur laquelle lalgorithme est excut et lon peut alors comparer les complexits pire-cas de plusieurs algorithmes rsolvant un mme problme. Ce chapitre propose dexercer cette dmarche danalyse sur des algorithmes de base, itratifs et rcursifs, en demandant le dveloppement dtaill des preuves laide de questions progressives. An de dnir rigoureusement la notion de mesure de complexit, nous introduisons les trois notations de Landau relatives aux ensembles de fonctions O(g), (g) et (g), lorsque g est une fonction de I N dans I N.
Dnition 1.1 Borne suprieure asymptotique

O(g(n)) = { f : I NI N | k > 0 et n0 0 tels que n n0 0 f (n) k g(n)}


Dunod. La photocopie non autorise est un dlit.

Si une fonction f (n) O(g(n)), on dit que g(n) est une borne suprieure asymptotique pour f (n). On note abusivement : f (n) = O(g(n)).

Chapitre 1

Preuve et complexit

Dnition 1.2 Borne infrieure asymptotique

(g(n)) = { f : I NI N | k > 0 et n0 0 tels que n n0 0 k g(n) f (n)} Si une fonction f (n) (g(n)), on dit que g(n) est une borne infrieure asymptotique pour f (n). On note abusivement : f (n) = (g(n)).
Dnition 1.3 Borne asymptotique

(g(n)) = { f : I NI N | k1 > 0, k2 > 0 et n0 0 tels que n n0 0 k1 g(n) f (n) k2 g(n)} Si une fonction f (n) (g(n)), on dit que g(n) est une borne asymptotique pour f (n). On note abusivement : f (n) = (g(n)).

Exercice 1.1 Gnralits sur les notations asymptotiques

1. Dmontrer que

n2 O(105 n3 ) 25n4 19n3 + 13n2 O(n4 ) 2n+100 O(2n )


2. Donner les relations dinclusion entre les ensembles suivants : O(n log n), O(2n ), O(log n), O(1), O(n2 ), O(n3 ) et O(n). 3. Soit un ordinateur pour lequel toute instruction possde une dure de 106 secondes. On excute un algorithme qui utilise, pour une donne de taille n, f (n) instructions, f (n) tant lune des fonctions prcdentes (log n, n log n, n, n2 , n3 et 2n ). Remplir un tableau qui donne, en fonction de la taille n = 10, 20, 30 et 60, et de la fonction f (n), la dure dexcution de lalgorithme.

Soient f , g, S et T : I NI N.
4. Montrer que si f (n) O(g(n)), alors g(n) ( f (n)). 5. Montrer que si f (n) O(g(n)), alors f (n) + g(n) O(g(n)). 6. Montrer que f (n) + g(n) (max( f (n), g(n))).
2

Exercices

7. Montrer que O( f (n) + g(n)) = O(max( f (n), g(n))).

On suppose que S (n) O( f (n)) et T (n) O(g(n)).


8. Montrer que si f (n) O(g(n)), alors S (n) + T (n) O(g(n)). 9. Montrer que S (n)T (n) O( f (n)g(n)).
Solution

1. Pour la premire relation, il sut donc de trouver deux entiers strictement positifs k et n0 tels que n2 k 105 n3 n n0
Si lon prend k = 105 et n0 = 1, il est vident que n2 k 105 n3 = n3 n n0 donc n2 O(105n3 ). Pour la seconde relation, remarquons tout dabord que 25n4 19n3 + 13n2 25n4 + 19n3 + 13n2 (25 + 19 + 13)n4 n 1 On en dduit que 25n4 19n3 + 13n2 O(n4 ). Il sut en eet de choisir k = 25 + 19 + 13 = 57 et n0 = 1. Finalement, soit k = 2100 et n0 = 0, il est vident que 2n+100 k2n n n0

2. Il est vident que O(1) O(n) O(n2 ) O(n3 ), puisque


1 n n 2 n 3 n 1 On a galement O(1) O(log n) O(n) O(n log n), puisque
Dunod. La photocopie non autorise est un dlit.

1 log n n 3 et log n n n 1 et pour la mme raison, O(n log n) O(n2 ). On montre facilement que O(n3 ) O(2n ). En eet, n3 2n log n3 log 2n 3 log n n log(2) qui est vrai partir dune certaine valeur de n puisque log n O(n).
3

Chapitre 1

Preuve et complexit

Lordre dinclusion est donc nalement : O(1) O(log n) O(n) O(n log n) O(n2 ) O(n3 ) O(2n ) Un algorithme ayant une complexit logarithmique sera donc meilleur (en terme de complexit) quun algorithme linaire, lui-mme meilleur quun algorithme polynomial, son tour meilleur quun algorithme exponentiel.

3. Le tableau suivant est calcul en utilisant un logarithme nprien :


f (n) log n n n log n n2 n 2
3 n

10 2,30 106 105 2,30 105 104 10


3 3

20 3,00 106 2 105 5,99 105 4 104 8 10


3

30 3,40 106 3 105 1,02 104 9 104 2,70 10


2 3

60 4,09 106 6 105 2,46 104 3,60 103 2,16 101 1,15 1012

1,02 10

1,05

1,07 10

Il est intressant de remarquer que 1, 15 1012 s 36 558 ans.

4. Si f (n) O(g(n)), alors il existe k > 0 et n0 0 tels que


f ( n ) k g ( n ) n n 0 On dduit de lexpression prcdente que 1 f ( n ) g ( n ) n n 0 k Donc g(n) est en ( f (n)).

5. Si f (n) O(g(n)), alors il existe k > 0 et n0 0 tels que


f ( n ) k g ( n ) n n 0 On dduit de lexpression prcdente que f (n) + g(n) (k + 1)g(n) n n0 Donc f (n) + g(n) est en O(g(n)).

6. De faon vidente,
max( f (n), g(n)) f (n) + g(n) 2 max( f (n), g(n)) n 0 f (n) + g(n) est donc en (max( f (n), g(n))).

7. Pour montrer lgalit des deux ensembles O( f (n) + g(n)) et O(max( f (n), g(n))), il
faut montrer la double inclusion. O( f (n) + g(n)) O(max( f (n), g(n))) :
4

Exercices

Pour toute fonction h(n) O( f (n) + g(n)), il existe k > 0 et n0 0 tels que h(n) k( f (n) + g(n)) 2k max( f (n), g(n)) n n0 Donc h(n) est donc en O(max( f (n), g(n))). O(max( f (n), g(n))) O( f (n) + g(n)) : Pour toute fonction h(n) O(max( f (n), g(n))), il existe k > 0 et n0 0 tels que h(n) k max( f (n), g(n)) k( f (n) + g(n)) n n0 Donc h(n) est en O( f (n) + g(n)).

8. Si S (n) O( f (n)) et T (n) O(g(n)), alors il existe k > 0, k > 0, n0 0 et n0 0 tels


que S ( n ) k f ( n ) n n 0 T ( n ) k g ( n ) n n 0 Si f (n) O(g(n)), alors il existe k > 0 et n0 0 tels que f ( n ) k g ( n ) n n 0 On dnit alors K = kk + k et m0 = max(n0 , n0 , n0 ). De faon vidente : S (n) + T (n) k f (n) + k g(n) (kk + k )g(n) = K g(n) n m0 Donc S (n) + T (n) est en O(g(n)). Si dans un algorithme, on a une premire partie en O( f (n)) suivie (squentiellement) dune seconde partie en O(g(n)) et que f (n) O(g(n)), alors lalgorithme est globalement en O(g(n)).

9. De la mme faon, si on dnit K = kk et m0 = max(n0 , n0 ), on a de faon vidente :


S ( n ) T ( n ) K f ( n ) g ( n ) n m0 Donc S (n)T (n) est en O( f (n)g(n)).
Dunod. La photocopie non autorise est un dlit.

Si dans un algorithme, on a une premire partie en O( f (n)) dans laquelle est imbrique une seconde partie en O(g(n)), alors lalgorithme est globalement en O( f (n)g(n)).

Exercice 1.2 Somme des lments dun tableau

Soit A un tableau de n entiers (n 1).


1. crire un algorithme itratif qui calcule la somme des lments de A et prouver cet algorithme. 2. Dterminer la complexit de cet algorithme.
5

Chapitre 1

Preuve et complexit

3. crire un algorithme rcursif qui calcule la somme des lments de A et prouver cet algorithme. 4. Dterminer la complexit de cet algorithme rcursif.
Solution

1. Lalgorithme calculant la somme des n lments du tableau A est le suivant :


Somme : entier Somme 0 pour i 1 n faire Somme Somme + A[i] n pour Pour prouver cet algorithme il faut dmontrer deux choses : la terminaison et la validit de lalgorithme. La terminaison de lalgorithme est triviale puisque la boucle est excute n fois et que le corps de la boucle nest constitu que dune somme et dune aectation, oprations qui sexcutent en un temps ni. Pour dmontrer la validit, nous allons considrer la proprit suivante : la n de litration i, la variable Somme contient la somme des i premiers lments du tableau A . Notons Sommei la valeur de la variable Somme la n de litration i et Somme0 = 0 sa valeur initiale. On eectue alors un raisonnement par rcurrence sur i. La proprit est trivialement vraie pour i = 1 puisqu lissue de la premire itration Somme (initialise 0) contient la valeur A[1] : Somme1 = Somme0 + A[1] = A[1] Maintenant, si on suppose que la proprit est vraie pour une itration i :
i

Sommei =
j=1

A[ j]

la n de litration i + 1, Somme contiendra la valeur quelle contenait la n de litration i, donc la somme des i premiers lments, plus A[i + 1] qui lui a t ajoute litration i + 1. Somme sera donc bien la somme des i + 1 premiers lments de A :
i i+1

Sommei+1 = Sommei + A[i + 1] =


j=1

A[ j] + A[i + 1] =
j=1

A[ j]

Vraie initialement, la proprit reste vraie chaque nouvelle itration. Cette proprit est donc un invariant de lalgorithme. On parle dinvariant de boucle. Lalgorithme se terminant, la n de litration n, il aura donc bien calcul la somme des n lments du tableau A.
6

Exercices

2. On sintresse au nombre a(n) dadditions eectues par lalgorithme. De faon vi-

dente, a(n) = n. On en dduit que lalgorithme est en O(n). Il est noter, que lingalit a(n) n susait aboutir cette conclusion. On peut par ailleurs dduire de lingalit a(n) n que lalgorithme est en (n) et donc nalement conclure quil est en (n).

3. La fonction rcursive calculant la somme des lments du tableau A est la suivante :


fonction Somme_Rec(A : tableau ; n : entier) : entier si n 0 alors retourner(0) sinon retourner(Somme_Rec(A, n 1)+A[n]) n si On dmontre tout dabord la terminaison, par rcurrence sur i. De faon vidente lappel de la fonction Somme_Rec avec le paramtre 0 se termine immdiatement. Si on suppose que lappel de la fonction Somme_Rec avec un paramtre n se termine, lappel de la fonction Somme_Rec avec le paramtre n + 1, appelle la fonction Somme_Rec avec le paramtre n, qui par hypothse se termine, ajoute son rsultat la valeur de A[n] et se termine. Donc quelle que soit la valeur du paramtre n, lappel de la fonction Somme_Rec se termine. On note Sommen la valeur retourne par lappel de la fonction Somme_Rec avec le paramtre n. Cette fonction rcursive reproduit la relation mathmatique de rcurrence suivante : Somme0 = 0 Sommen = Sommen1 + A[n] si n > 0 On montre facilement par rcurrence (exactement de la mme faon que cela a t fait dans la question prcdente), que la solution de cette expression rcursive est :
n

Sommen =
i=1

A[i]

Dunod. La photocopie non autorise est un dlit.

Ds linstant o la fonction se termine (ce que nous avons prouv), elle calcule bien la somme des lments du tableau A.

4.

nouveau, on appelle a(n) le nombre dadditions eectues par la fonction Somme_Rec appele avec un paramtre n. a(n) est solution de lquation de rcurrence : a (n ) = 0 a(n 1) + 1 si n = 0 si n > 0

dont la solution (vidente) est a(n) = n. On en dduit, nouveau, que lalgorithme est la fois en O(n) et en (n), donc globalement en (n).

Chapitre 1

Preuve et complexit

Exercice 1.3 Fonctions F et G mystres

1. Soit la fonction rcursive F dun paramtre entier n suivante :

fonction F (n : entier) : entier si n = 0 alors retourner(2) sinon retourner(F (n 1) F (n 1)) n si Que calcule cette fonction ? Le prouver.
2. Dterminer la complexit de la fonction F . Comment amliorer cette complexit ? 3. Soit la fonction itrative G suivante :

fonction G(n : entier) : entier R : entier R2 pour i 1 n faire RRR n pour retourner(R) Que calcule cette fonction ? Le prouver.
4. Dterminer la complexit de la fonction G.
Solution

1. On calcule les premires valeurs calcules par la fonction F :


F (0) = 2 F (1) = 2 2 = 22 F (2) = 22 22 = 24 F (3) = 24 24 = 28 F (4) = 28 28 = 216 De faon intuitive, on obtient lexpression gnrale de F (n) : F (n ) = 2 2
n

An de le prouver, il faut dmontrer la terminaison et la validit de lalgorithme.


8

Exercices

La terminaison de la fonction F se dmontre par rcurrence sur n. De faon vidente, lappel de la fonction F avec un paramtre 0 se termine immdiatement. Si on suppose que lappel de la fonction F avec un paramtre n se termine, lappel de la fonction F avec le paramtre n + 1 appelle deux fois la fonction F avec le paramtre n, ces deux appels se terminant par hypothse, multiplie les deux rsultats (identiques) obtenus et se termine. Si on note Fn la valeur retourne par lappel de la fonction F avec le paramtre n, la fonction rcursive F reproduit la relation mathmatique suivante : F0 = 0 2 Fn = Fn1 Fn1 = Fn 1 si n > 0

On montre alors par rcurrence sur n que la solution de cette relation de rcurrence est : F n = 22
n

Cette relation est bien satisfaite pour n = 0. Si on la suppose satisfaite pour n, Fn = 22 , on calcule Fn+1 partir de la relation de rcurrence :
2 = (22 )2 = 22 Fn+1 = Fn
n n+1

On montre donc bien par rcurrence que, pour tout n 0, Fn = 22 .

2. On sintresse au nombre m(n) de multiplications eectues. m(n) est solution de


lquation de rcurrence : m( n ) = 0 1 + 2 m(n 1) si n = 0 si n > 0
n1

On montre trs facilement par rcurrence que m(n) =


i=0

2i = 2n 1. On en dduit que

lalgorithme est en (2n ) et possde donc une complexit exponentielle. Pour amliorer lalgorithme, il sut bien videmment dviter le double appel rcursif ; la fonction F scrit alors : fonction F (n : entier) : entier si n = 0 alors retourner(2) sinon retourner(F (n 1)2 ) n si On calcule alors la complexit par rapport au nombre c(n) dappels de la fonction carr . c(n) est solution de lquation de rcurrence : c( n ) = 0 c(n 1) + 1 si n = 0 si n > 0
9

Dunod. La photocopie non autorise est un dlit.

Chapitre 1

Preuve et complexit

De faon vidente, c(n) = n. On en dduit que le nouvel algorithme est en (n).

3. La fonction G calcule la mme valeur que la fonction F . Pour le dmontrer il faut prouver la terminaison et la validit de lalgorithme.
La terminaison est triviale puisque lalgorithme eectue n itrations. Pour prouver la validit, il faut dterminer un invariant de boucle. On se propose de i prouver que la proprit suivante en est un : la n de litration i, R = 22 . Cette proprit est vrie la n de la premire itration, puisque R (initialis 2) vaut 1 alors 4 = 22 . Si on suppose que la proprit est vraie pour i, la n de litration i + 1, i+1 2i 2i R = 2 2 = 22 . La proprit est donc bien un invariant de boucle. Elle est donc vraie n la terminaison de lalgorithme. Celui-ci calcule donc bien 22 .

4. Si m(n) est nouveau le nombre de multiplications eectues par lalgorithme, de


faon vidente, m(n) = n. On en dduit que lalgorithme est en (n).

Exercice 1.4 Produit matriciel

On considre deux matrices carres (dentiers) dordre n, A et B. Le produit de A par B est une matrice carre C dnie par :
n

Ci, j =
k=1

Ai,k Bk, j

1. Donner un algorithme calculant le produit de deux matrices reprsentes sous forme dun tableau deux dimensions. Calculer la complexit de cet algorithme. Doit-on prciser dans quels cas (pire cas, meilleur des cas, cas moyen) cette complexit est obtenue ? 2. Modier lalgorithme prcdent lorsque la matrice A est de dimension (m, n) et la matrice B de dimension (n, p). Quelle est alors la complexit de lalgorithme ?
Solution

1. Lalgorithme calculant le produit des deux matrices A et B est le suivant :


i, j, k : entier pour i 1 n faire pour j 1 n faire C [i, j] 0 pour k 1 n faire C [i, j] C [i, j] + A[i, k] B[k, j] n pour n pour n pour
10

Exercices

Si lon sintresse au nombre a(n) dadditions (ou de multiplications) eectues par lalgorithme, on obtient de faon immdiate que a(n) = n3 . On en dduit que lalgorithme est en (n3 ). Il ny a donc ici ni meilleur ni pire des cas.

2. Lalgorithme modi est le suivant :


i, j, k : entier pour i 1 m faire pour j 1 p faire C [i, j] 0 pour k 1 n faire C [i, j] C [i, j] + A[i, k] B[k, j] n pour n pour n pour Le nombre dadditions (ou de multiplications) eectues est cette fois-ci a(n) = npm. On en dduit que lalgorithme est en (npm).

Exercice 1.5 Complexit en fonction de deux paramtres

Dterminer la complexit des algorithmes suivants (par rapport au nombre ditrations eectues), o m et n sont deux entiers positifs. Algorithme A i 1; j 1 tant que (i m) et ( j n) faire i i+1 j j+1 n tant que
Dunod. La photocopie non autorise est un dlit.

Algorithme B i 1; j 1 tant que (i m) ou ( j n) faire i i+1 j j+1 n tant que

11

Chapitre 1

Preuve et complexit

Algorithme C i 1; j 1 tant que j n faire si i m alors ii+1 sinon j j+1 n si n tant que

Algorithme D i 1; j 1 tant que j n faire si i m alors ii+1 sinon j j+1 i1 n si n tant que
Solution Le corps des dirents algorithmes ne contient que des oprations en O(1). En comptant le nombre ditrations eectues par chacun des algorithmes, on obtient immdiatement que :

lalgorithme A est en O(min(m, n)) ; lalgorithme B est en O(max(m, n)) ; lalgorithme C est en O(m + n) ; lalgorithme D est en O(mn).

Exercice 1.6 Polynmes

On considre la fonction suivante, qui a deux arguments : un tableau T [0..n] de n + 1 nombres rels et un nombre rel x.
12

Exercices

fonction Calcul(T : tableau ; x : rel) : rel s T [n] pour i n 1 0 faire s T [i] + x s n pour retourner( s)
1. Donner le droulement de lalgorithme pour la donne suivante :

n=5 T = 3

et x = 2

2. Exprimer le rsultat de la fonction Calcul en fonction de x et de T . Que calcule cette fonction ? Le prouver. 3. crire une fonction rcursive ralisant le mme calcul. Prouver lalgorithme.
Solution

1. On donne les valeurs de s et de T [i] linitialisation et la n de chaque itration :


Init. i=4 i=3 i=2 i=1 i=0 s 2 5 11 22 52 107 T[i] 2 1 1 0 8 3

2. On note si la valeur de la variable s la n de litration i et sn sa valeur initiale.


On a : sn = T [n] et si = T [i] + x si+1 On montre facilement par rcurrence (inverse) que :
n
Dunod. La photocopie non autorise est un dlit.

si =
j=i

T [ j] x ji

On en dduit que la fonction Calcul value le polynme de degr n dont les coecients sont les valeurs du tableau T , au point x :
n

s0 =
j=0

T [ j] x j

On vient en fait de dmontrer la validit de lalgorithme. Il reste vrier la terminaison. Celle-ci est bien sr triviale puisque lalgorithme nest constitu que dune boucle de n itrations.
13

Vous aimerez peut-être aussi