Dlaczego liczby Fibonacciego są istotne w informatyce?

Liczby Fibonacciego stały się popularnym wstępem do rekurencji dla studentów informatyki i istnieje silny argument, że utrzymują się one w przyrodzie. Z tych powodów wielu z nas zna je.

Istnieją również w informatyce także gdzie indziej; w zaskakująco wydajnych strukturach danych i algorytmach opartych na sekwencji.

Na myśl przychodzą dwa główne przykłady:

Czy istnieje jakaś specjalna właściwość tych liczb, która daje im przewagę nad innymi ciągami liczbowymi? Czy jest to jakość przestrzenna? Jakie inne możliwe zastosowania mogą mieć?

Wydaje mi się to dziwne, ponieważ istnieje wiele sekwencji liczb naturalnych, które występują w innych problemach rekurencyjnych, ale mam nigdy nie widziałem katalońskiego sterty.

Author: templatetypedef, 2010-12-31

8 answers

Liczby Fibonacciego mają bardzo ładne właściwości matematyczne, które czynią je doskonałymi w informatyce. Oto kilka:

  1. Rosną wykładniczo szybko. interesującą strukturą danych, w której pojawia się szereg Fibonacciego, jest drzewo AVL, forma samobalansującego się drzewa binarnego. Intuicja stojąca za tym drzewem polega na tym, że każdy węzeł utrzymuje współczynnik równowagi tak, że wysokość lewego i prawego poddrzewa różni się co najwyżej o jeden. Z tego powodu, można myśleć o minimalnej liczbie węzłów niezbędnych do uzyskania drzewa AVL o wysokości h jest określona przez powtarzanie, które wygląda jak N (h + 2) ~= n (h) + N (h + 1), które wygląda podobnie jak szereg Fibonacciego. Jeśli opracujesz matematykę, możesz pokazać, że liczba węzłów potrzebnych do uzyskania drzewa AVL o wysokości h wynosi F (h + 2) - 1. Ponieważ seria Fibonacciego rośnie wykładniczo szybko, oznacza to, że wysokość drzewa AVL jest co najwyżej logarytmiczna w liczbie węzłów, co daje O (lg n) czas wyszukiwania znamy i kochamy zrównoważone drzewa binarne. W rzeczywistości, jeśli możesz powiązać rozmiar jakiejś struktury z liczbą Fibonacciego, prawdopodobnie otrzymasz runtime O (lg n) przy jakiejś operacji. Jest to prawdziwy powód, dla którego stosy Fibonacciego nazywane są stosami Fibonacciego - dowód, że liczba stosów po dequeue min wiąże się z ograniczeniem liczby węzłów, które możesz mieć w określonej głębokości za pomocą liczby Fibonacciego.
  2. dowolną liczbę można zapisać jako sumę unikalnych Fibonacciego liczby. ta właściwość liczb Fibonacciego ma kluczowe znaczenie dla poprawienia działania wyszukiwania Fibonacciego; jeśli nie możesz dodać unikalnych liczb Fibonacciego do dowolnej możliwej liczby, wyszukiwanie to nie zadziała. Porównaj to z wieloma innymi seriami, takimi jak 3 n lub liczby katalońskie. To jest również częściowo, dlaczego wiele algorytmów, takich jak moce dwóch, myślę.
  3. liczby Fibonacciego są wydajnie obliczalne. fakt, że szereg może być generowany bardzo efektywnie (można uzyskać pierwsze N terminów w O (n) lub dowolny dowolny termin w O (lg n)), wtedy wiele algorytmów, które ich używają, nie byłoby praktycznych. Generowanie liczb katalońskich jest dość skomplikowane obliczeniowo, IIRC. Ponadto, liczby Fibonacciego mają ładną właściwość, gdzie, biorąc pod uwagę dowolne dwie kolejne liczby Fibonacciego, powiedzmy F (k) I F(k + 1), Możemy łatwo obliczyć następną lub poprzednią liczbę Fibonacciego, dodając dwie wartości (F(k) + F(k + 1) = F(k + 2)) lub F (K + 1). odejmując je (F (k + 1) - F(k) = F(k-1)). Właściwość ta jest wykorzystywana w kilku algorytmach, w połączeniu z właściwością (2), do rozbijania liczb na sumę liczb Fibonacciego. Na przykład wyszukiwanie Fibonacciego wykorzystuje to do lokalizowania wartości w pamięci, podczas gdy podobny algorytm może być użyty do szybkiego i wydajnego obliczania logarytmów.
  4. Są przydatne pedagogicznie. Nauczanie rekurencji jest trudne, a seria Fibonacciego jest świetnym sposobem na jej wprowadzenie. You can talk o prostej rekurencji, o memoizacji lub o dynamicznym programowaniu przy wprowadzaniu serii. Dodatkowo, zdumiewająca forma zamknięta dla liczb Fibonacciego jest często nauczana jako ćwiczenie w indukcji lub w analizie nieskończonych szeregów, a powiązane równanie macierzowe dla liczb Fibonacciego jest powszechnie wprowadzane w algebrze liniowej jako motywacja za wektory własne i wartości własne. Myślę, że jest to jeden z powodów, dla których są tak głośne w zajęcia wprowadzające.

