web-dev-qa-db-ja.com

コンピューターサイエンスでフィボナッチ数が重要なのはなぜですか?

フィボナッチ数 は、コンピューターサイエンスの学生にとって再帰の一般的な紹介になっており、自然界に存在するという強い議論があります。これらの理由から、私たちの多くはそれらに精通しています。

また、他の場所のコンピューターサイエンスにも存在します。シーケンスに基づく驚くほど効率的なデータ構造とアルゴリズムで。

思い浮かぶ2つの主な例があります。

他の数値シーケンスよりも有利なこれらの数値の特別な特性はありますか?それは空間的な品質ですか?他にどのようなアプリケーションがありますか?

他の再帰問題で発生する多くの自然数列があるので、私には奇妙に思えますが、 Catalan ヒープを見たことはありません。

74
Ian Bishop

フィボナッチ数には、あらゆる種類の本当に素晴らしい数学的な性質があり、コンピューターサイエンスで優れています。ここにいくつかあります:

  1. それらは指数関数的に速く成長します。 フィボナッチ数列が登場する興味深いデータ構造の1つは、自己バランス型バイナリツリーの一種であるAVLツリーです。このツリーの背後にある直感は、各ノードがバランス係数を維持するため、左右のサブツリーの高さは最大で1だけ異なるということです。このため、高さhのAVLツリーを取得するために必要な最小ノード数は、N(h + 2)〜= N(h) = + N(h + 1)、これはフィボナッチ数列に非常によく似ています。数学を解くと、高さhのAVLツリーを取得するために必要なノードの数がF(h + 2)であることがわかります- 1.フィボナッチ数列は指数関数的に急速に成長するため、これはAVLツリーの高さがノード数で最大対数であることを意味し、バランスの取れたバイナリツリーについて知っているO(lg n)ルックアップ時間を提供します。 、いくつかの構造のサイズをフィボナッチ数でバインドできる場合、何らかの操作でO(lg n)ランタイムを取得する可能性があります。これが、フィボナッチヒープがフィボナッチヒープと呼ばれる本当の理由です。デキュー後のヒープの数は、フィボナッチ数で特定の深さにできるノードの数を制限することを伴います。
  2. 一意のフィボナッチ数の合計として、任意の数を書き込むことができます。 フィボナッチ数のこの性質は、フィボナッチ検索を完全に機能させるために重要です。一意のフィボナッチ数を可能な数に加算できない場合、この検索は機能しません。他の多くのシリーズ(3など)と比較してくださいn またはカタロニア語の番号。これもまた、2のべき乗のような多くのアルゴリズムが理由の一部であると思います。
  3. フィボナッチ数は効率的に計算できます。 系列を非常に効率的に生成できるという事実(O(n)の最初のn項またはO(lg n)の任意の項を取得できます))、そして多くのアルゴリズムカタロニア語の生成は計算上かなり複雑です、IIRC。これに加えて、フィボナッチ数には、2つの連続したフィボナッチ数が与えられた場合、F(k)およびF(k + 1)、2つの値(F(k)+ F(k + 1)= F(k + 2))を加算または減算することにより、次または前のフィボナッチ数を簡単に計算できますそれら(F(k + 1)-F(k) = F(k-1))。このプロパティは、プロパティ(2)と組み合わせていくつかのアルゴリズムで利用され、分解されます。たとえば、フィボナッチ検索では、これを使用してメモリ内の値を特定しますが、同様のアルゴリズムを使用して対数を迅速かつ効率的に計算できます。
  4. それらは教育的に有用です。 再帰を教えるのは難しいので、フィボナッチシリーズはそれを紹介するのに最適な方法です。シリーズを紹介するときに、ストレート再帰、メモ化、または動的プログラミングについて話すことができます。さらに、驚くべき フィボナッチ数の閉じた形式 は、誘導または無限級数の分析の練習としてしばしば教えられ、関連する フィボナッチ数の行列方程式 通常、固有ベクトルと固有値の背後にある動機として線形代数で導入されます。これが、入門クラスで非常に注目されている理由の一つだと思います。

これ以上の理由があると確信していますが、これらの理由のいくつかが主な要因であると確信しています。お役に立てれば!

