[PDF] [PDF] la suite de Fibonacci - IGM





Previous PDF Next PDF



CHAPITRE III Programmation Dynamique III.1 Exemple introductif

La suite de Fibonacci est la suite d'entier (un)n?0 définie Pour analyser la complexité de cet algorithme on remarque que chaque appel `a Fibonacci().



Complexité (suite)

Nombres de Fibonacci. Définition. F0 = 1. F1 = 1. Fn = Fn?2 + Fn?1 pour n ? 2. Question. Quelle est la complexité des algorithmes de calcul des.



Complexité en algorithmique

Complexité : suite de Fibonacci. Temps de calcul avec l'algorithme récursif. Algorithme fib rec(n: entier) si n<2 alors renvoyer 1.



Calcul des nombres de Fibonacci [cx03] - Exercice

Montrez par récurrence que la complexité (en nombre d'additions) de cet algorithme est en ?(2n/2). Solution simple. On veut montrer qu'il existe une constante c 



Récursivité

4 oct. 2017 4 Complexité d'un algorithme récursif ... 4.4 Complexité exponentielle . ... Implémentation Python de la suite de Fibonacci récursive ...



Calcul des nombres de Fibonacci [cx03] - Exercice

Montrez par récurrence que la complexité (en nombre d'additions) de cet algorithme est en ?(2n/2). Solution simple. On veut montrer qu'il existe une constante c 



Complexité de lalgorithme dEuclide

Même si la complexité algorithmique est un domaine qui a connu un essor En appliquant cet algorithme `a deux nombres de Fibonacci consécutifs ...



Trois algorithmes de calcul des nombres de Fibonacci

Dans cette série d'exercices nous nous intéressons de la complexité dite arithmétique. Ce modèle prend en compte uniquement le nombre des opérations.



TD dalgorithmique avancée Corrigé du TD 2 : récursivité

Montrez que la complexité (en nombre d'additions) de cet algorithme est Écrire un algorithme récursif qui calcule pour n > 0



Escapade algorithmique avec Fibonacci

Nous aborderons des thèmes au coeur du programme commun d'informatique des classes préparatoires notamment : algorithme d'Euclide



[PDF] Complexité (suite) - IREM Clermont-Ferrand

La complexité du tri par base est alors en O(n) puisqu'on applique un nombre fixe de fois un algorithme linéaire Page 89 Les nombres de Fibonacci Les tris



[PDF] la suite de Fibonacci - IGM

Pour analyser la complexité de cet algorithme on remarque que chaque appel `a Fibonacci() se fait en temps constant (si on ne tient pas compte des appels 



[PDF] Définition de la complexité algorithmique - exemple Fibonacci - limsi

La complexité d'un algorithme est la fonction mathématique qui décrit en fonction de la taille des données d'entrées (par exemple le nombre de mots) 



[PDF] Calcul des nombres de Fibonacci [cx03] - Exercice - Unisciel

Solution simple La complexité de l'algorithme fibRt en nombre d'additions est donnée par la récurrence T(n) = 1+ T(n ? 1) On a donc T(n) = n ? 1 pour 



[PDF] Trois algorithmes de calcul des nombres de Fibonacci - LaBRI

Dans cette série d'exercices nous nous intéressons de la complexité dite arithmétique Ce modèle prend en compte uniquement le nombre des opérations



[PDF] Complexité en algorithmique

Complexité : suite de Fibonacci Temps de calcul avec l'algorithme récursif Algorithme fib rec(n: entier) si n



[PDF] irem de lyon

Complexité d'un algorithme Trois questions à se poser quand on fabrique un algorithme : raisonnable? i complexité 1 Calculs des nombres de Fibonacci



[PDF] Calculs de complexité dalgorithmes

?Complexité des algorithmes ?Un algorithme à partir d'une donnée établit un résultat Leonardo de Pise surnommé Fibonacci



[PDF] Complexité des algorithmes — - Pascal Delahaye

L'analyse de la complexité d'un algorithme consiste `a évaluer : de la fonction récursive donnant la valeur du terme un de la suite de Fibonacci



[PDF] TD : La complexité temporelle Exemple 1 : Fibonacci

24 nov 2017 · Nous allons évaluer le temps de calcul de chacun des algorithmes de calcul précédents de façon expérimentale et théorique 1) Etude 

  • Quelle est la complexité de l'implémentation de Fibonacci ?

    La complexité est en O(n × m) en temps et en espace. On remarque qu'on peut faire le calcul en ne gardant en mémoire que deux lignes ou deux colonnes (puisqu'on ne regarde que dans la colonne d'avant et la ligne d'avant), ce qui permet de ne stocker que O(n) valeurs.
  • Comment déterminer la complexité d'un algorithme ?

    Pour calculer la complexité d'un algorithme: On calcule la complexité de chaque partie de l'algorithme. On combine ces complexités conformément aux règles déjà vues. On effectue sur le résultat les simplifications possibles déjà vues.
  • Quelle est la complexité de la fonction factorielle ?

    La complexité d'un algorithme récursif se fait par la résolution d'une équation de récurrence en éliminant la récurrence par substitution de proche en proche. Exemple 1 : La fonction factorielle (avec T(n) le temps d'exécution nécessaire pour un appel à Facto(n)).
  • On mesure alors la complexité en temps d'un algorithme comme le nombre de ces opérations élémentaires. Par exemple, en considérant élémentaire l'addition de 2 chiffres, poser l'addition de deux nombres de n chiffres nous fera effectuer n additions à 1 chiffre, la complexité sera donc de n.
[PDF] la suite de Fibonacci - IGM

CHAPITREIIIProgrammation Dynamique

III.1Exemple introductif : la suite de Fibonacci

La suite de Fibonacci est la suite d"entier (un)n≥0d´efinie r´ecursivement par : ?u 0= 0 u 1= 1 u n=un-1+un-2?n≥2

5:returnFibonacci(n-1) + Fibonacci(n-2)6:end if

7:end procedure

Pour analyser la complexit´e de cet algorithme, on remarque que chaque appel `a Fibonacci()

se fait en temps constant (si on ne tient pas compte des appels r´ecursifs lanc´es). Il suffit donc

de compter le nombre d"appels, pournen entr´ee, que l"on va noterAn. La suiteAnv´erifie : ?a 0= 1 a 1= 1 a n= 1 +an-1+an-2?n≥2

Cette suite ressemble `a la suite de Fibonacci. On peut l"´etudier math´ematiquement et on trouve

queAn?Θ(φn), o`uφ=1+⎷5 2 ≈1,6 est le nombre d"or. La complexit´e de l"algorithme est donc exponentielle. D"o`u vient une telle complexit´e? Si on d´eveloppe le calcul deu6, on a : u On remarque que les mˆemes calculs sont effectu´es un nombre important de fois.

Pour am´eliorer la performance de l"algorithme, on peut stocker les r´esultats interm´ediaires

obtenus et les r´eutiliser directement quand on en a besoin au lieu de les recalculer. C"est l"id´ee

5:ifT[n] n"est pas d´efinithen6:T[n] = Fibonacci(n-1) + Fibonacci(n-2)7:end if

8:returnT[n]9:end procedure

La complexit´e devient alors lin´eaire : on ne remplit la caseT[n] qu"une fois, donc le nombre fois quand on calcule Fibonacci(i+ 1) et une fois quand on calcule Fibonacci(i+ 2). On peut d´e-r´ecursiver l"algorithme. Il s"agit de remplir le tableauTdirectement case par

case. On s"aper¸coit qu"il faut faire le contraire de ce que fait l"algorithme r´ecursif : commencer

par les petites valeurs.Algorithm 3Fibonacci1:procedureFibonacci(n)2:AllouerTavecn+ 1 cases3:T[0] = 04:T[1] = 15:foride 2 `an-1do6:T[i] =T[i-1] +T[i-2]7:end for

8:returnT[n]9:end procedure

Il est imm´ediat que l"algorithme est bien lin´eaire. Il prend aussi une quantit´e de m´emoire

lin´eaire.

La derni`ere´etape consiste `a essayer de gagner en m´emoire en ne m´emorisant que le n´ecessaire.

Pour notre exemple, il suffit de se rappeler des deux derniers termes pour calculer le nouveau.

On peut donc n"utiliser qu"un espace m´emoire constant (Voir l"algo 4).III.2Principe g´en´eral

On part d"un probl`eme dont on peut trouver une solution optimale `a partir des solutions optimales de sous-probl`emes du mˆeme type. Quand ses sous-probl`emes se recouvrent, c"est-`a-

dire que leurs r´esolutions ont des calculs en commun, on stocke en m´emoire les calculs d´ej`a

effectu´es afin de ne pas avoir `a les refaire dans le traitement d"un autre sous-probl`eme. Pour r´esoudre un probl`eme en utilisant la programmation dynamique il faut :2

Algorithm 4Fibonacci1:procedureFibonacci(n)2:AllouerTavecn+ 1 cases3:a= 04:b= 15:foride 2 `an-1do6:c=b7:b=a+b8:a=b9:end for

10:returnb11:end procedure

1.Trouver un d´ecoupage en sous-probl`emes plus petits, de sorte que les sous-probl`emes se

recouvrent.2.M´emoriser les calculs d´ej`a effectu´es pour ne pas lancer plusieurs fois le mˆeme appel.

3.Essayer de d´e-r´ecursiver l"algorithme, pour obtenir un algorithme it´eratif. Il faut en g´en´eral

commencer par les plus petits objets pour reconstruire des objets de plus en plus grands.4.Essayer de gagner de l"espace m´emoire en "jetant" ce qui ne sert plus, ou plutˆot en

r´eutilisant l"espace m´emoire qui ne sert plus.

Dans le cadre du cours on vous demande surtout de faire 1. et 2., parfois 3.III.3Exemple : le sac `a dos avec r´ep´etitions

On dispose dentypes d"objets diff´erents. Lei-`eme objetxia un poidspoids[i] et un prix prix[i]. L"endroit contient plein d"exemplaires de chaque type d"objet. On dispose ´egalement d"un sac de capacit´eC, le poids maximal qui peut ˆetre dedans. Le probl`eme est d"optimiser la valeur totale du sac : on met autant d"exemplaire de chaque objet que l"on veut, tant qu"on ne d´epasse pas la capacit´e, et on veut que la somme des prix soit maximale. On consid`ere que toutes les valeurs sont des entiers. La solution s"obtient en faisant le d´ecoupage suivant : tout objetxide poids inf´erieur ou

´egale `aCest plac´e dans le sac, il reste donc `a traiter le sous-probl`eme avecC-poids[i], ce qu"on

fait r´ecursivement, en ajoutant le prix dexipour avoir la valeur optimale d"un sac contenantxi. Une fois qu"on a calcul´e la valeur optimale d"un sac contenantx1, la valeur optimale d"un sac contenantx2, ...on prend la plus grande de toute ces valeurs. Math´ematiquement, cela donne, en notantSac(C) la valeur optimale pour une capacit´eC:

Sac(C) =?

0 si tous les poids sont sup´erieurs `aC,

max On peut traduire directement l"expression math´ematique en algorithme r´ecursif, et utiliser la m´emorisation sur les valeurs de la capacit´e pour faire de la programmation dynamique. La complexit´e du r´esultat est enO(Cn). Quand on d´er´ecursive on obtient l"algorithme ci-dessous.3

11:end if

12:end for

13:T[p] =m14:end for

15:returnT[C]16:end procedure

III.4Exemple : Distance d"´edition

Nous d´eveloppons `a pr´esent un exemple classique d"utilisation de la programmation dyna- mique : le calcul de ladistance d"´edition. Soientuetvdeux mots sur un alphabetA. La distance d"´edition entreuetvest le nombre

minimum d"op´erations `a effectuer pour transformeruenv. Les op´erations autoris´ees sont :-Insertion : on ajoute une lettre deAdansu, o`u on veut.-Suppression : on enl`eve une lettre deu.-Substitution : on change une lettre deuen une autre lettre (´eventuellement la mˆeme, ce

qui ne change alors pas le mot). Exemple :u=veritesetv=eviter. On peut faire la suite minimale de transformations suivante :

Comme il n"y a pas de transformation en moins d"´etapes (c"est affirm´e, non prouv´e, mais on

peut tester toutes les possibilit´es), la distance d"´edition entreuetvest 3.

Aligments :on repr´esente les op´erations effectu´ees pour passer d"un mot `a l"autre par un

alignement. Voil`a un alignement entrechienetniche: w=?c h i e n- - -n i-c h e? Si on regarde colonne par colonne un alignement, on voit qu"on a une suite de transformations qui permettent de passer du mot en haut au mot en bas. Une colonne de la forme?α -?correspond `a une suppression deα. Une colonne de la forme?- β?correspond `a une insertion deβ. Une colonne de la forme?α β?correspond `a une substitution deαenβ. Le coˆut pour passer du premier mot au deuxi`eme en utilisant ces transformations est exactement le nombre de colonnes o`u les deux lettres (en haut et en bas sont diff´erentes). Sur l"exemple, il y a 7 colonnes, dont une?i i?avec deux fois la mˆeme lettre, pour un coˆut total de 6. Unalignment optimalentreuetvest un alignement qui r´ealise la distance d"´edition, c"est- `a-dire qui minimise le coˆut parmi tous les alignements et qui a donc pour coˆutd(u,v).4

Remarque importante :Soitw=?xα

yβ?un alignement optimal de derni`ere lettre?α

β?, alors?x

y? est ´egalement un alignement optimal. Cela donne une piste pour la programmation dynamique, puisqu"on peut se ramener `a des alignements de mots plus petits. On distingue trois cas pour un alignement deuaavecvb:-Si la derni`ere colonne est -?, cela signifie que la derni`ere op´eration effectu´ee est une suppression. Donc n´ecessairement on a supprim´e la derni`ere lettre deua, c"est-`a-direa: on a doncα=a. Ce qui reste apr`es, si l"alignement ´etait optimal, c"est un alignement

optimal entreuetvb, qui est donc de poidsd(u,vb). Le coˆut total est doncd(u,vb) + 1.-Si la derni`ere colonne est

β?, cela signifie que la derni`ere op´eration effectu´ee est une

insertion. Donc n´ecessairement on a ins´er´e la derni`ere lettre devb, c"est-`a-direb: on a

doncβ=b. Ce qui reste apr`es, si l"alignement ´etait optimal, c"est un alignement optimal

entreuaetv, qui est donc de poidsd(ua,v). Le coˆut total est doncd(ua,v) + 1.-Si la derni`ere colonne est

β?, avecαetβqui ne sont pas des-, cela signifie que la derni`ere

op´eration effectu´ee est soit une substitution, soit rien. Le "rien" n"arrive que quandα=β.

Ce qui reste apr`es, si l"alignement ´etait optimal, c"est un alignement optimal entreuetv,

qui est donc de poidsd(u,v). Le coˆut total est doncd(u,v) +δa,b, o`uδa,bvaut 1 siα?=β

et 0 sinon. On en d´eduit la formule r´ecursive pourd(ua,vb) : d(ua,vb) = min{d(ua,v) + 1,d(u,vb) + 1,d(u,v) +δa,b}. Il nous manque les conditions aux bords, mais on remarque qued(ε,v) =|v|(en ins´erant les lettres devune par une) etd(u,ε) =|u|(en supprimant les lettres deuune par une). Pour les algorithmes ci-dessous, les indices des lettres d"un motude taillenvont de 0 `a

n-1 etu[0,i] est le pr´efixeu0u1···uideude longueuri+ 1 (ou le mot vide siiest n´egatif).

On utilise la notationu[i] pour d´esigner la lettreui. Le motuest de taillenet le motvde taille m.Algorithm 6Distance d"´edition1:procedured(u,v)2:ifu=εthen3:returnm4:end if

5:ifv=εthen6:returnn7:end if

8:ifu[n-1] ==v[m-1]then9:δ= 010:else

11:δ= 112:end if

13:returnmin(d(u,v[0,m-2]) + 1,d(u[0,n-2],v) + 1,d(u[0,n-2],v[0,m-2]) +p)14:end procedure

On retombe donc sur un algorithme r´ecursif avec des sous-probl`emes qui se recouvrent, on

va stocker dans un tableau les calculs interm´ediaires, c"est `a dire les distance d"´edition de tous

les pr´efixes deuetv. On noteT[][] ce tableau; on stocke dansT[i][j] la distance d"´edition entre

le pr´efixe de longueurideuet celui de longueurjdev. Plutˆot que de faire des appels r´ecursifs,

on va remplirTdans l"ordre de la taille des pr´efixes.5 Algorithm 7Distance d"´edition it´eratif1:procedured(u,v)2:foride 0 `ando3:T[i][0] =i4:end for

5:forjde 0 `amdo6:T[0][j] =j7:end for

8:foride 1 `ando9:forjde 1 `amdo10:ifu[i-1] ==v[j-1]then11:δ= 012:else

13:δ= 114:end if

15:T[i][j] = min(T[i][j-1] + 1,T[i-1][j] + 1,T[i-1][j-1] +δ)16:end for

17:end for

18:returnT[n][m]19:end procedure

La complexit´e est enO(n×m) en temps et en espace. On remarque qu"on peut faire le calcul en ne gardant en m´emoire que deux lignes ou deux colonnes (puisqu"on ne regarde que dans la colonne d"avant et la ligne d"avant), ce qui permet de ne stocker queO(n) valeurs.

Exemple :On prendu=aabaetv=bab:i01234

jaaba

001234

1b11223

2a21122

3b32212

6quotesdbs_dbs33.pdfusesText_39
[PDF] leviers de mobilisation

[PDF] différence entre motivation et mobilisation

[PDF] plan daction mobilisation du personnel

[PDF] mobilisation du personnel définition

[PDF] suite fibonacci

[PDF] mobilisation des employés définition

[PDF] trouver les racines d'un polynome de degré 2

[PDF] polynome degré n

[PDF] définition de la mobilisation

[PDF] factoriser un polynome de degré n

[PDF] polynome degré 2

[PDF] phyllotaxie spiralée

[PDF] définition société civile organisée

[PDF] comment expliquer l'abstention électorale

[PDF] mobilisation des civils première guerre mondiale