Jestem pewien, że jest więcej powodów niż tylko to, ale jestem pewien, że niektóre z tych powodów są głównymi czynnikami. Mam nadzieję, że to pomoże!

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-04 20:48:12

Największy wspólny dzielnik {[2] } jest inną magią; Zobacz to dla zbyt wielu magików. Ale liczby Fibonacciego są łatwe do obliczenia; również ma specyficzną nazwę. Na przykład liczby naturalne 1,2,3,4,5 mają zbyt wiele logiki; wszystkie liczby pierwsze są w nich; suma 1..n jest obliczalne, każdy z nich może produkować z innymi, ... ale nikt się o nie nie troszczy:)

Jedną ważną rzeczą, o której zapomniałem, jest złoty stosunek , który ma bardzo ważny wpływ w prawdziwym życiu (dla przykład lubisz szerokie monitory:)

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-01 03:40:32

Jeśli masz algorytm, który można z powodzeniem wyjaśnić prostym i zwięzłym mannorem ze zrozumiałymi przykładami w CS i nature, jakie lepsze narzędzie dydaktyczne mógłby wymyślić ktoś?

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-01 04:32:51

Ciągi Fibonacciego są rzeczywiście wszędzie w przyrodzie/życiu. Są one przydatne w modelowaniu wzrostu populacji zwierząt, wzrostu komórek roślinnych, kształtu płatka śniegu, kształtu roślin, kryptografii i oczywiście informatyki. Słyszałem, że nazywa się to wzorem DNA natury.

Stos Fibonacciego został już wymieniony; liczba Potomków każdego węzła w stosie wynosi co najwyżej log(n). Również podzbiorem rozpoczynającym węzeł z M dzieci jest co najmniej (m+2)th Fibonacciego numer.

Protokoły torrentowe, które używają systemu węzłów i supernodów, używają Fibonacciego, aby zdecydować, kiedy potrzebny jest nowy super węzeł i ile podnodów będzie zarządzał. Zarządzają węzłami w oparciu o spiralę Fibonacciego(złoty stosunek). Zobacz zdjęcie poniżej jak węzły są dzielone/scalane(podzielone z jednego dużego kwadratu na mniejsze i odwrotnie). Zobacz zdjęcie: http://smartpei.typepad.com/.a/6a00d83451db7969e20115704556bd970b-pi

Niektóre zdarzenia w przyrodzie

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/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 15:59:43

Myślę, że nie ma ostatecznej odpowiedzi, ale jedną z możliwości jest to, że operacja dzielenia zbioru S na dwie partycje S1 i S2, z których jedna jest następnie podzielona na pod-partycje S11 i S12, z których jedna ma taką samą wielkość jak S2 - jest prawdopodobnym podejściem do wielu algorytmów i może być czasami numerycznie opisana jako ciąg Fibonacciego.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 18:40:24

Dodam jeszcze jedną strukturę danych do Twojej: drzewa Fibonacciego. Są one interesujące, ponieważ obliczenie następnej pozycji w drzewie może być wykonane przez zwykłe dodanie poprzednich węzłów:

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

Dobrze łączy się z dyskusją templatetypedef na temat AVL-trees (drzewo AVL może w najgorszym wypadku mieć strukturę Fibonacciego). Widziałem również bufory rozszerzone w krokach Fibonacciego, a nie potęgi dwóch w niektórych przypadkach.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 19:38:19

Aby dodać ciekawostkę na ten temat, liczby Fibonacciego opisują panierowanie królików. Zaczynasz od (1, 1), dwóch królików, a następnie ich populacja rośnie wykładniczo .

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 10:45:09

Ich obliczenia jako potęgi [[0,1], [1,1]] macierzy można uznać za najbardziej prymitywny problem Badań Operacyjnych (podobnie jak dylemat więźnia jest najbardziej prymitywnym problemem teorii gier).

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 20:20:41