[INFO] Illustration de la COMPLEXITÉ pour les ORDINATEURS

Dextre375
2023-07-05 18:16:37

La suite de Fibonacci est une suite connue, dont chaque terme est la somme des deux précédents :
0, 1, 1, 2, 3, 5, 8, 13, 21...

On peut coder cette suite de plusieurs manières dans le langage Python :

1/

def fibo_naif(i):
if i == 0:
return 0
if i == 1:
return 1
else:
return fibo_naif(i-2) + fibo_naif(i-1)

Si je veux calculer le 40ème terme, mon ordinateur me le donne en 28,7 secondes :

%time fibo_naif(40)

CPU times: user 28.6 s, sys: 110 ms, total: 28.7 s
Wall time: 28.7 s

2/

def fibo_malin(n):
elif n == 1:
return (0, 1)
else:
(a, b) = fibo_malin(n-1)
return (b, a+b)

Ici, si je veux calculer le 40ème terme, mon ordinateur me le donne en 44 microsecondes (ce qui est 652272 fois plus rapide que le calcul précédent) :

%time fibonacci(40)

CPU times: user 34 µs, sys: 10 µs, total: 44 µs
Wall time: 50.3 µs

En effet, lorsque je calcule fibo_naif(40), je calcule fibo_naif(38) + fibo_naif(39), puis fibo_naif(38) calcule fibo_naif(36)+fibo_naif(37) et fibo_naif(39) calcule fibo_naif(37) + fibo_naif(38), etc.

La fonction est appelée de l'ordre de 2^(40/2) fois, soit environ 1 million de fois.

Dans le deuxième cas, la fonction est appelée 39 fois.

Dextre375
2023-07-05 18:17:00

D'où l'importance de bien optimiser ses programmes. :hap:

joykimm
2023-07-05 18:17:25

d'où l'importance de faire de la récursion terminale

Dextre375
2023-07-05 18:18:33

Le 05 juillet 2023 à 18:17:25 :
d'où l'importance de faire de la récursion terminale

Y'a pas de récursion terminale dans mon deuxième exemple. :hap:

joykimm
2023-07-05 18:18:41

Le 05 juillet 2023 à 18:18:33 :

Le 05 juillet 2023 à 18:17:25 :
d'où l'importance de faire de la récursion terminale

Y'a pas de récursion terminale dans mon deuxième exemple. :hap:

je sais

ApocalypseNwSVP
2023-07-05 18:18:45

Les gens de microsoft doivent pas connaitre ça vu comme leur OS est lent :fou:

Khey666MCR
2023-07-05 18:19:46

Python :rire:
HolyC :ok:

ZerodoZ_LopaX
2023-07-05 18:21:03

D'où l'importance de trouver une formule générale au lieu de faire des algos comme un goulem :)

Dextre375
2023-07-05 18:21:31

Le 05 juillet 2023 à 18:21:03 :
D'où l'importance de trouver une formule générale au lieu de faire des algos comme un goulem :)

C'est beaucoup plus rapide avec un algo hein. :hap:

hxine
2023-07-05 18:22:02

Le 05 juillet 2023 à 18:17:00 :
D'où l'importance de bien optimiser ses programmes. :hap:

je suis bien d'accord mais je comprends pas ce qu'on fait avec a+b à la derniere ligne ? :hap:

Dextre375
2023-07-05 18:24:13

Le 05 juillet 2023 à 18:22:02 :

Le 05 juillet 2023 à 18:17:00 :
D'où l'importance de bien optimiser ses programmes. :hap:

je suis bien d'accord mais je comprends pas ce qu'on fait avec a+b à la derniere ligne ? :hap:

a c'est fibo(n-2), b c'est fibo(n-1), donc b, a+b = fibo(n-1), fibo(n-2) + fibo(n-1) = fibo(n-1), fibo(n)

Je ne sais pas si c'est clair. :(

hxine
2023-07-05 18:25:31

Le 05 juillet 2023 à 18:24:13 :

Le 05 juillet 2023 à 18:22:02 :

Le 05 juillet 2023 à 18:17:00 :
D'où l'importance de bien optimiser ses programmes. :hap:

je suis bien d'accord mais je comprends pas ce qu'on fait avec a+b à la derniere ligne ? :hap:

a c'est fibo(n-2), b c'est fibo(n-1), donc b, a+b = fibo(n-1), fibo(n-2) + fibo(n-1) = fibo(n-1), fibo(n)

Je ne sais pas si c'est clair. :(

oui j'ai compris après j'ai écris ça sans même réfléchir, moi les algos comme ça c'est impossible que ça me vienne en tête c'est beaucoup trop complexe franchement :hap:

ZerodoZ_LopaX
2023-07-05 18:25:49

Le 05 juillet 2023 à 18:21:31 :

Le 05 juillet 2023 à 18:21:03 :
D'où l'importance de trouver une formule générale au lieu de faire des algos comme un goulem :)

C'est beaucoup plus rapide avec un algo hein. :hap:

c'est vrai que résoudre une quadratique ça prend longtemps

JuliaHolter4
2023-07-05 18:26:00

cest du niveau CP ca tu interesses qui avec ton topic pour bebe

Dextre375
2023-07-05 18:26:14

Le 05 juillet 2023 à 18:25:49 :

Le 05 juillet 2023 à 18:21:31 :

Le 05 juillet 2023 à 18:21:03 :
D'où l'importance de trouver une formule générale au lieu de faire des algos comme un goulem :)

C'est beaucoup plus rapide avec un algo hein. :hap:

c'est vrai que résoudre une quadratique ça prend longtemps

Non mais des multiplications sur des flottants c'est surtout plus long que des sommes d'entiers.

SauceCatalane
2023-07-05 18:26:32

On s'en branle zinzolin

Kheyettophile
2023-07-05 18:26:45

J'ai pas compris : quand tu fais la deuxième fonction il te renvoie un duo de chiffres (a, b) avec a le chiffre précédent et b le résultat ?

Dextre375
2023-07-05 18:27:08

Le 05 juillet 2023 à 18:26:45 :
J'ai pas compris : quand tu fais la deuxième fonction il te renvoie un duo de chiffres (a, b) avec a le chiffre précédent et b le résultat ?

Oui, absolument. :oui:

D'ailleurs j'ai écrit une connerie, c'est pas "elif n==1", c'est "if n == 1".

Kheyettophile
2023-07-05 18:28:03

Le 05 juillet 2023 à 18:27:08 :

Le 05 juillet 2023 à 18:26:45 :
J'ai pas compris : quand tu fais la deuxième fonction il te renvoie un duo de chiffres (a, b) avec a le chiffre précédent et b le résultat ?

Oui, absolument. :oui:

D'ailleurs j'ai écrit une connerie, c'est pas "elif n==1", c'est "if n == 1".

Ah d'accord merci

Lapairomodo
2023-07-05 18:28:42

C'est la balance qui a fait tombé John Abruzzi :(

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.