在计算机科学中算法指的是,算法 - 为什么斐波纳契数在计算机科学中具有重要意义?...

斐波那契数在计算机科学中因其特殊的数学属性而广泛应用,如指数级增长、可唯一分解及高效计算。它们在数据结构如AVL树和Fibonacci堆中起到关键作用,提供良好的时间复杂度。此外,Fibonacci数还用于算法如搜索和递归概念的教学,以及在自然界中的模拟。它们与黄金比例相关,影响着设计和生物学等领域。
摘要由CSDN通过智能技术生成

算法 - 为什么斐波纳契数在计算机科学中具有重要意义?

Fibonacci数字已经成为计算机科学学生递归的一个流行的介绍,并且有一个强烈的论据,他们坚持在自然界。 出于这些原因,我们很多人都熟悉它们。

它们也存在于其他地方的计算机科学中; 在基于序列的令人惊讶的有效数据结构和算法中。

我想到了两个主要的例子:

Fibonacci堆更好摊销运行时间比二项式堆。

斐波那契搜索共享O(log N)二进制运行时间搜索有序数组。

这些数字是否有某些特殊属性可以使它们优于其他数字序列? 这是空间质量吗? 他们还有哪些其他可能的应用程序?

这对我来说似乎很奇怪,因为在其他递归问题中有许多自然数字序列,但我从未见过加泰罗尼亚语堆。

8个解决方案

67 votes

Fibonacci数字具有各种非常好的数学特性,使它们在计算机科学中表现出色。 这里有几个:

它们以指数级增长。 Fibonacci系列出现的一个有趣的数据结构是AVL树,一种自平衡二叉树。这棵树背后的直觉是每个节点都保持一个平衡因子,这样左右子树的高度最多相差一个。因此,你可以想到获得高度为h的AVL树所需的最小节点数由一个看起来像N(h + 2)〜= N(h)+ N(h + 1)的重现来定义,看起来很像Fibonacci系列。如果你算出数学,你可以证明获得高度为h的AVL树所需的节点数是F(h + 2) - 1.因为Fibonacci系列呈指数级增长,这意味着AVL的高度树在节点数量上最多是对数,给你O(lg n)查询时间,我们知道并喜欢平衡二叉树。实际上,如果您可以使用Fibonacci数绑定某个结构的大小,则可能会在某些操作上获得O(lg n)运行时。这就是Fibonacci堆称为Fibonacci堆的真正原因 - 证明了出队时间之后堆的数量涉及使用Fibonacci数限制一定深度的节点数。

任何数字都可以写成唯一斐波纳契数的总和。 Fibonacci数的这个属性对于让Fibonacci搜索工作至关重要; 如果你不能将唯一的Fibonacci数字加到任何可能的数字中,那么这个搜索将不起作用。 与许多其他系列对比,如3n或加泰罗尼亚数字。 这也是部分原因,我认为很多算法都像2的幂。

Fibonacci数是有效可计算的。 系列可以非常高效地生成(你可以在O(n)中获得前n个项或在O(lg n)中获得任意项),然后很多使用它们的算法都不实用。 生成加泰罗尼亚语的数字在计算上非常棘手,IIRC。 除此之外,Fibonacci数有一个很好的属性,给定任意两个连续的Fibonacci数,假设F(k)和F(k + 1),我们可以通过添加两个值来轻松计算下一个或前一个Fibonacci数。 (F(k)+ F(k + 1)= F(k + 2))或减去它们(F(k + 1)-F(k)= F(k-1))。 该属性在几个算法中被利用,与property(2)一起使用,将数字分成Fibonacci数的总和。 例如,Fibonacci搜索使用它来定位内存中的值,而类似的算法可用于快速有效地计算对数。

他们在教学上很有用。 教学递归很棘手,Fibonacci系列是介绍它的好方法。 在介绍该系列时,您可以谈论直接递归,关于memoization或动态编程。 此外,Fibonacci数的惊人封闭形式通常被教导为归纳或无限级数分析中的运动,而Fibonacci数的相关矩阵方程通常在线性代数中作为特征向量和特征值背后的动机引入。 我认为这是他们在入门课程中如此高调的原因之一。

我确信有更多的理由不仅仅是这个,但我确信其中一些原因是主要因素。 希望这可以帮助!

templatetypedef answered 2019-05-05T06:41:56Z

4 votes

最大的除数是另一种魔法; 看到这个太多的魔法。 但Fibonacci数字很容易计算; 它也有一个特定的名称。 例如,自然数1,2,3,4,5有太多逻辑; 所有素数都在其中; 1..n的总和是可计算的,每个人可以与其他人一起生产,......但没有人照顾他们:)

我忘了它的一个重要事项是黄金比例,它对现实生活有非常重要的影响(例如你喜欢宽屏显示器:)

Saeed Amiri answered 2019-05-05T06:42:32Z

1 votes

如果你有一个算法可以用一个简单而简洁的方法成功地解释,在CS和自然界中可以理解的例子,那么有人能提出哪些更好的教学工具?

savalia answered 2019-05-05T06:42:58Z

1 votes

斐波那契序列确实在自然界/生命中无处不在。 它们可用于模拟动物种群的增长,植物细胞生长,雪花形状,植物形状,密码学,当然还有计算机科学。 我听说它被称为自然的DNA模式。

Fibonacci堆已经被提到了; 堆中每个节点的子节点数最多为log(n)。 此外,以m个子节点开始节点的子树至少是(m + 2)个斐波纳契数。

像使用节点和超级节点系统的协议一样使用斐波纳契来决定何时需要新的超级节点以及它将管理多少个子节点。 他们根据斐波纳契螺旋(黄金比率)进行节点管理。 请参见下面的照片,如何拆分/合并节点(从一个大的广场划分为较小的广场,反之亦然)。 见照片:[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]

Adrian answered 2019-05-05T06:44:37Z

0 votes

我不认为有确定的答案,但有一种可能性是将一组S分成两个分区S1和S2的操作,其中一个分区然后被分成子分区S11和S12,其中一个分区具有相同的大小。 S2 - 是许多算法的可能方法,有时可以在数值上描述为斐波纳契数列。

DVK answered 2019-05-05T06:45:07Z

0 votes

让我为您添加另一个数据结构:Fibonacci树。 它们很有趣,因为只需添加以前的节点就可以计算树中的下一个位置:

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

它与在AVL树上的templatetypedef的讨论很好地结合(AVL树在最坏的情况下可能具有斐波纳契结构)。 在某些情况下,我也看到过在fibonacci步骤中扩展的缓冲区而不是2的幂。

I GIVE CRAP ANSWERS answered 2019-05-05T06:45:52Z

0 votes

只是为了增加一个关于这个的琐事,斐波纳契数字描述了兔子的面包屑。 你从(1,1),两只兔子开始,然后他们的人口呈指数增长。

Mihaela answered 2019-05-05T06:46:20Z

0 votes

它们作为[[0,1],[1,1]]矩阵的幂的计算可以被认为是运算研究中最原始的问题(有点像囚徒的困境是博弈论中最原始的问题)。

Dmitry Rubanovich answered 2019-05-05T06:46:46Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值