J'ai eu une mission à l'école la semaine dernière pour mettre en œuvre une fonction de calcul du nième nombre dans la séquence de fibonacci. Une 'sous-affectation' devait l'implémenter en utilisant l'accumulation (peut-être pas une traduction correcte) afin de donner à la fonction O (n) une complexité temporelle. Tout a bien fonctionné jusqu'à ce que j'essaie de faire la fonction (Int -> Integer). En expérimentant un peu, j'ai réalisé que la complexité temporelle était proche de O (n^2) pour les nombres vraiment grands. Il me semble que cela doit être dû à l'implémentation d'Integer, ce qui me rend un peu curieux de savoir comment cela fonctionne. J'ai fait quelques recherches sur Google et je n'ai rien trouvé qui me paraissait utile, alors je me tourne vers vous dans l'espoir d'obtenir une explication ou un lien qui l'explique à fond.Complexité du temps entier dans Haskell
Mon code:
ackfib 0 = 0
ackfib 1 = 1
ackfib n = loop n 1 0 1
where
loop n n1 n2 i
| i < n = loop n (n1+n2) n1 (i+1)
| i == n = n1
| i > n = error "n must be greater than or equal to 0"
Je suis reconnaissant pour toutes les réponses
Viktor
Comme d'habitude, postez votre code. – Juliet
Il ne s'agit pas de mon code, mais de l'implémentation du type Integer. – vichle
Nous ne pouvons pas élaborer une explication sans voir l'ensemble de l'image. Dans ce cas, c'est votre code. – Juan