为什么计算斐波那契数列的复杂度是 2^n 而不是 n^2?

2023-12-31

我试图使用递归树找到斐波那契数列的复杂性并得出结论height of tree = O(n)最坏的情况下,cost of each level = cn, hence complexity = n*n=n^2

怎么会这样O(2^n)?


朴素递归斐波那契的复杂度确实是 2ⁿ。

T(n) = T(n-1) + T(n-2) = T(n-2) + T(n-3) + T(n-3) + T(n-4) = 
= T(n-3) + T(n-4) + T(n-4) + T(n-5) + T(n-4) + T(n-5) + T(n-5) + T(n-6) = ...

在你调用的每一步中T两次,因此将提供最终的渐近屏障:
T(n) = 2⋅2⋅...⋅2 = 2ⁿ

bonus:斐波那契的最佳理论实现实际上是封闭公式 http://en.wikipedia.org/wiki/Fibonacci_number#Matrix_form, 使用黄金比例 http://en.wikipedia.org/wiki/Golden_ratio:

Fib(n) = (φⁿ – (–φ)⁻ⁿ)/sqrt(5) [where φ is the golden ratio]

(然而,由于浮点运算并不精确,它在现实生活中会出现精度误差)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么计算斐波那契数列的复杂度是 2^n 而不是 n^2? 的相关文章

  • 给定一个零索引数组 & 该数组的平衡索引[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给出一个由 N 个整数组成的零索引数组 A 该数组的平衡索引是任何整数 P 满足 0 P 例如 考虑以下由 N 8 个元素组成的数组
  • 是否可以证明序列是否是随机的?

    考虑以下输入 1 1 2 3 5 8 这不是随机的 2 4 8 16 32 这都不是 4 1 2 11 5 9 这个看起来像随机序列 我想问是否有这样的算法来证明输入是否是随机的 不 没有这样的证明 如果你有完全随机的数字 则每个长度为 n
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • 颜色渐变算法

    给定两种 RGB 颜色和一个矩形 我可以创建一个基本的线性渐变 这博客文章 https bsou io posts color gradients with python关于如何创建它给出了很好的解释 但我想在这个算法中添加一个变量 角度
  • 具有 3 路划分的快速排序

    什么是三向分区快速排序 画一个数组 3 5 2 7 6 4 2 8 8 9 0 A 两分区快速排序会选择一个值 比如 4 并将每个大于 4 的元素放在数组的一侧 将每个小于 4 的元素放在另一侧 就像这样 3 2 0 2 4 8 7 8 9
  • 有人真正有效地实现了斐波那契堆吗?

    你们中有人曾经实施过斐波那契堆 http en wikipedia org wiki Fibonacci heap 几年前我就这样做了 但它比使用基于数组的 BinHeaps 慢了几个数量级 当时 我认为这是一个宝贵的教训 告诉我们研究并不
  • 通过保留和复制来复制向量,还是通过创建和交换来复制向量更有效? [复制]

    这个问题在这里已经有答案了 我正在尝试有效地复制向量 我看到两种可能的方法 std vector
  • 在小于 O(N) 的时间内找出点是否位于 N 个(可能重叠)矩形之一内

    我有一个图像 我想在鼠标移动到某些矩形区域时显示工具提示 矩形区域最多可达 1000 个 但是 仅检查每个矩形中是否有点 时间复杂度为 O N 导致移动鼠标时界面无响应 有没有办法在小于 O N 的时间内完成它 我可以预先对矩形进行排序 我
  • 为什么路径压缩不会改变 UnionFind 中的排名?

    我正在研究 UnionFind 的实现 并从这里进行排序和路径压缩http en wikipedia org wiki Disjoint set data struct Disjoint set forests http en wikipe
  • 图中使用 K 个反向边的所有最短路径

    假设我有一个有向图 G V E 其边的权重为正整数 我需要做的是使用最多 K 整数 个反向边找到所有顶点之间的最短路径 我的意思是 如果我们在边 u 处 并且只有一条从 v 到 u 的有向边 只要我们没有在这条路径上使用 K 个反向边 我们
  • 如何将嵌套对象数组转换为 CSV?

    我有一个包含嵌套对象的数组 例如 name 1 children name 1 1 children 1 2 id 2 thing name 2 1 children 2 2 name 3 stuff name 3 1 children 3
  • 算法挑战:从图像生成配色方案

    背景 因此 我正在开发一个网络应用程序的新版本 而且 我们发现我们的用户非常懒惰 实在是太懒了 事实上 我们为他们做的工作越多 他们就越喜欢这项服务 现有应用程序的一部分要求用户选择要使用的配色方案 但是 我们有一张图片 用户网站的截图 为
  • 二指针算法

    我想了解两指针算法方法 所以我一直在阅读本文 https tp iiita quora com The Two Pointer Algorithm 所以这是问题 假设我们有一个包含 N 个元素的数组 我们想要找到该数组中最大的连续元素序列
  • 计算字母表的第 n 个 6 个字符排列

    我已经研究了好几天 试图找到解决这个问题的方法 如果需要的话 我很乐意花钱请人咨询时间来解决这个问题 我目前正在使用Python迭代工具 http docs python org 2 library itertools html生成 32
  • 将括号子集映射到字符

    我正在尝试创建一个 Scala 方法 该方法将采用一个父括号组 表示为字符串 然后将每个括号子组映射到不同的字母 然后它应该将它们放入它返回的映射中 所以基本上我调用以下方法 如下所示 val s 2 x 3 6 val map mapPa
  • 快速排序优化

    我正在学习排序算法 下一步 我试图让我的实现接近std sort 到目前为止我还很远 我有 3 个快速排序的实现 标准快速排序 使用临时数组 quicksort with following optimizations median3 用于
  • Mathematica 圆柱分解的计算复杂度是多少

    数学 圆柱分解 http reference wolfram com mathematica ref CylindricalDecomposition html实现一种称为圆柱代数分解的算法 Wolfram MathWorld 的文章圆柱代
  • 时间复杂度:连续对一个数字的数字进行求和,直到结果为一位数

    给我一个数字 N 不断对数字求和 直到结果为一位数 例如 35252 gt 17 gt 8 我写了以下代码 int digitSum int n int sum 0 int digit while n digit n 10 n n 10 s
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN

随机推荐