Académique Documents
Professionnel Documents
Culture Documents
Exercices 2.1
1. Pour chacun des algorithmes suivants, indiquez (i) une métrique de taille naturelle pour
ses entrées, (ii) son opération de base, et (iii) si le nombre d'opérations de base peut être
différent pour des entrées de même taille :
b. informatique !
d. L'algorithme d'Euclide
e. tamis d'Eratosthène
2. une. Considérons l’algorithme basé sur la définition pour ajouter deux matrices × .
Quel est son fonctionnement de base ? Combien de fois estelle effectuée en fonction de
l’ordre matriciel ? En fonction du nombre total d'éléments dans les matrices d'entrée ?
b. Répondez aux mêmes questions pour l’algorithme basé sur la définition pour la
multiplication matricielle.
3. Considérons une variante de recherche séquentielle qui analyse une liste pour renvoyer
le nombre d'occurrences d'une clé de recherche donnée dans la liste. Son efficacité sera
telle différente de celle de la recherche séquentielle classique ?
4. une. Sélection des gants Il y a 22 gants dans un tiroir : 5 paires de gants rouges, 4 paires
de jaunes et 2 paires de verts. Vous sélectionnez les gants dans l'obscurité et ne pouvez
les vérifier qu'après avoir effectué une sélection. Quel est le plus petit nombre de gants
que vous devez sélectionner pour avoir au moins une paire assortie dans le meilleur des
cas ? au pire des cas?
1
Machine Translated by Google
des 10 chaussettes est la même, trouvez la probabilité du meilleur des cas ; la probabilité
du pire des cas ; le nombre de paires auquel vous devriez vous attendre dans le cas moyen.
5. aB Démontrer la formule (2.1) pour le nombre de bits dans la représentation binaire d'un
entier positif.
= dlog2( + 1)e
d. Expliquez pourquoi, dans le cadre d'analyse accepté, peu importe que nous utilisions
des chiffres binaires ou décimaux pour mesurer la taille de .
6. Suggérez comment un algorithme de tri peut être augmenté de manière à ce que le nombre
optimal de ses comparaisons clés soit égal à seulement −1( est la taille d'une liste,
bien sûr). Pensezvous que ce serait un ajout intéressant à tout algorithme de tri ?
un. Combien de temps encore fautil s'attendre à ce que l'élimination gaussienne fonctionne
sur un système de 1 000 équations par rapport à un système de 500 équations ?
b. Vous envisagez d’acheter un ordinateur 1000 fois plus rapide que celui que vous
possédez actuellement. Dans quelle mesure l'ordinateur plus rapide augmenteratil la taille
des systèmes résolubles dans le même laps de temps que sur l'ancien ordinateur ?
8. Pour chacune des fonctions suivantes, indiquez dans quelle mesure la valeur de la fonction
changera si son argument est multiplié par quatre.
un. log2 b. √ c. d. 2 e. 3 F. 2
2
Machine Translated by Google
c. log2 et ln d. journal2
2 et log2 2
e. 2 −1 et 2 F. ( − 1) ! et !
10. Invention des échecs a. Selon une légende bien connue, le jeu d'échecs a été
inventé il y a plusieurs siècles dans le nordouest de l'Inde par un certain sage.
Lorsqu'il présenta son invention à son roi, celuici aimait tellement le jeu qu'il offrit
à l'inventeur la récompense qu'il souhaitait. L'inventeur a demandé que l'on
obtienne du grain de la manière suivante : il fallait placer un seul grain de blé sur
la première case de l'échiquier, deux sur la deuxième, quatre sur la troisième,
huit sur la quatrième, et ainsi de suite. jusqu'à ce que les 64 cases soient
remplies. S’il ne fallait qu’une seconde pour compter chaque grain, combien de
temps faudraitil pour compter tous les grains qui lui sont dus ?
3
Machine Translated by Google
1. Les questions sont en effet aussi simples qu’elles le paraissent, même si certaines d’entre elles
peuvent avoir des réponses alternatives. Gardez également à l’esprit la mise en garde
concernant la mesure de la taille d’un entier.
2. une. La somme de deux matrices est définie comme la matrice dont les éléments sont
les sommes des éléments correspondants des matrices données.
4. une. Les gants ne sont pas des chaussettes : ils peuvent être droitiers et gauchers.
b. Vous n’avez que deux résultats qualitativement différents possibles. Comptez le nombre de
façons d’obtenir chacun des deux.
5. une. Tout d’abord, prouvez d’abord que si un entier décimal positif a chiffres dans son
représentation binaire, alors
2 −1 ≤ 2
c. La formule sera la même, avec juste un petit ajustement pour tenir compte des différentes
bases.
9. Si nécessaire, simplifier les fonctions concernées pour distinguer les termes définissant leurs
ordres de croissance à un multiple constant près. (Nous discuterons des méthodes formelles
pour répondre à ces questions dans la section suivante ; cependant, il est possible de répondre
à ces questions sans connaître ces méthodes.)
4
Machine Translated by Google
c. (i) ; (ii) comparaison de deux nombres ; (iii) non (pour l'algorithme d'analyse de
liste standard)
d. (i) soit la grandeur du plus grand de deux nombres d'entrée, soit la grandeur du
plus petit de deux nombres d'entrée, soit la somme des grandeurs de deux nombres
d'entrée ; (ii) division modulo ; (iii) oui
2. une. Ajout de deux nombres. Elle est effectuée 2 fois (une fois pour chacun des 2
éléments de la matrice en cours de calcul). .Puisque le nombre total d'éléments dans
deux matrices données est = 2 2 , le nombre total d'ajouts peut également être
exprimé par 2 = 2
b. Étant donné que sur la plupart des ordinateurs, la multiplication prend plus de
temps que l’addition, la multiplication est un meilleur choix pour être considérée
comme l’opération de base de l’algorithme standard de multiplication matricielle.
Chacun des 2 éléments du produit de deux matrices par est calculé comme
le produit scalaire (scalaire) de deux vecteurs de taille , ce qui nécessite
multiplications. Le nombre total de multiplications est · 2= 3=( 2)3 2.
3. Cet algorithme fera toujours comparaisons clés sur chaque entrée de taille
alors que ce nombre peut varier entre et 1 pour la version classique de recherche
séquentielle.
4. une. Le meilleur nombre est évidemment deux. Le pire des cas est douze : un de plus
que le nombre de gants à une main.
b. Il n’y a ici que deux issues possibles : les deux chaussettes manquantes forment
une paire (le meilleur des cas) et les deux stocks manquants ne forment pas une
paire (le pire des cas). Le nombre total de résultats différents (les façons
5
Machine Translated by Google
pour choisir les chaussettes manquantes) est ¡10 2 ¢ = 45 Le nombre de chaussettes dans le meilleur des cas
est 5 ; sa probabilité est donc de 9 45Le=nombre de cas les plus défavorables est
5 1
40 = 8
45 5 = 40 ; donc sa probabilité est attendue 45 9 En moyenne, vous devriez
1 + 3 · 8 = 28 = 3 1
4· 9 9 9 9 paires correspondantes.
5. une. Le plus petit entier positif qui a chiffres binaires dans son binaire
l'expansion est de 10 0 qui vaut 2 −1 ; le plus grand entier positif qui a
|{z} −1
les chiffres binaires dans son développement binaire sont 11 1 qui est 2 −1+2 −2+ +1 =
|{z} −1
2 −1 Ainsi,
2 −1 ≤ 2
Ainsi
log2 2 −1 ≤ log2 log2 2
ou
− 1 ≤ log2
Ces inégalités impliquent que − 1 est le plus grand entier n’excédant pas
log2 Autrement dit, en utilisant la définition de la fonction plancher, on conclut que
Ainsi
2 −1 +1≤2
et donc
log2 2 −1 log2( + 1) ≤ log2 2
ou
−1 log2( + 1) ≤
Ces inégalités impliquent que est le plus petit entier non inférieur à
log2( + 1) Autrement dit, en utilisant la définition de la fonction plafond,
nous concluons que
= dlog2( + 1)e
6
Machine Translated by Google
blog10 c + 1 Autrement dit, les deux mesures de taille sont à peu près égales à un
multiple constant pour les grandes valeurs de
1
7. une. (2 ) ≈ (2 )3
3
1 = 8, où est le temps d'une multiplication
( ) 3
3
b. On peut estimer le temps d’exécution pour résoudre des systèmes d’ordre sur
l'ancien ordinateur et celui de commande sur le nouvel ordinateur comme ( )≈
1 1
3 3 et ( ) ≈ 10−3 3 3 respectivement, où est le temps de
une multiplication sur l'ancien ordinateur. Remplacement de ( ) et ( )
1
par ces estimations dans l'équation ( )= ( ) donne 3 3≈
1 ≈ 10
10−3 3 3 ou
b. √ 4 =2
√
c. 4 =4
d. (4 )2 = 42
2
e. (4 )3 = 43
3
F. 24 = 23 = (2 )3
2
c. Puisque changer la base d'un logarithme peut être effectué par la formule
toutes les fonctions logarithmiques ont le même ordre de croissance à un multiple constant
près.
7
Machine Translated by Google
d. journal2
2 = log2 log2 et log2 2 = 2 log Donc log2 2a un ordre de
croissance plus élevé que log2 2
2 = 264 − 1 ≈ 1 8 · 1019
X2 −1 = X
=1 =0
(C'est bien plus que ce que l'on peut obtenir en plantant des céréales sur toute la
surface de la planète Terre.) S'il fallait juste une seconde pour compter chaque
grain, le temps total nécessaire pour compter tous ces grains s'élèverait à environ
585 milliards. ans, soit plus de 100 fois plus que l'âge estimé de notre planète.
1+3+ + (2 · 64 − 1) = 642
Avec la même vitesse de comptage d'un grain par seconde, il lui aurait fallu moins
d'une heure et quatorze minutes pour compter sa modeste récompense.
8
Machine Translated by Google
Exercices 2.2
1. Utilisez la notation la plus appropriée parmi Θ et Ω pour indiquer le
classe d'efficacité temporelle de la recherche séquentielle (voir la section 2.1)
un. ( + 1) 2 ( 3) b. ( + 1) 2 ( 2)
c. ( + 1) 2 Θ( 3) d. ( + 1) 2 Ω( )
3. Pour chacune des fonctions suivantes, indiquez à quelle classe Θ( ( )) la fonction appartient.
(Utilisez le ( ) le plus simple possible dans vos réponses.) Prouvez vos affirmations. un. ( 2+
1)10
b. √ 10 2+7 +3
e. blog2 c
4. une. Le tableau 2.1 contient les valeurs de plusieurs fonctions qui surviennent souvent lors de
l'analyse d'algorithmes. Ces valeurs suggèrent certainement que les fonctions
journal journal 2 3 2 !
sont classés par ordre croissant de leur ordre de croissance. Ces valeurs prouventelles ce fait
avec une certitude mathématique ?
b. Prouver que les fonctions sont bien classées par ordre croissant de leur ordre de croissance.
5. Classez les fonctions suivantes selon leur ordre de croissance (du plus bas au plus élevé) :
b. Montrer que les fonctions exponentielles ont différents ordres de croissance pour différentes
valeurs de base 0
9
Machine Translated by Google
7. Prouver (en utilisant les définitions des notations impliquées) ou réfuter (en
donnant un contreexemple spécifique) les affirmations suivantes.
un. Si ( ) ( ( )) alors ( ) Ω( ( ))
b. Θ( ( )) = Θ( ( )) où 0
c. Θ( ( )) = ( ( )) ∩ Ω( ( ))
dB Pour deux fonctions non négatives ( ) et ( ) définies sur l'ensemble des entiers non négatifs,
soit ( ) ( ( )) ou ( ) Ω( ( )) ou les deux.
un. Notation Ω.
b. Notation Θ.
9. Nous avons mentionné dans cette section que l'on peut vérifier si tous les éléments d'un tableau sont
distincts par un algorithme en deux parties basé sur le prétri du tableau.
un. Si le prétri est effectué par un algorithme avec une efficacité temporelle en Θ( log ) , quelle
sera la classe d'efficacité temporelle de l'algorithme entier ?
b. Si l'algorithme de tri utilisé pour le prétri nécessite un tableau supplémentaire de taille , quelle
sera la classe d'efficacité spatiale de l'algorithme entier ?
10. L’étendue d’un ensemble fini non vide de nombres réels est définie comme la différence entre le
plus grand et le plus petit élément de . Pour chaque représentation de donnée cidessous,
décrivez en anglais un algorithme pour calculer l’étendue. Indiquer les classes d'efficacité temporelle
de ces algorithmes en utilisant la notation la plus appropriée ( Θ ou Ω)
b. Un tableau trié
11. Plus léger ou plus lourd ? Vous disposez de 2 pièces de monnaie identiques et d’une balance à
deux plateaux sans poids. L’une des pièces est une fausse, mais vous ne savez pas si elle est plus
légère ou plus lourde que les pièces authentiques, qui pèsent toutes le même poids. Concevez un
algorithme Θ(1) pour déterminer si la fausse pièce est plus légère ou plus lourde que les autres.
dix
Machine Translated by Google
12. B Porte dans un mur Vous faites face à un mur qui s'étend à l'infini dans les
deux directions. Il y a une porte dans le mur, mais vous ne savez ni à quelle
distance ni dans quelle direction. Vous ne pouvez voir la porte que lorsque
vous êtes juste à côté. Concevez un algorithme qui vous permet d'atteindre la
porte en faisant au plus ( ) pas, où est le nombre (inconnu de vous) de
pas entre votre position initiale et la porte. [Par95]
11
Machine Translated by Google
3. Simplifier les fonctions données pour distinguer les termes définissant leurs commandes
de croissance.
5. Simplifiez d’abord certaines fonctions. Ensuite, utilisez la liste des fonctions du tableau
2.2 pour « ancrer » chacune des fonctions données. Prouvez leur placement final en
calculant les limites appropriées.
6. une. Vous pouvez prouver cette affirmation soit en calculant une limite appropriée
ou en appliquant l'induction mathématique.
b. Calculer lim →∞ 1 2
7. Prouver l'exactitude de (a), (b) et (c) en utilisant les définitions appropriées ; construire
un contreexemple pour (d) (par exemple, en construisant deux fonctions se comportant
différemment pour les valeurs paires et impaires de leurs arguments).
8. La preuve de la partie (a) est similaire à celle donnée pour l'assertion du théorème dans
la section 2.2. Bien entendu, différentes inégalités doivent être utilisées pour délimiter la
somme par le bas.
10. Vous pouvez utiliser des algorithmes simples pour les quatre questions posées.
Utilisez la notation pour la classe d'efficacité temporelle de l'un d'eux, et la notation
Θ pour les trois autres.
12. Vous devez marcher par intermittence à gauche et à droite depuis votre position initiale
jusqu'à ce que la porte soit atteinte.
12
Machine Translated by Google
( +1) + (1 − ) = (1 − ) + où 0 ≤ ≤1
c. Puisque ( )= 2 2 2
( ) Θ( )
( 2+1)10 ( 2+1)10 1
20 = lim →∞ 2 ¢10 = 1
lim →∞ ( 2)10 lim →∞ ³ 2+1 2 ´10 == lim →∞ ¡ 1 + =
Remarque : Une preuve alternative peut être basée sur la formule binomiale et
l’affirmation de l’exercice 6a.
√10 2+7 +3 7 + 3 = √ 10
= lim →∞ q10 2+7 +3 2 = lim →∞q 10 + 2
lim →∞
d. 2 +1 + 3 −1 = 2 2+3 1
3
Θ(2 ) + Θ(3 ) = Θ(3 )
blog2 c ≤ log2
1 1
blog2 c log2 − 1 ≥ log2 − log2 (pour chaque ≥ 4) = log2
2 2
13
Machine Translated by Google
1
=0
lim →∞ log2 = lim →∞ log2
log2 log2
2 = lim →∞
= (voir la première limite de cet exercice) = 0
lim →∞
1
2
3
=0
lim →∞ = lim →∞
3 ( 3)0 3 2 = 3 2 = 3 ( 2)0
lim →∞
2 →∞ (2 )0 = lim →∞ 2 ln 2
= lim ln 2 lim →∞ 2 ln 2 lim →∞ (2 )0
= 3 2 = 6 = 6 ( )0
ln 2 lim →∞ 2 ln 2 ln2 2 lim →∞ 2 ln2 2 lim →∞ (2 )0
= 6 1 = 6 1
=0
ln2 2 lim →∞ 2 ln 2 ln3 2 lim →∞ 2
2
! = (voir exemple 3 dans la section) 0
lim →∞
( ) + −1 −1+ + 0 −1
= limite + +
0
)
6. une. lim →∞ →∞ = lim →∞( +
= 0
D’où ( ) Θ( )
b.
0 si 1 2 1 ( 2)
1
1 si 1= 2 1 Θ( 2)
lim →∞
2 = lim →∞ µ 1 2¶ =
∞ si 1 2
( 1) 2
7. une. L'affirmation devrait être correcte car elle indique que si l'ordre de
la croissance de ( ) est inférieure ou égale à l’ordre de croissance de ( ) alors
14
Machine Translated by Google
( )≤ ( ) pour tout ≥ 0 où 0
implique
1
( ) ( )≤ ( ) pour tout ≥ 0
c'estàdire, ( ) Θ( ( ))
et donc
c'estàdire ( ) Θ( ( ))
15
Machine Translated by Google
1( )≥ 1 1( ) pour tous ≥ 1
2( )≥ 2 2( ) pour tous ≥ 2
1( )+ 2( )≥ 1 1( )+ 2 2( )
≥ 1( )+ 2( )= [ 1( )+ 2( )]
≥ max{ 1( ) 2( )}
9. une. Puisque le temps d'exécution de la partie tri de l'algorithme dominera toujours le temps
d'exécution de la seconde, c'est la première qui déterminera l'efficacité temporelle de
l'ensemble de l'algorithme. Formellement, il découle de l'égalité
Θ( log )+ ( ) = Θ( log )
dont la validité est facile à prouver de la même manière que celle du théorème de section.
10. une. Parcourez le tableau pour trouver les valeurs maximales et minimales parmi ses
éléments, puis calculez la différence entre elles. L'efficacité temporelle de l'algorithme est
Θ( ) Remarque : Bien que l'on puisse trouver à la fois les valeurs maximales et minimales
dans un tableau d'éléments avec environ 1,5 comparaisons
16
Machine Translated by Google
(voir les solutions au problème 5 dans les exercices 2.3 et au problème 2 dans les
exercices 5.1), cela ne change bien sûr pas la classe d'efficacité linéaire.
b. Pour un tableau trié, nous pouvons simplement calculer la différence entre son premier
et son dernier élément : [ − 1] − [0] La classe d'efficacité temporelle est
évidemment Θ(1)
c. Le plus petit élément se trouve dans le premier nœud de la liste et ses valeurs peuvent
donc être obtenues en temps constant. Le plus grand élément se trouve dans le dernier
nœud accessible uniquement par le parcours de la liste entière, ce qui nécessite un
temps linéaire. Le calcul de la différence entre les deux valeurs nécessite un temps
constant. Par conséquent, la classe d’efficacité temporelle est Θ( )
d. Le plus petit (le plus grand) élément d’un arbre de recherche binaire se trouve dans
le nœud le plus à gauche (le plus à droite). Pour l'atteindre, il faut commencer par la
racine et suivre la chaîne de pointeurs enfant gauche (enfant droit) jusqu'à ce qu'un nœud
avec le pointeur enfant gauche nul (enfant droit) soit atteint. Selon la structure de l'arbre,
cette chaîne de nœuds peut avoir une longueur comprise entre 1 et nœuds. Par
conséquent, le temps pour atteindre son dernier nœud sera en ( ) Le temps
d'exécution de l'ensemble de l'algorithme sera également linéaire : ( ) + ( ) + Θ(1) = ( )
11. Le puzzle peut être résolu en deux pesées comme suit. Commencez par mettre de côté
une pièce si est impair et deux pièces si est pair. Après cela, divisez le nombre pair
de pièces restant en deux groupes de taille égale et placezles sur les plateaux opposés
de la balance. Si elles pèsent le même poids, toutes ces pièces sont authentiques et la
fausse pièce fait partie des pièces mises de côté. On peut donc comparer le groupe
réservé d'une ou deux pièces à un même nombre de pièces authentiques : si la première
pèse moins, la fausse pièce est plus légère, sinon elle est plus lourde. Si la première
pesée n'aboutit pas à une balance, prenez le groupe le plus léger et, si le nombre de
pièces qu'il contient est impair, ajoutezy une des pièces initialement mises de côté (qui
doit être authentique). Divisez toutes ces pièces en deux groupes de taille égale et pesez
les. Si elles pèsent le même poids, toutes ces pièces sont authentiques et donc la fausse
pièce est plus lourde ; sinon, ils contiennent le faux, qui est plus léger.
Remarque : Le puzzle fournit un exemple très rare d'un problème qui peut être résolu
avec le même nombre d'opérations de base (à savoir deux pesées), quelle que soit la
taille de l'instance du problème (ici, le nombre de pièces). Bien sûr, si nous avions
envisagé de mettre une pièce de monnaie sur la balance comme opération de base de
l'algorithme, l'efficacité de l'algorithme aurait été en Θ( ) au lieu de Θ(1)
12. L’idée clé ici est de marcher par intermittence à droite et à gauche en s’éloignant à chaque
fois de façon exponentielle de la position initiale. Une mise en œuvre simple de cette idée
est de faire ce qui suit jusqu'à ce que la porte soit atteinte : Pour =0 1
faire 2 pas vers la droite, revenir à la position initiale, faire 2 pas vers la gauche, et
revenez à nouveau à la position initiale. Soit 2 −1 ≤2 Le
17
Machine Translated by Google
Le nombre d'étapes dont cet algorithme aura besoin pour trouver la porte peut être estimé ci
dessus comme suit :
18
Machine Translated by Google
Exercices 2.3
1. Calculez les sommes suivantes.
b. 2 + 4 + 8 + 16 + ··· + 1024
F. P 3 +1 g. P =1 P h. P −1=0 1 ( + 1)
=1 =1
2
un. P −1
=0 ( 2 +1)2 b. P −1=2 LG
P =1( − ¯)2
où ¯= P =1
−1
ou
P =1 2 −(P =1 )2
−1
Trouvez et comparez le nombre de divisions, de multiplications et d'additions/soustractions
(les additions et les soustractions sont généralement regroupées) qui sont nécessaires
pour calculer la variance en fonction de chacun des éléments suivants.
ces formules.
Mystère de l'algorithme ( )
//Entrée : Un entier non négatif
←0
pour ←1à faire
← +
retour
19
Machine Translated by Google
8. Déterminez l'ordre asymptotique de croissance pour le nombre total de fois où toutes les portes
sont basculées dans le puzzle des portes de casier (problème 12 dans les exercices 1.1).
9. Prouvez la formule
( + 1)
X =1+2+ ··· + =2
=1
soit par induction mathématique, soit en suivant les idées d'un écolier de 10 ans nommé Karl
Friedrich Gauss (17771855) qui a grandi pour devenir l'un des plus grands mathématiciens de
tous les temps.
20
Machine Translated by Google
10. Calcul mental Un tableau 10×10 est rempli de nombres répétitifs sur ses diagonales, comme
indiqué cidessous. Calculez la somme totale des nombres du tableau dans votre tête.
(après [Cra07, Question 1.33])
12 3 9 dix
2 3 9 dix 11
3 9 dix 11
9 dix 11
9 dix 11
9 dix 11
9 dix 11
9 dix 11 17
9 dix 11 17 18
dix 11 17 18 19
11. Considérons la version suivante d'un algorithme important que nous allons
étudier plus tard dans le livre.
12. Le quartier de von Neumann Combien de carrés un par un sont générés par l'algorithme
qui commence par un seul carré carré et à chacune de ses itérations ajoute de nouveaux
carrés tout autour de l'extérieur. Combien de carrés un par un sont générés à la ème
itération ? [Gar99] (Dans le langage de la théorie des automates cellulaires, la réponse est
le nombre de cellules dans le voisinage de von Neumann de plage .) Les résultats pour
= 0, 1 et
21
Machine Translated by Google
=0 =1 =2
13. Numérotation des pages Trouvez le nombre total de chiffres décimaux nécessaires pour
numéroter les pages dans un livre de 1 000 pages. Supposons que les pages soient
numérotées consécutivement en commençant par 1.
22
Machine Translated by Google
1. Utilisez les formules et règles de sommation courantes répertoriées à l’annexe A. Vous devrez
peutêtre effectuer quelques opérations algébriques simples avant de les appliquer.
2. Trouvez une somme parmi celles de l'annexe A qui ressemble à la somme en question et
essayez de transformer cette dernière en première. Notez qu’il n’est pas nécessaire d’obtenir
une formule fermée pour une somme avant d’établir son ordre de croissance.
4. une. Tracer l'algorithme pour obtenir sa sortie pour quelques petites valeurs de (par exemple,
=1 2 et 3) devraient vous aider si vous en avez besoin.
b. Nous avons été confrontés à la même question pour les exemples évoqués dans le texte.
L’un d’eux est particulièrement pertinent ici.
5. une. Tracer l'algorithme pour obtenir sa sortie pour quelques petites valeurs de (par exemple,
=1 2 et 3) devraient vous aider si vous en avez besoin.
b. Nous avons été confrontés à la même question pour les exemples discutés dans la section.
L’un d’eux est particulièrement pertinent ici.
c. Vous pouvez soit suivre le plan de la section en établissant et calculer une somme, soit
répondre directement à la question. (Essayez de faire les deux.)
e. L’algorithme doitil toujours faire deux comparaisons à chaque itération ? Cette idée peut
être développée davantage pour obtenir une amélioration plus significative que l’évidente :
essayez de le faire pour un tableau à quatre éléments, puis généralisez les informations. Mais
peuton espérer trouver un algorithme avec une efficacité meilleure que linéaire ?
23
Machine Translated by Google
7. Le calcul d’une somme de nombres peut être effectué avec − 1 additions. Combien l'algorithme
faitil en calculant chaque élément de la matrice du produit ?
8. Établissez une somme pour le nombre de fois où toutes les portes ont basculé et trouvez son ordre
asymptotique de croissance en utilisant certaines propriétés de l'annexe A.
X = X−1
+
=1 =1
Le jeune Gauss a calculé la somme 1+2+ ··· + 99 + 100 en remarquant qu'elle peut être calculée
comme la somme de 50 paires, chacune ayant la même somme.
11. une. La constitution d'une somme ne devrait poser aucune difficulté. Cependant, l'utilisation des
formules et des règles de sommation standard nécessitera plus d'efforts que dans les exemples
précédents.
12. Établissez une somme pour le nombre de carrés après itérations de l'algorithme
puis simplifiezle pour obtenir une réponse sous forme fermée.
13. Pour dériver une formule exprimant le nombre total de chiffres en fonction du nombre de pages
où 1 ≤ ≤ 1000 , il est pratique de diviser le domaine de la fonction en plusieurs intervalles
naturels.
24
Machine Translated by Google
dix dix
+1
c. P 1=( + 1) − 3+1= −1
=3
+1 +1 2
=
( +1)( +2) −3= 2+3 −4
d. P = P −P 2 2
=3 =0 =0
2 2
= ( −1) 6(2 −1) ( −1)
e. P−1 ( + 1) = P−1 ( + )= P−1 + P−1 2 +
=0 =0 =0 =0
= ( 2−1)
3
3 +1−1 3 +2−9
F. P 3 +1 = 3 P 3 = 3[P 3 − 1] = 3[ 3−1 2 − 1] =
=1 =1 =0
( +1) = ( +1) =
( +1) ( +1)
g. P P =P P =P 2 2 P 2 2
=1 =1 =1 =1 =1 =1
= 2( +1)2
4
1 − 1
h. P =1 1 ( + 1) = P =1( +1 )
1 − 1 1 − 1 1 − 1 1 − 1 1 =
= ( )=1
1 )+(s’agit
−2(Il 2 d’un
3 ) +cas particulier
+ ( −1 de )+(
la série dite+1 +1 +1
télescopique – voir Annexe
A–P = ( − −1) = − −1.)
2 4 2
2. une. P−1 ( + 1)2 = P−1( +2 + 1) = P−1 4 +2 P−1 2 + P−1 1
=0 =0 =0 =0 =0
2 4
Θ( 5) + Θ( 3) + Θ( ) = Θ( 5) (ou simplement P−1 ( + 1)2 ≈ P−1 Θ( 5))
=0 =0
2
b. P−1 log2 = P−1 2 log2 =2 P−1 log2 = 2 P log2 − 2 log2
=2 =2 =2 =1
25
Machine Translated by Google
c. P ( + 1)2 −1 = P 2 −1 + P 2 −1 = 1 P 2 + P−1 2
=1 =1 =1 2 =1 =0
2 ( −1) ) 2 − 1
d. P−1 P−1 ( + )= P−1 [ P−1 + P−1 ]= P−1 [ + 2 ]= P−1 [ 3
2 2 ]
=0 =0 =0 =0 =0 =0 =0
= 3 2 −
2 P−1 12 P−1 Θ( 3) − Θ( 2) = Θ( 3)
=0 =0
b. Multiplication (ou, si l'on suppose que la multiplication et l'addition prennent le même temps,
l'une ou l'autre des deux).
c. ( )=P 1= .
=1
2 = ( +1)(2 +1)
e. Utilisez la formule P 6 calculer la somme dans Θ(1)
=1
time (qui suppose que le temps des opérations arithmétiques reste constant quelle que soit la
taille des opérandes des opérations).
5. une. Calcule la plage, c'estàdire la différence entre le plus grand et le plus grand du tableau.
les plus petits éléments.
c. ( )= P−1 2 = 2( − 1).
=1
d. Θ( )
e. Une amélioration évidente pour certaines entrées (mais pas pour le pire des cas) consiste à
remplacer les deux instructions if par la suivante :
si [ ] minval minval ← [ ]
26
Machine Translated by Google
( −1)
= P−2 ( −1− )=( − 1) + ( − 2) + +1= 2
=0
e. L'algorithme est optimal car tout algorithme qui résout ce problème doit, dans le pire des cas,
comparer ( − 1) 2 éléments de la partie triangulaire supérieure de la matrice avec leurs
homologues symétriques de la partie triangulaire inférieure, c'est tout ce que fait cet algorithme.
[ ]← [ 0] [0
] pour ←1à − 1 faire
[ ]← [ ]+ [ ] [ ]
8. Soit ( ) le nombre total de fois où toutes les portes ont été basculées. L'énoncé du problème
implique que
( )=X b c
=1
27
Machine Translated by Google
Annexe A),
De la même manière,
( ) X ( − 1) = X 1 −X 1≈ (ln + )− Θ( log )
=1 =1 =1
Remarque : Alternativement, nous pourrions utiliser la formule pour approximer les sommes
par intégrales définies (voir l'annexe A) :
1
( )≤X = (1+X )= (1+ln ) Θ( log )
=1 =21 )≤ (1+Z 1
et
+1
1
( ) X ( −1) = X 1 − − = ln( +1)− Θ( log )
=1 =1 X=1 1 ≥ Z 1
( +1)
9. Voici une preuve par induction mathématique que P = 2 pour chaque
=1
entier positif
1
1(1+1) =
= 1 et ( +1)2 = 1 2
(i) Étape de base : Pour =1 P =P
=1 =1 ¯¯¯ =1
( +1)
(ii) Étape inductive : Supposons que P = 2 pour un entier positif
=1
+1
( +1)( +2) =
Ceci est obtenu comme suit : 2
Nous devons montrer que alors P
=1
+1
( +1) ( +1)+2( +1) +( + 1) = + ( + 1) = ( +1)( +2) 2
=
P =P 22
=1 =1
en remarquant qu'il peut être calculé comme la somme de 50 paires, chacune avec la
somme 101 :
1 + 100 = 2 + 99 = = 50 + 51 = 101
La somme totale est donc égale à 50·101 = 5 050 (L'anecdote historique bien connue
prétend que son professeur a confié cette tâche à une classe pour garder
28
Machine Translated by Google
( +
1) 2 ( )=( + 1) et donc ( )=2
10. Le but ici est de calculer (dans sa tête) la somme des nombres du tableau ci
dessous :
12 3 9 dix
2 3 9 dix 11
3 9 dix 11
9 dix 11
9 dix 11
9 dix 11
9 dix 11
9 dix 11 17
9 dix 11 17 18
dix 11 17 18 19
La deuxième méthode calcule la somme ligne par ligne (ou colonne par colonne).
La somme de la première ligne est égale à 10·11/2 = 55 selon la formule (S2). La
somme des nombres de la deuxième rangée est de 55 + 10 puisque chacun des
nombres est plus grand de 1 que ses homologues de la rangée cidessus. Il en
va de même pour toutes les autres lignes. La somme totale est donc égale à 55
+ (55+10) + (55+20) + ...+ (55+90) = 55·10 + (10+20+...+90) =
29
Machine Translated by Google
Notez que la première méthode utilise la même astuce que Carl Gauss a probablement
utilisée pour trouver la somme des cent premiers nombres entiers (problème 9 des
exercices 2.3). Nous avons également utilisé cette formule (deux fois, en fait) dans la
deuxième solution du problème.
=( + 1)( − 1) + ( − 2) + +3 1
= ( − 1) (2 − 1)
X−1 ( + 2) = X−1 2+ X−1 2 + 2( − 1)
=6 2
=1 =1 =1
( − 1)(2 + 5) 1
= ≈ 3 Θ( 3)
6 3
[ ]← [ ]− [ ]
12. La réponse peut être obtenue par une simple évaluation de la somme
2X _ (2 − 1) + (2 + 1) = 2 2+2 +1
=1
30
Machine Translated by Google
(On peut également obtenir la réponse sous forme fermée en notant que les cellules
sur les diagonales alternées du quartier de von Neumann de portée composent deux
carrés de tailles + 1 et , respectivement.)
13. Soit ( ) le nombre total de chiffres décimaux dans les premiers entiers positifs
(pages du livre). Les neuf premiers nombres sont à un chiffre, donc ( ) = pour 1 ≤
≤ 9 Les 90 nombres suivants de 10 à 99 inclus sont à deux chiffres. Ainsi
( ) = 9 + 2( − 9) pour 10 ≤ ≤ 99
La valeur maximale de ( ) pour cette plage est (99) = 189 De plus, il existe 900
décimales à trois chiffres, ce qui conduit à la formule
La valeur maximale de ( ) pour cette plage est (999) = 2889 En ajoutant quatre
chiffres pour la page 1000, nous obtenons (1000) = 2893
31
Machine Translated by Google
Exercices 2.4
1. Résolvez les relations de récurrence suivantes.
c. ( )= ( − 1) + pour 0 (0) = 0
2. Établir et résoudre une relation de récurrence pour le nombre d'appels effectués par
F( ) l'algorithme récursif de calcul !
Algorithme ( )
//Entrée : Un entier positif
//Sortie : La somme des premiers cubes si
= 1 renvoie 1
sinon renvoie ( − 1) +
un. Configurez et résolvez une relation de récurrence pour le nombre de fois que
l'opération de base de l'algorithme est exécutée.
Algorithme ( )
//Entrée : Un entier positif si
= 1 renvoie 1 sinon
renvoie ( − 1) + 2 −1
un. Définissez une relation de récurrence pour les valeurs de cette fonction et résolvez
la pour déterminer ce que cet algorithme calcule.
32
Machine Translated by Google
5. Tour de Hanoï a. Dans la version originale du puzzle de la Tour de Hanoï, telle qu'elle a
été publiée par Edouard Lucas, un mathématicien français, dans les années 1890, la fin
du monde se produira après que 64 disques auront été retirés d'une tour mystique de
Brahma. Estimez le nombre d’années qu’il faudrait si les moines pouvaient déplacer un
disque par minute. (Supposons que les moines ne mangent pas, ne dorment pas et ne meurent pas.)
7. B une. Montrer que le nombre exact d'ajouts effectués par l'algorithme récursif BinRec( )
pour un entier positif arbitraire est blog2 c
b. Établissez une relation de récurrence pour le nombre d'ajouts effectués par la version
non récursive de cet algorithme (voir Section 2.3, Exemple 4) et résolvezla.
8. une. Concevoir un algorithme récursif pour calculer 2 pour tout entier non négatif basé
sur la formule : 2 = 2 −1 + 2 −1
b. Établissez une relation de récurrence pour le nombre d'ajouts effectués par l'algorithme
et résolvezla.
c. Dessinez un arbre d'appels récursifs pour cet algorithme et comptez le nombre d'appels
effectués par l'algorithme.
33
Machine Translated by Google
10. Considérez l'algorithme suivant pour vérifier si un graphe défini par sa matrice de contiguïté est
complet.
si [ −1 ]=0 renvoyer 0
renvoyer 1
00 0 −1
10 1 −1
= .
.
.
−1 0 −1 −1
noté det peut être défini comme 00 pour = 1 et, pour 1 par la formule
récursive
det = 0 det
X−1
=0
bB Sans résoudre la récurrence, que dire de l'ordre de croissance de la solution par rapport
à !?
12. Le quartier de von Neumann revisité Trouvez le nombre de cellules dans le quartier de von
Neumann d'intervalle (Problème 12 des exercices 2.3) en établissant et en résolvant une
relation de récurrence.
34
Machine Translated by Google
13. Faire frire des hamburgers Il existe hamburgers à frire sur une petite grille pouvant
contenir seulement deux hamburgers à la fois. Chaque hamburger doit être frit des deux
côtés ; faire frire un côté d'un hamburger prend une minute, que l'on fasse frire un ou
deux hamburgers en même temps.
Considérez l'algorithme récursif suivant pour exécuter cette tâche. Si ≤ 2 faites
frire le hamburger (ou les deux hamburgers ensemble si = 2) de chaque côté. Si
2 faites frire deux hamburgers ensemble de chaque côté, puis faites frire les −
2 hamburgers restants selon le même algorithme.
b. Expliquez pourquoi cet algorithme ne fait pas frire les hamburgers dans le temps
minimum pour tous 0.
c. Donnez un algorithme récursif correct qui exécute la tâche dans le temps minimum
pour tout 0 et trouvez une formule fermée pour le temps minimum.
14. B Problème de célébrité Une célébrité parmi un groupe de personnes est une
personne qui ne connaît personne mais qui est connue de tous les autres. La tâche
consiste à identifier une célébrité en posant uniquement des questions aux personnes
du type : « Le connaissezvous ? » Concevez un algorithme efficace pour identifier une
célébrité ou déterminer que le groupe ne possède pas une telle personne. De combien
de questions votre algorithme atil besoin dans le pire des cas ? [Homme89]
35
Machine Translated by Google
1. Chacune de ces récurrences peut être résolue par la méthode des sousrécurrences rétrospectives.
institutions.
4. une. Notez qu'il vous est demandé ici une récurrence pour les valeurs de la fonction, et non
une récurrence pour le nombre de fois que son opération est exécutée. Suivez simplement
le pseudocode pour le configurer. Il est plus facile de résoudre cette récurrence par des
substitutions directes (voir Annexe B).
b. Cette question est très similaire à celle dont nous avons déjà discuté.
5. une. Utilisez la formule pour le nombre de mouvements de disque dérivée dans la section.
6. L'algorithme requis et la méthode de son analyse sont similaires à ceux de la version classique
du puzzle. En raison de la contrainte supplémentaire, plus de deux instances plus petites du
puzzle doivent être résolues ici.
7. une. Considérons séparément les cas de valeurs paires et impaires de et montrons que
pour les deux blog2 c satisfait la relation de récurrence et sa condition initiale.
d. Une mauvaise classe d’efficacité d’un algorithme ne signifie pas en soi que
36
Machine Translated by Google
l'algorithme est mauvais. Par exemple, l’algorithme classique du puzzle de la Tour de Hanoï est
optimal malgré son efficacité en temps exponentiel. Par conséquent, une affirmation selon
laquelle un algorithme particulier n’est pas bon nécessite une référence à un meilleur.
10. Obtenez le nombre d'opérations de base soit en résolvant une relation de récurrence, soit en
calculant directement le nombre d'éléments de la matrice de contiguïté que l'algorithme vérifie
dans le pire des cas.
11. une. Utilisez la formule de la définition pour obtenir la relation de récurrence du nombre de
multiplications effectuées par l'algorithme.
12. Vous pourriez utiliser la symétrie du quartier pour obtenir une formule simple pour le nombre de
carrés ajoutés au quartier à la ième itération de l'algorithme.
13. Le temps minimum nécessaire pour faire frire trois hamburgers est plus petit
plus de quatre minutes.
14. Résolvez d'abord une version plus simple dans laquelle une célébrité doit être présente.
37
Machine Translated by Google
( )= ( − 1) + 5 =
[ ( − 2) + 5] + 5 = ( − 2) + 5 · 2 = [ (
− 3) + 5] + 5 · 2 = ( − 3) + 5 · 3
=
= ( − )+5 ·
=
= (1) + 5 · ( − 1) = 5( − 1)
( )= (1) + ( − 1) = 0 + 5( − 1) = 5( − 1)
( )=3 ( − 1) =
3[3 ( − 2)] = 32 ( − 2) =
32[3 ( − 3)] = 33 ( − 3)
=
=3 ( − )
=
=3 −1 (1) = 4 · 3 −1
( )= (1) −1 = 4 · 3 −1
c. ( )= ( − 1) + pour 0 (0) = 0
( )= ( − 1) + =
[ ( − 2) + ( − 1)] + = ( − 2) + ( − 1) + =[ ( −
3) + ( − 2)] + ( − 1) + = ( − 3) + ( − 2) + ( − 1) +
=
= ( − )+( − + 1) + ( − + 2) + ··· +
=
( + 1)
= (0) + 1 + 2 + ··· + =
2
38
Machine Translated by Google
(2 )= (2 −1)+2 =
[ (2 −2)+2 −1]+2 = (2 −2)+2 −1 + 2 =
[ (2 −3)+2 −2]+2 −1 + 2 = (2 −3)+2 −2 + 2 −1 + 2
=
= (2 − )+2 − +1 + 2 − +2 + ··· + 2
=
(3 )= (3 −1)+1 =
[ (3 −2) + 1] + 1 = (3 −2)+2 =
[ (3 −3) + 1 ] + 2 = (3 −3)+3
=
= (3 − )+
=
= (3 − )+ = (1) + = 1 + log3
( )= ( − 1) + 1 = [ ( − 2) + 1] + 1 = ( − 2) + 2 = = ( −
)+ = = (0) + =1+
( )= ( − 1) + 2 (1) = 0
39
Machine Translated by Google
( )= ( − 1) + 2 = [ (
− 2) + 2] + 2 = ( − 2) + 2 + 2 = [ ( − 3) + 2] +
2+2= ( − 3) + 2 + 2 + 2
=
= ( − )+2
=
= (1) + 2( − 1) = 2( − 1)
Algorithme NonrecS( )
//Calcule la somme des premiers cubes de manière non récursive //
Entrée : Un entier positif
//Sortie : La somme des premiers cubes. ←
1 pour
← 2 pour faire
← +
retour
X 2=2X 1 = 2( − 1)
=2 =2
Il s'agit exactement du même nombre que dans la version récursive, mais la version non
récursive ne supporte pas la surcharge de temps et d'espace associée à la pile de récursion.
Le calcul des premiers termes de la séquence donne ce qui suit : (2) = (1) + 2
· 2 − 1=1+2 · 2 − 1 = 4 ; (3) = (2) + 2 · 3 − 1=4+2
· 3 − 1 = 9; (4) = (3) + 2 · 4 − 1=9+2 · 4 − 1 = 16
40
Machine Translated by Google
264 − 1
≈3 5 · 1013 ans
60 · 24 · 365
( + 1) = 2 ( ) pour 1 ≤ (1) = 1
41
Machine Translated by Google
Il peut être résolu par des substitutions vers l'arrière comme suit
( )=3 ( − 1) + 2 = 3[3 (
− 2) + 2] + 2 = 32 ( − 2) + 3 · 2+2 = 32[3 ( − 3) + 2] + 3 ·
2+2=33 ( − 3) + 32 · 2+3 · 2+2
=
42
Machine Translated by Google
b. ( )=2 ( − 1) + 1 (0) = 0
( )=2 ( − 1) + 1
= 2[2 ( − 2) + 1] + 1 = 22 ( − 2) + 2 + 1
= 22[2 ( − 3) + 1] + 2 + 1 = 23 ( − 3) + 22 +2+1
=
=2 ( − )+2 −1 + 2 −2 + ··· + 1
=
c. L'arbre des appels récursifs pour cet algorithme se présente comme suit :
n1 n1
0 0 0 0 0 0 0 0
A noter qu'il possède un niveau supplémentaire par rapport à l'arbre similaire de la Tour.
du puzzle de Hanoï.
d. C'est un très mauvais algorithme car il est largement inférieur à l'algorithme qui multiplie
simplement un accumulateur par 2 fois, sans parler
des algorithmes beaucoup plus efficaces discutés plus loin dans le livre. Même si seulement
les ajouts sont autorisés, ajouter deux fois 2 −1 est mieux que cet algorithme.
43
Machine Translated by Google
9. une. L'algorithme calcule la valeur du plus petit élément dans un élément donné
tableau.
( )= ( − 1) + 1 pour 1 (1) = 0
10. Soit ( ) le nombre de fois que l'élément de la matrice de contiguïté est vérifié dans
le pire des cas (le graphique est complet). On a la récurrence suivante pour ( )
( )= ( − 1) + − 1 pour 1 (1) = 0
( )= ( − 1) + −1=
[ ( − 2) + − 2] + −1=
[ ( − 3) + − 3] + −2+ −1
=
Ce résultat pourrait également être obtenu directement en observant que dans le pire
des cas l’algorithme vérifie chaque élément situé en dessous de la diagonale principale
de la matrice de contiguïté d’un graphe donné.
11. une. Soit ( ) le nombre de multiplications effectuées par l'algorithme basé sur la formule
det =P −1 =0 0 det Sin'inclut pas les multiplications par
on , qui
sont juste ±1 alors
( )= X−1 ( ( − 1) + 1)
=0
c'est à dire,
44
Machine Translated by Google
12. Le nombre de carrés ajoutés à la ème itération à chacun des quatre côtés
symétriques du quartier de von Neumann est égal à On obtient donc la
récurrence suivante pour ( ) le nombre total de carrés dans le quartier après la
ième itération :
( )= ( − 1) + 4 pour 0 et (0) = 1
( )= ( − 1) + 4 =
[ ( − 2) + 4( − 1)] + 4 = ( − 2) + 4( − 1) + 4 =[ (
− 3) + 4( − 2)] + 4( − 1) + 4 = ( − 3) + 4( − 2) + 4( − 1) + 4
=
= ( − ) + 4( − + 1) + 4( − + 2) + ··· + 4
=
13. une. Soit ( ) le nombre de minutes nécessaires pour faire frire hamburgers
selon l'algorithme donné. On a alors la récurrence suivante pour ( ):
45
Machine Translated by Google
et n'importe quel algorithme ne peut pas faire frire plus de deux côtés en une minute.
L’algorithme est également évidemment optimal pour le cas trivial où = 1 nécessite
deux minutes pour faire frire un seul hamburger des deux côtés.
Remarque : Le cas de = 3 est un cassetête bien connu, qui remonte au moins à 1943.
Sa version algorithmique pour un arbitraire est incluse dans Algorithmic Puzzles de
A. Levitin et M. Levitin, Oxford University Press, 2011, problème 16.
14. Le problème peut être résolu par un algorithme récursif. En effet, en posant une seule
question, nous pouvons éliminer de 1 le nombre de personnes pouvant être une célébrité,
résoudre le problème pour le groupe restant de − 1 personnes de manière récursive,
puis vérifier la solution renvoyée en ne posant pas plus de deux questions. . Voici une
description plus détaillée de cet algorithme :
Étape 3 Si la solution renvoyée à l'étape 2 indique qu'il n'y a aucune célébrité parmi le groupe
de − 1 personnes, le plus grand groupe de personnes ne peut pas non plus contenir
de célébrité. Si l'étape 2 a identifié comme célébrité une personne autre que A ou B, par
exemple C, demandez si C connaît la personne supprimée à l'étape 1 et, si la réponse
est non, si la personne supprimée à l'étape 1 connaît C. Si la personne supprimée à
l'étape 1 connaît C. "Si la réponse à la deuxième question est oui", renvoyez C comme
une célébrité et "pas de célébrité" dans le cas contraire. Si l'étape 2 a identifié B comme
une célébrité, demandez simplement si B connaît A : renvoyez B comme une célébrité si
la réponse est non et "non". "célébrité" sinon. Si l'étape 2 a identifié A comme une
célébrité, demandez si B connaît A : renvoyez A comme une célébrité si la réponse est
oui et "pas de célébrité" dans le cas contraire.
La récurrence pour ( ), le nombre de questions nécessaires dans le pire des cas, est la
suivante :
46
Machine Translated by Google
Exercices 2.5
1. Trouvez un site Web dédié aux applications des nombres de Fibonacci et
étudiezle.
2. Le problème des lapins de Fibonacci Un homme a placé deux lapins dans un endroit
entouré d'un mur. Combien de couples de lapins y auratil dans une année si le premier
couple de lapins (mâle et femelle) est un nouveauné et que tous les couples de lapins ne
sont pas fertiles pendant leur premier mois de vie mais donnent ensuite naissance à un
nouveau couple mâle/femelle à la fin de chaque mois ?
6. Les valeurs maximales des types primitifs Java int et long sont respectivement 231 −1 et
263 −1. Trouvez le plus petit pour lequel le ème nombre de Fibonacci ne tiendra pas
dans une mémoire allouée pour a. le type int. b. le type long.
7. Considérons l'algorithme récursif basé sur une définition pour calculer le ème nombre de
Fibonacci ( ). Soit ( ) et ( ) le nombre de fois que (1) et (0) sont
respectivement calculés. Prouver que a. ( )= ( ) b.
( )= ( − 1)
9. Prouver l'égalité
· ( (− 1)+ 1)( ¸ =) · 0( 1 1
) 1¸ pour ≥1
10. B Combien de divisions modulo l'algorithme d'Euclide effectuetil sur deux nombres de
Fibonacci consécutifs ( ) et ( − 1) comme entrée de l'algorithme ?
11. Disséquer un rectangle de Fibonacci Étant donné un rectangle dont les côtés sont deux
nombres de Fibonacci consécutifs, concevez un algorithme pour le disséquer en carrés
dont pas plus de deux carrés sont de la même taille. Quelle est la classe d’efficacité
temporelle de votre algorithme ?
47
Machine Translated by Google
12. Dans le langage de votre choix, implémentez deux algorithmes pour calculer les
cinq derniers chiffres du ème nombre de Fibonacci qui sont basés sur (a)
l'algorithme récursif basé sur la définition F(n) ; (b) l'algorithme itératif basé sur la
définition Fib(n). Réalisez une expérience pour trouver la plus grande valeur de
pour laquelle vos programmes s'exécutent en moins d'une minute sur votre ordinateur.
48
Machine Translated by Google
6. Utilisez une formule approximative pour ( ) pour trouver les plus petites valeurs de à
dépasser les chiffres donnés.
8. Toutes les informations nécessaires à chaque itération de l'algorithme sont les valeurs des
deux derniers nombres de Fibonacci consécutifs. Modifiez l'algorithme pour profiter de ce
fait.
10. Considérons d'abord un petit exemple tel que le calcul de pgcd(13 8).
12. Les derniers chiffres d'un entier peuvent être obtenus en calculant mod 10
Effectuer toutes les opérations de vos algorithmes modulo 10 (voir annexe A) vous
permettra de contourner la croissance exponentielle des nombres de Fibonacci. Notez
également que la section 2.6 est consacrée à une discussion générale de l’analyse
empirique des algorithmes.
49
Machine Translated by Google
Le tableau suivant donne les valeurs des treize premiers termes de la séquence, appelés
nombres de Fibonacci, définis par cette relation de récurrence :
0 1 2 3 4 5 6 7 8 9 10 11 12 ( ) 1 1 2 3 5 8 13 21 34 55 89 144 233
Notez que ( ) diffère légèrement de la séquence canonique de Fibonacci, qui est définie
par la même équation de récurrence ( )= ( − 1) + ( −2) mais les conditions
initiales différentes, à savoir ( 0) = 0 et (1) = 1 Évidemment, ( )= ( + 1) pour
≥0
Remarque : Le problème a été inclus par Léonard de Pise (alias Fibonacci) dans son livre
de 1202 Liber Abaci, dans lequel il préconisait l'utilisation des chiffres hindousarabes.
En résolvant cette récurrence soit « à partir de zéro », soit mieux encore en remarquant
que la solution a une longueur d'avance sur la séquence canonique de Fibonacci ( ),
nous obtenons ( )= ( + 1) pour ≥1
Par conséquent, le nombre de nombres pairs parmi les premiers nombres de Fibonacci
peut être obtenu par la formule d 3e
50
Machine Translated by Google
6. une. La question est de trouver la plus petite valeur de telle que ( ) 231−1
1
En utilisant la formule ( )=5
√ arrondie à l'entier le plus proche, on obtient
(approximativement) l'inégalité suivante :
1
231 − 1 ou √ 5(231 − 1) √5
Après avoir pris les logarithmes naturels des deux côtés, nous obtenons
ln(√5(231 − 1)) ln
≈ 46 3
b. De même, nous devons trouver la plus petite valeur de telle que ( ) 263 − 1. Ainsi,
1
263 − 1 ou √ 5(263 − 1) √5
ou, après avoir pris les logarithmes naturels des deux côtés,
ln(√5(263 − 1)) ln
≈ 92 4
51
Machine Translated by Google
c'estàdire que c'est la même chose que les nombres de Fibonacci décalés d'une position
vers la droite. Cela peut être formellement prouvé en vérifiant que la séquence ( −1)
(dans laquelle (−1) est défini comme 1) satisfait la relation de récurrence
Cela peut également être prouvé soit par récurrence mathématique, soit en dérivant une
formule explicite pour ( ) et en montrant que cette formule est la même que la valeur de
la formule explicite pour ( ) avec remplacé par −1
8. Algorithme Fib2( )
//Calcule le ième nombre de Fibonacci en utilisant seulement deux variables //
Entrée : un entier non négatif
//Sortie : Le ième nombre de Fibonacci ←
0; ← 1 pour
← 2 pour faire
← +
← −
si = 0 retourner 0
sinon retourner
− 1) + 1)
( ¸) = · (0 1) ( 11¸ pour un entier positif · (
( () +( 2) +¸ =1)· 0 1
( + 1) 11¸ +1 ·
En effet,
1 1111¸¸· +1
( = −· 01)1 1 (1 ¸ ) · (0 1) 1 1( ¸ ·+1
0 1) ¸= · 0
52
Machine Translated by Google
10. La principale observation ici est le fait que l'algorithme d'Euclide remplace deux
nombres de Fibonacci consécutifs comme entrée par une autre paire de nombres de
Fibonacci consécutifs, à savoir :
( )= ( − 1) + ( − 2) 2 ( − 1)
( )= ( − 1) + 1 pour ≥4 (3) = 1
dont la condition initiale (3) = 1 est obtenue en traçant l'algorithme sur la paire
d'entrées (3) (2) soit 2,1. La solution à cette récidive est :
( )= − 2 pour chaque ≥3
11×11×
3 ×3
×22
8×8
5 ×5
53
Machine Translated by Google
12. n/a
54
Machine Translated by Google
Exercices 2.6
1. Considérons l'algorithme de tri bien connu suivant (nous l'étudierons
plus tard dans le livre) avec un compteur inséré pour compter le nombre de comparaisons clés.
[ + 1] ← [ ]
← −1
[ + 1] ←
b. Analyser les données obtenues pour former une hypothèse sur l'algorithme
efficacité moyenne.
c. Estimez le nombre de comparaisons clés auxquelles on peut s'attendre pour un tableau généré
aléatoirement de taille 10 000, trié par le même algorithme.
4. Hypothèse d'une classe d'efficacité probable d'un algorithme basée sur ce qui suit
observations empiriques du nombre de ses opérations de base :
taille 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
compte 11 966 24 303 39 992 53 010 67 272 78 692 91 274 113 063 129 799 140 538
55
Machine Translated by Google
7. une. Trouver empiriquement le plus grand nombre de divisions effectuées par l'algorithme
d'Euclide pour calculer pgcd( ) pour 1 ≤ ≤ ≤ 100
b. Pour chaque entier positif trouver empiriquement la plus petite paire d'entiers 1 ≤ ≤
≤ 100 pour laquelle l'algorithme d'Euclide doit faire
divisions afin de trouver pgcd( ).
1
(5) = (1 + 2 + 3 + 2 + 1) = 1 8
5
10. Exécutez une expérience de synchronisation pour les trois algorithmes de calcul du pgcd ( )
présentés à la section 1.1.
56
Machine Translated by Google
2. Déboguez d'abord votre comptage de comparaison et votre génération d'entrées aléatoires pour les
petites tailles de tableau.
3. Sur un ordinateur de bureau raisonnablement rapide, vous pourriez très bien obtenir un temps nul, du
moins pour les plus petites tailles de votre échantillon. La section 2.6 mentionne une astuce pour
surmonter cette difficulté.
8. Obtenez les données empiriques pour les valeurs aléatoires de dans une plage comprise, disons,
entre 102 et 104 ou 105 et tracez les données obtenues. (Vous souhaiterez peutêtre utiliser différentes
échelles pour les axes de votre système de coordonnées.)
9. n/a
10. n/a
57
Machine Translated by Google
si ≥0 ← +1
2. une. Il faut s'attendre à des nombres très proches de 2 4 (le nombre théorique approximatif de
comparaisons clés effectuées par tri par insertion sur des tableaux aléatoires).
b. La proximité des ratios ( ) 2 par rapport à une constante suggère l’ efficacité moyenne
Θ( 2). La même conclusion peut également être tirée en observant la multiplication par quatre du
nombre de comparaisons clés en réponse au doublement de la taille du tableau.
3. Voir les réponses de l'exercice 2. Notez cependant que les données temporelles sont intrinsèquement
beaucoup moins précises et volatiles que les données de comptage.
6. La fonction lg lg croît beaucoup plus lentement que la fonction à croissance lente lg De plus,
si nous transformons les tracés par substitution =2 , le tracé de la première semblerait
logarithmique tandis que celui de la seconde semblerait linéaire.
58
Machine Translated by Google
9. n/a
10. n/a
59