斐波那契数已成为计算机科学专业学生对递归的流行介绍,并且有一个强有力的论点认为它们在自然界中存在。由于这些原因,我们中的许多人都熟悉它们。
它们也存在于其他地方的计算机科学中;在基于序列的令人惊讶的高效数据结构和算法中。
我想到了两个主要的例子:
这些数字是否有一些特殊属性使它们比其他数字序列具有优势?是空间品质吗?他们还有哪些其他可能的应用?
对我来说这似乎很奇怪,因为在其他递归问题中出现了许多自然数序列,但我从未见过加泰罗尼亚堆。
斐波那契数具有各种非常好的数学特性,使它们在计算机科学中表现出色。这里有几个:
我敢肯定还有更多的原因,但我敢肯定,其中一些原因是主要因素。希望这可以帮助!
斐波那契数列确实在自然界/生活中随处可见。它们可用于模拟动物种群的增长、植物细胞的生长、雪花形状、植物形状、密码学,当然还有计算机科学。我听说它被称为自然的 DNA 模式。
斐波那契堆已经被提及;堆中每个节点的子节点数最多为 log(n)。同样,从具有 m 个子节点的节点开始的子树至少是第 (m+2) 个斐波那契数。
使用节点系统和超级节点系统的 Torrent 协议使用斐波那契来决定何时需要新的超级节点以及它将管理多少个子节点。他们根据斐波那契螺旋线(黄金比例)进行节点管理。请参阅下面的照片,节点是如何拆分/合并的(从一个大正方形划分为较小的正方形,反之亦然)。见照片: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
如果你有一个算法可以用简单明了的方式成功地解释,并在 CS 和自然中提供可理解的例子,那么有人能想出什么更好的教学工具呢?
我认为没有明确的答案,但一种可能性是将集合 S 划分为两个分区 S1 和 S2 的操作,然后将其中一个划分为子分区 S11 和 S12,其中一个的大小与S2 - 可能是许多算法的一种方法,有时可以用数字描述为斐波那契数列。
让我为您添加另一个数据结构:斐波那契树。它们很有趣,因为树中下一个位置的计算可以仅通过添加先前的节点来完成:
http://xw2k.nist.gov/dads/html/fibonacciTree.html
它与 templatetypedef 对 AVL-trees 的讨论非常吻合(AVL 树在最坏的情况下可以具有斐波那契结构)。在某些情况下,我还看到缓冲区以斐波那契步长而不是 2 次方的形式扩展。
只是为了添加一个琐事,斐波那契数字描述了兔子的面包屑。你从 (1, 1) 开始,两只兔子,然后它们的数量呈指数增长。
频率为连续斐波那契数的符号创建最大深度霍夫曼树,该树对应于用最大长度二进制代码编码的源符号。非斐波那契源符号频率创建更平衡的树,代码更短。代码长度直接影响负责解码给定霍夫曼代码的有限状态机的描述复杂性。
猜想:第一个(fib)图像将被压缩为 38bits,而第二个(uniform)图像将被压缩为 50bits。似乎您的源符号频率越接近斐波那契数,最终二进制序列越短,压缩越好,在霍夫曼模型中可能是最佳的。
延伸阅读:
Buro, M. (1993)。关于霍夫曼码的最大长度。信息处理快报,45(5),219-223。doi:10.1016/0020-0190(93)90207-p
它们作为 [[0,1],[1,1]] 矩阵的幂的计算可以被认为是运筹学中最原始的问题(有点像囚徒困境是博弈论中最原始的问题)。