web-dev-qa-db-fra.com

Pourquoi les nombres de Fibonacci sont-ils importants en informatique?

Les nombres de Fibonacci sont devenus une introduction populaire à la récursion pour les étudiants en informatique et il y a un fort argument selon lequel ils persistent dans la nature. Pour ces raisons, beaucoup d’entre nous les connaissent.

Ils existent également dans l'informatique ailleurs; dans des structures de données et des algorithmes étonnamment efficaces basés sur la séquence. 

Deux exemples principaux me viennent à l’esprit:

Existe-t-il une propriété particulière de ces nombres qui leur confère un avantage par rapport aux autres séquences numériques? Est-ce une qualité spatiale? Quelles autres applications possibles pourraient-ils avoir?

Cela me semble étrange car de nombreuses séquences de nombres naturels se produisent dans d'autres problèmes récursifs, mais je n'ai jamais vu de catalan heap. 

74
Ian Bishop

Les nombres de Fibonacci ont toutes sortes de très bonnes propriétés mathématiques qui les rendent excellents en informatique. En voici quelques unes:

  1. Ils grandissent exponentiellement vite. Une structure de données intéressante dans laquelle la série de Fibonacci apparaît est l’arbre AVL, une forme d’arbre binaire à auto-équilibrage. L'intuition qui se cache derrière cet arbre est que chaque nœud conserve un facteur d'équilibre de sorte que les hauteurs des sous-arbres gauche et droit diffèrent d'au plus un. De ce fait, vous pouvez penser au nombre minimum de nœuds nécessaires pour obtenir un arbre AVL de hauteur h, défini par une récurrence ressemblant à N (h + 2) ~ = N(h) + N (h +1), qui ressemble beaucoup à la série de Fibonacci. Si vous calculez les calculs, vous pouvez montrer que le nombre de nœuds nécessaires pour obtenir un arbre AVL de hauteur h est F (h + 2) - 1. Comme la série de Fibonacci croît de manière exponentielle, cela signifie que la hauteur d’un AVL tree est au plus logarithmique du nombre de nœuds, ce qui vous donne le temps de recherche O (lg n) que nous connaissons et aimons à propos des arbres binaires équilibrés. En fait, si vous pouvez lier la taille d'une structure avec un nombre de Fibonacci, vous obtiendrez probablement un runtime O (lg n) pour certaines opérations. C'est la vraie raison pour laquelle les tas de Fibonacci sont appelés tas de Fibonacci - la preuve que le nombre de tas après une file d'attente minimale implique la limitation du nombre de nœuds que vous pouvez avoir à une certaine profondeur avec un nombre de Fibonacci.
  2. N'importe quel nombre peut être écrit comme la somme de nombres de Fibonacci uniques. Cette propriété des nombres de Fibonacci est essentielle au bon fonctionnement de la recherche de Fibonacci; si vous ne pouviez pas additionner des nombres Fibonacci uniques en un nombre possible, cette recherche ne fonctionnerait pas. Comparez cela avec beaucoup d'autres séries, comme 3n ou les chiffres catalans. C'est aussi en partie pourquoi beaucoup d'algorithmes comme les puissances de deux, je pense.
  3. Les nombres de Fibonacci sont calculables efficacement. Le fait que la série puisse être générée de manière extrêmement efficace (vous pouvez obtenir les n premiers termes dans O(n) ou n'importe quel terme arbitraire dans O (lg n)), de nombreux algorithmes qui les utilisent ne t être pratique. Générer des nombres en catalan est assez délicat sur le plan informatique, IIRC. De plus, les nombres de Fibonacci ont une propriété de Nice où, étant donné que deux nombres de Fibonacci consécutifs, disons F(k) et F (k + 1), nous pouvons facilement calculer le nombre de Fibonacci suivant ou précédent par additionner les deux valeurs (F (k) + F (k + 1) = F (k + 2)) ou les soustraire (F (k + 1) - F(k) = F (k - 1) ). Cette propriété est exploitée dans plusieurs algorithmes, en conjonction avec la propriété (2), pour séparer les nombres en la somme des nombres de Fibonacci. Par exemple, la recherche Fibonacci l'utilise pour localiser des valeurs en mémoire, tandis qu'un algorithme similaire peut être utilisé pour calculer rapidement et efficacement des logarithmes.
  4. Ils sont pédagogiquement utiles. Enseigner la récursivité est délicat et la série de Fibonacci est un excellent moyen de la présenter. Vous pouvez parler de récursion directe, de mémoisation ou de programmation dynamique lors de l'introduction de la série. En outre, l’étonnant forme fermée pour les nombres de Fibonacci est souvent enseigné comme exercice d’induction ou dans l’analyse de séries infinies, et l’équation connexe matrice des nombres de Fibonacci est couramment introduite dans l’algèbre linéaire une motivation derrière les vecteurs propres et les valeurs propres. Je pense que c'est l'une des raisons pour lesquelles ils sont si présents dans les classes d'initiation.

Je suis sûr qu'il y a plus de raisons que cela, mais certaines de ces raisons sont les facteurs principaux. J'espère que cela t'aides!

68
templatetypedef

Le plus grand commun diviseur est une autre magie; voir ceci pour trop de magie. Mais les nombres de Fibonacci sont faciles à calculer. aussi il a un nom spécifique. Par exemple, les nombres naturels 1, 2, 3, 4, 5 ont trop de logique; tous les nombres premiers sont en eux; somme de 1..n est calculable, chacun peut produire avec d'autres, ... mais personne ne s'en occupe :)