68
templatetypedef

最大公約数 はもう1つの魔法です。あまりにも多くの魔法については this を参照してください。しかし、フィボナッチ数の計算は簡単です。また、特定の名前があります。たとえば、自然数1、2、3、4、5のロジックが多すぎます。すべての素数はそれらの中にあります。 1..nの合計は計算可能で、それぞれが他のものと一緒に生成できますが、...

私がそれについて忘れていた1つの重要なことは ゴールデンレシオ であり、これは実際の生活に非常に重要な影響を及ぼします(たとえば、あなたはワイドモニターが好きです:)

4
Saeed Amiri

フィボナッチ数列は、実際、自然/生命のいたるところに見られます。動物の個体数の成長、植物細胞の成長、雪片の形、植物の形、暗号、そしてもちろんコンピューターサイエンスのモデリングに役立ちます。自然のDNAパターンと呼ばれていると聞きました。

フィボナッチヒープについてはすでに言及されています。ヒープ内の各ノードの子の数は最大でlog(n)です。また、m個の子を持つノードを開始するサブツリーは、少なくとも(m + 2)番目のフィボナッチ数です。

ノードとスーパーノードのシステムを使用するTorrentのようなプロトコルは、フィボナッチを使用して、新しいスーパーノードがいつ必要になるか、およびそれが管理するサブノードの数を決定します。フィボナッチスパイラル(黄金比)に基づいてノード管理を行います。以下の写真をご覧ください。ノードがどのように分割/マージされているか(1つの大きな正方形から小さな正方形へ、またはその逆)写真を参照してください: http://smartpei.typepad.com/.a/6a00d83451db7969e20115704556bd970b-pi

自然界のいくつかの出来事

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
Adrian

あなたがCSと自然の理解可能な例でシンプルで簡潔な方法でうまく説明できるアルゴリズムを持っているなら、誰かより良い教育ツールを思い付くことができますか?

1
savalia

[[0,1]、[1,1]]行列のべき乗としての計算は、Operational Researchの最も原始的な問題と考えることができます(Prisoner's Dilemmaのようなものは、Game Theoryの最も原始的な問題です)。

0

別のデータ構造を追加しましょう:フィボナッチツリー。ツリー内の次の位置の計算は、前のノードを追加するだけで行えるため、興味深いものです。

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

これは、AVLツリー上のtemplatetypedefによる議論と密接に関係しています(AVLツリーは、最悪の場合フィボナッチ構造を持つことができます)。場合によっては、2の累乗ではなくフィボナッチステップでバッファが拡張されることもあります。

0

明確な答えはないと思いますが、1つの可能性は、セットSを2つのパーティションS1とS2に分割し、その1つをサブパーティションS11とS12に分割し、その1つがS2-多くのアルゴリズムに対する可能性の高いアプローチであり、フィボナッチ数列として数値的に説明できる場合があります。

0
DVK

これについてのトリビアを追加するために、フィボナッチ数はウサギのパン粉を表します。 (1、1)、2匹のウサギから始めて、それらの人口は指数関数的に増加します。

0
Mihaela

連続するフィボナッチ数である周波数を持つシンボルは、最大深度のハフマンツリーを作成します。このツリーは、最大長のバイナリコードでエンコードされたソースシンボルに対応します。フィボナッチ以外のソースシンボル周波数は、より短いコードでよりバランスの取れたツリーを作成します。コード長は、特定のハフマンコードのデコードを担当する有限状態マシンの記述の複雑さに直接影響します。


推測:1番目(fib)の画像は38ビットに圧縮され、2番目(均一)の画像は50ビットに圧縮されます。ソースシンボルの周波数がフィボナッチ数に近いほど、最終的なバイナリシーケンスが短くなり、圧縮が向上し、ハフマンモデルで最適になるようです。

huffman.ooz.ie/?text=ABBCCCDDDDDEEEEEEEE

enter image description here

参考文献:

ブロー、M。(1993)。ハフマン符号の最大長について。情報処理レター、45(5)、219-223。 doi:10.1016/0020-0190(93)90207-p

0
FrantzelasG