¿Por qué los números de Fibonacci son significativos en ciencias de la computación?


Los números de Fibonacci se han convertido en una introducción popular a la recursión para los estudiantes de Ciencias de la Computación y hay un fuerte argumento de que persisten dentro de la naturaleza. Por estas razones, muchos de nosotros estamos familiarizados con ellos.

También existen dentro de la Informática en otros lugares también; en estructuras de datos sorprendentemente eficientes y algoritmos basados en la secuencia.

Hay dos ejemplos principales que vienen a la mente:

  • Pilas de Fibonacci que tienen mejor tiempo de ejecución amortizado que binomial pila.
  • Fibonacci buscar que comparte O (log N) tiempo de ejecución con binario busca en una matriz ordenada.

¿Hay alguna propiedad especial de estos números que les da una ventaja sobre otras secuencias numéricas? Es una cualidad espacial? ¿Qué otras posibles aplicaciones podrían tener?

Me parece extraño, ya que hay muchas secuencias de números naturales que ocurren en otros problemas recursivos, pero he nunca he visto un montón de catalanes.

Author: templatetypedef, 2010-12-31

8 answers

Los números de Fibonacci tienen todo tipo de propiedades matemáticas muy buenas que los hacen excelentes en ciencias de la computación. He aquí algunas:

  1. crecen exponencialmente rápido. Una estructura de datos interesante en la que surge la serie de Fibonacci es el árbol AVL, una forma de árbol binario auto-equilibrado. La intuición detrás de este árbol es que cada nodo mantiene un factor de equilibrio para que las alturas del subárbol izquierdo y derecho difieran como máximo en uno. Debido a esto, se puede pensar en el número mínimo de nodos necesarios para obtener un árbol AVL de altura h se define por una recurrencia que se parece a N(h + 2) ~= N(h) + N (h + 1), que se parece mucho a la serie de Fibonacci. Si calculas las matemáticas, puedes demostrar que el número de nodos necesarios para obtener un árbol AVL de altura h es F (h + 2) - 1. Debido a que la serie de Fibonacci crece exponencialmente rápido, esto significa que la altura de un árbol AVL es a lo sumo logarítmica en el número de nodos, lo que le da la O (lg n) tiempo de búsqueda que conocemos y amamos sobre árboles binarios equilibrados. De hecho, si puede vincular el tamaño de alguna estructura con un número de Fibonacci, es probable que obtenga un tiempo de ejecución O(lg n) en alguna operación. Esta es la verdadera razón por la que los montones de Fibonacci se llaman montones de Fibonacci: la prueba de que el número de montones después de un minuto de dequeue implica delimitar el número de nodos que puede tener en una cierta profundidad con un número de Fibonacci.
  2. Cualquier número se puede escribir como la suma de Fibonacci único numero. Esta propiedad de los números de Fibonacci es crítica para que la búsqueda de Fibonacci funcione; si no pudiera sumar números únicos de Fibonacci en ningún número posible, esta búsqueda no funcionaría. Contrasta esto con muchas otras series, como 3n o los números catalanes. Esto también es parcialmente por qué muchos algoritmos como potencias de dos, creo.
  3. Los números de Fibonacci son computables eficientemente. El hecho de que la serie se puede generar extremadamente eficiente (puede obtener los primeros n términos en O(n) o cualquier término arbitrario en O (lg n)), entonces muchos de los algoritmos que los usan no serían prácticos. Generar números catalanes es bastante complicado computacionalmente, IIRC. Además de esto, los números de Fibonacci tienen una buena propiedad donde, dados dos números consecutivos de Fibonacci, digamos F(k) y F (k + 1), podemos calcular fácilmente el número de Fibonacci siguiente o anterior agregando los dos valores(F(k) + F(k + 1) = F (k + 2)) o restas (F(k + 1) - F(k) = F(k - 1)). Esta propiedad se explota en varios algoritmos, junto con la propiedad (2), para dividir los números en la suma de los números de Fibonacci. Por ejemplo, Fibonacci search utiliza esto para localizar valores en la memoria, mientras que un algoritmo similar se puede utilizar para calcular logaritmos de manera rápida y eficiente.
  4. Son pedagógicamente útiles. Enseñar recursión es complicado, y la serie Fibonacci es una gran manera de introducirla. Puedes hablar sobre la recursión recta, sobre la memoización o sobre la programación dinámica al introducir la serie. Además, la sorprendente forma cerrada para los números de Fibonaccia menudo se enseña como un ejercicio de inducción o en el análisis de series infinitas, y la ecuación de matriz relacionada para los números de Fibonacci se introduce comúnmente en el álgebra lineal como una motivación detrás de vectores propios y valores propios. Creo que esta es una de las razones por las que son tan de alto perfil en clases introductorias.