Une chose importante que j’avais oubliée est Golden Ratio , qui a un impact très important dans la vie réelle (par exemple, vous aimez les moniteurs larges :)

4
Saeed Amiri

Si vous avez un algorithme qui peut être expliqué avec succès de manière simple et concise, avec des exemples compréhensibles en CS et dans la nature, quel meilleur outil d’enseignement pourrait-on imaginer?

1
savalia

Leur calcul comme puissance de la matrice [[0,1], [1,1]] peut être considéré comme le problème le plus primitif de la recherche opérationnelle (un peu comme le dilemme du prisonnier est le problème le plus primitif de la théorie des jeux).

0
Dmitry Rubanovich

Permettez-moi d’ajouter une autre structure de données à la vôtre: les arbres de Fibonacci. Ils sont intéressants car le calcul de la position suivante dans l’arborescence peut se faire par simple addition des nœuds précédents:

http://xw2k.nist.gov/dads/html/fibonacciTree.html

Cela cadre bien avec la discussion de templatetypedef sur les arbres AVL (un arbre AVL peut au pire avoir une structure fibonacci). J'ai également vu des tampons étendus par paliers de fibonacci plutôt que par deux dans certains cas.

0
I GIVE CRAP ANSWERS

Je ne pense pas qu'il y ait une réponse définitive, mais une possibilité est que l'opération consistant à diviser un ensemble S en deux partitions S1 et S2, l'une d'entre elles étant ensuite divisée en sous-partitions S11 et S12, dont l'une a la même taille que S2 - est une approche probable de nombreux algorithmes et peut être parfois décrite numériquement comme une séquence de Fibonacci.

0
DVK

Pour ajouter une anecdote à ce sujet, les chiffres de Fibonacci décrivent la panure des lapins. Vous commencez avec (1, 1), deux lapins, puis leur population augmente de façon exponentielle. 

0
Mihaela

Les symboles dont les fréquences sont des nombres de fibonacci successifs créent des arbres de Huffman de profondeur maximale, lesquels arbres correspondent aux symboles source codés avec des codes binaires de longueur maximale. Les fréquences de symbole source non-fibonacci créent des arbres plus équilibrés, avec des codes plus courts. La longueur du code a des implications directes sur la complexité de la description de la machine à états finis chargée de décoder un code de Huffman donné.


Conjecture: La première image (fib) sera compressée à 38 bits, tandis que la seconde (uniforme) à 50 bits. Il semble que plus les fréquences du symbole source sont proches des nombres de fibonacci, plus la séquence binaire finale est courte, meilleure est la compression, voire optimale dans le modèle de Huffman. 

 huffman.ooz.ie/?text=ABBCCCDDDDDEEEEEEEE

 enter image description here

Lectures complémentaires:

Buro, M. (1993). Sur la longueur maximale des codes de Huffman. Information Processing Letters, 45 (5), 219-223. doi: 10.1016/0020-0190 (93) 90207-p

0
FrantzelasG