[PDF] CHAPITRE III Programmation Dynamique III.1 Exemple introductif





Previous PDF Next PDF



Thèse de mathématique Le q-analogue des suites de Fibonacci et

May 24 2016 La définition du q&analogue de la suite de Fibonacci et de la suite de Lucas proposée par. Cigler [21] a été choisie par Prodinger [41] qui ...



NOMBRES DE FIBONACCI

2.5.2 La relation entre triangle Pascal et nombre de Fibonacci . . . 29. 3 Propriétés des nombres de Fibonacci. 30. 3.1 Quelques propriétés des suites 



Trois algorithmes de calcul des nombres de Fibonacci

Estimer la complexité de cet algorithme. Exercice 4 (Généralisation) Adapter la même méthode à la suite récurrente suivante : a0. = 1 a1.



CHAPITRE III Programmation Dynamique III.1 Exemple introductif

La suite de Fibonacci est la suite d'entier (un)n?0 définie récursivement par : Pour analyser la complexité de cet algorithme on remarque que chaque ...



SUR LA SUITE DE FIBONACCI La suite de Fibonacci est introduite

May 7 2004 La suite de Fibonacci permet d'illustrer plusieurs aspects du cours. IFT : suites et fonctions



La suite de Stern-Brocot sœur de Fibonacci

Sa définition res- semble à celle de la suite de Fibonacci. La suite diatomique de Stern est le résultat des petites équations suivantes : s0 = 0 ; s1 =1; s2n = 



1. Les lapins de Fibonacci EN 1202 Fibonacci sint´eressa au probl

La suite de Fibonacci et le nombre d'or On remarque que la suite form´ee par les nombres de couples apr`es chaque mois est la suivante :.







Calcul des nombres de Fibonacci [cx03] - Exercice

Requis Axiomatique impérative Récursivité des actions ?. Difficulté •??. Objectif. Cet exercice analyse la complexité de la suite de Fibonacci.



Récréation mathématique: La suite de Fibonacci

La suite de Fibonacci. Université du Sud Toulon–Var. Nils Berglund. Novembre 2005. 1 Des lapins au nombre d'or. 1.1 Lapins récurrence et dominos.

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_dbs46.pdfusesText_46
[PDF] La suite de Fibonacci 1ère S

[PDF] La suite de Jim and the beanstalk en anglais

[PDF] la suite de syracuse algorithme

[PDF] la suite de syracuse exercice corrigé

[PDF] la suite définie

[PDF] La Suite numérique

[PDF] La supercificie de la Terre est environ de 5,1 x 10 puissance 8 km²

[PDF] La supersitition

[PDF] la superstition

[PDF] La suprématie militaire et diplmatique

[PDF] la surface (fraction)

[PDF] la surface du globe

[PDF] La surveillance la prévision et la prévention

[PDF] la survie sur l ile p 182 francaix

[PDF] la syllabation en poésie