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





Previous PDF Next PDF



Récursivité

4 oct. 2017 Implémentation Python de la suite de Fibonacci récursive : traduction (presque) mot à mot ! def fib(n): if n<=1: return n.



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 n en entrée que l'on va noter An. La suite An vérifie :.



Suite de Fibonacci - Algo & Prog avec R

11 sept. 2021 Programmer une fonction qui se souvient des calculs déjà effectués ! Exemple avec Fibonacci. ? Je calcule F35 qui demande le calcul de F34. ? ...



I Préliminaires II Séries génératrices de Fibonacci

est suite d'entiers naturels non nuls : initialisation : F2 = 1 ? N? ; F3 = 2 ? N? ; la propriété est initialisée ; hérédité : supposons que Fn ? N? 



suites de fibonacci

la suite de Fibonacci sont premiers entre eux. Preuve : Admettons que deux termes consé- cutifs admettent un diviseur commun d alors.



stage graphes

de) l'algorithme PageRank utilisé par Google pour hiérarchiser les pages Internet. 1 Calcul des nombres de Fibonacci. La suite de Fibonacci (fn)n?N est 



La suite de Fibonacci

Partie B. On désire pouvoir calculer exactement pour 2 £ n £ 100



Considérons un couple de lapins nouveaux-nés un mâle et une

suite de Fibonacci ? Appelons un le nombre de couples de lapins que nous avons au mois n. Au début nous n'avons aucun lapin et nous dirons que.



les suites de fibonacci

de lapins tous les mois et ces derniers deviennent productifs au second mois de leur existence ? Solution : On retrouve la suite de Fibonacci qui est :.



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 :.



[PDF] 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



[PDF] Suite de Fibonacci

Cette suite de nombre s'appelle la suite de Fibonacci La suite de Fibonacci est une suite de nombres dont chaque terme est la somme des deux précédents



[PDF] Suite de Fibonacci nombre dor

La suite de Fibonacci 2 Le nombre d'or rectangles et spirales 3 Formule de Moivre et applications 4 Interprétations combinatoires



[PDF] Nombre dor et Suite de Fibonacci - PAESTEL

Nous allons maintenant étudier di érentes suites qui convergent vers le nombre d'or et pour chacune d'entre elles déterminer sa vitesse de convergence



(PDF) Nombre dor et suite de Fibonacci - ResearchGate

Nous démontrerons comment le nombre d'or est obtenu à partir de la suite de Fibonacci et nous ferons une incursion dans la théorie des fractions continues 



[PDF] La suite des nombres de Fibonacci est définie par induction On

La suite des nombres de Fibonacci est définie par induction On définit au début : F(0) := 0 F(1) := 1 Étape d'induction : Pour n ? 1 si F(0) F(n) 



[PDF] Sur les suites de Fibonacci et de Lucas

jusqu'à la fin du 19e siècle on ne s'est occupé de la suite de Fibonacci que très sporadiquement 1200 1600 Fibonacci tombe sur sa suite à propos d'un 



[PDF] Suites de Fibonacci

pour n grand la suite de Fibonacci est "presque" géométrique : on passe d'un on verra à http://alain pichereau pagesperso-orange fr/fibonacci pdf une 



[PDF] LA SUITE DE FIBONACCI - maths et tiques

Comment peut-on calculer un nombre quelconque de la suite connaissant les deux précédents ? Ouvrir le fichier du tableur « Fibonacci » et réenregistrer-le en 



[PDF] Suite de Fibonacci - Algo & Prog avec R - Université Côte dAzur

11 sept 2021 · Programmer une fonction qui se souvient des calculs déjà effectués ! Exemple avec Fibonacci ? Je calcule F35 qui demande le calcul de F34 ? 

  • Comment expliquer la suite de Fibonacci ?

    En mathématiques, la suite de Fibonacci est une suite de nombres entiers dont chaque terme successif représente la somme des deux termes précédents, et qui commence par 0 puis 1. Ainsi, les dix premiers termes qui la composent sont 0, 1, 1, 2, 3, 5, 8, 13, 21 et 34.
  • En effet: 13/8 = 1.625 ; 21/13 = 1.61538… ; 34/21 = 1.61904…et ainsi de suite…plus on avance dans la suite de Fibonacci, plus l'écart s'amenuise, et plus le rapport des deux nombres successifs (le plus grand / le plus petit) tend vers la valeur du nombre d'or 1,61803…
CHAPITRE III Programmation Dynamique III.1 Exemple introductif

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] 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

[PDF] implication des civils premiere guerre mondiale

[PDF] les civils victimes de la premiere guerre mondiale

[PDF] les conditions de vie des civils pendant la seconde guerre mondiale

[PDF] le fibroscope pour voir ? l'intérieur du corps correction

[PDF] exercice corrigé fibre optique ? saut d'indice