Estoy seguro de que hay más razones que solo esto, pero estoy seguro de que algunas de estas razones son los principales factores. Espero que esto ayude!

 67
Author: templatetypedef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-04 20:48:12

El Mayor Común Divisor es otra magia; ver esto para demasiadas magias. Pero los números de Fibonacci son fáciles de calcular; también tiene un nombre específico. Por ejemplo, los números naturales 1,2,3,4,5 tienen demasiada lógica; todos los números primos están dentro de ellos; suma de 1..n es computable, cada uno puede producir con otros ... pero nadie se preocupa por ellos:)

Una cosa importante que olvidé es Proporción Áurea , que tiene un impacto muy importante en la vida real (para ejemplo te gustan los monitores anchos:)

 4
Author: Saeed Amiri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-01 03:40:32

Si usted tiene un algoritmo que se puede explicar con éxito en un mannor simple y conciso con ejemplos comprensibles en CS y naturaleza, ¿qué mejor herramienta de enseñanza podría alguien venir con?

 1
Author: savalia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-01 04:32:51

Las secuencias de Fibonacci se encuentran en todas partes en la naturaleza/vida. Son útiles para modelar el crecimiento de las poblaciones animales, el crecimiento de las células vegetales, la forma del copo de nieve, la forma de la planta, la criptografía y, por supuesto, la informática. He oído que se le conoce como el patrón de ADN de la naturaleza.

Ya se han mencionado los montones de Fibonacci; el número de hijos de cada nodo en el montón es a lo sumo log(n). También el subárbol que comienza un nodo con m niños es al menos (m+2)th fibonacci numero.

Los protocolos tipo Torrent que utilizan un sistema de nodos y supernodos utilizan un fibonacci para decidir cuándo se necesita un nuevo súper nodo y cuántos subnodos administrará. Hacen la gestión de nodos basada en la espiral de fibonacci (proporción áurea). Vea la foto a continuación cómo se dividen/fusionan los nodos (particionados de un cuadrado grande en otros más pequeños y viceversa). Ver foto: http://smartpei.typepad.com/.a/6a00d83451db7969e20115704556bd970b-pi

Algunas ocurrencias en la naturaleza

Http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/sneezewort.GIF

Http://img.blogster.com/view/anacoana/post-uploads/finger.gif

Http://jwilson.coe.uga.edu/EMAT6680/Simmons/6690Pictures/pinecone3yellow.gif

Http://2.bp.blogspot.com/-X5II-IhjXuU/TVbHrpmRnLI/AAAAAAAAABU/nv73Y9Ylkkw/s320/amazing_fun_featured_2561778790105101600S600x600Q85_200907231856306879.jpg

 1
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-16 15:59:43

No creo que haya una respuesta definitiva, pero una posibilidad es que la operación de dividir un conjunto S en dos particiones S1 y S2, una de las cuales se divide en sub-particiones S11 y S12, una de las cuales tiene el mismo tamaño que S2 - es un enfoque probable para muchos algoritmos y que a veces se puede describir numéricamente como una secuencia de Fibonacci.

 0
Author: DVK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-31 18:40:24

Permítanme añadir otra estructura de datos a la suya: árboles de Fibonacci. Son interesantes porque el cálculo de la siguiente posición en el árbol se puede hacer por mera adición de los nodos anteriores:

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

Se relaciona bien con la discusión de templatetypedef sobre AVL-trees (un árbol AVL puede, en el peor de los casos, tener estructura fibonacci). También he visto buffers extendidos en fibonacci-pasos en lugar de potencias de dos en algunos casos.

 0
Author: I GIVE CRAP ANSWERS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-31 19:38:19

Solo para agregar una trivia sobre esto, los números de Fibonacci describen el empanado de conejos. Empiezas con (1, 1), dos conejos, y luego su población crece exponencialmente .

 0
Author: Mihaela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-14 10:45:09

Su cómputo como una potencia de [[0,1], [1,1]] matriz puede considerarse como el problema más primitivo de la Investigación Operativa (una especie de Dilema del Prisionero es el problema más primitivo de la Teoría de Juegos).

 0
Author: Dmitry Rubanovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-18 20:20:41