【学习笔记之数据结构】斐波那契数的时间复杂度与空间复杂度

简介: 【学习笔记之数据结构】斐波那契数的时间复杂度与空间复杂度

首先需要建立一个思想,时间是一去不回的,内存空间是有限的的。所以时间是不断增加,空间会被收回。

// 计算斐波那契递归Fib的时间复杂度?
long long Fib(size_t N) {
  if (N < 3)
    return 1;
  return Fib(N - 1) + Fib(N - 2);
}


大致罗列一个框架,可以发现每进行一次递归,他的执行次数就会翻一倍,也就是x2。这个可以看做是一个首项是1,等比值为2的等比数列。那么我们求时间复杂度就可以转换为求这个等比数列之和,就可以直接利用现有公式算出结果为2(N-1)-1,然后通过渐进表示法,就可以得到时间复杂度:O(2N);

 计算机为我们程序分配的空间是有限的,如果调用多少次就开辟多少空间,那么内存肯定是不够的,所以内存必然会收回。分析一下代码,Fib(N - 1) + Fib(N - 2),在Fib(N - 1)没有小于3之前,一直是在给Fib(N - 1)开辟空间,当Fib(N - 1)小于3之后,开辟的空间又逐个进行收回,返回到第一个Fib(N - 2)之后,重复之前的操作。所以空间复杂度为O(N)。


c617b26f4c934647a54e955d45391110.png

目录
相关文章
|
2月前
|
算法 搜索推荐 程序员
数据结构中时间复杂度的介绍
冒泡排序是通过重复遍历数组,比较并交换相邻元素来排序数组的。因为它包含两层嵌套循环,每层循环的最大迭代次数近似于n,所以时间复杂度是O(n²)。 通过上述分析,我们可以看到不同代码结构对算法性能有着显著的影响。在设计数据结构和算法时,理解并计算时间复杂度是非常重要的,它帮助程序员选择或优化算法,以处理更大的数据集或提高程序的运行速度。
18 2
|
2月前
|
存储 算法 C语言
数据结构中的空间复杂度
优化空间复杂度对于提升程序性能和资源利用率至关重要,特别是在资源受限的环境(如嵌入式系统和移动设备)中。高效的数据结构和算法设计可以显著提升程序的执行效率和可扩展性。 综上所述,理解和优化空间复杂度是设计高效数据结构和算法的关键。通过分析常见数据结构的空间复杂度,并结合实际代码示例,我们可以更好地理解这一重要概念,并在实际编程中应用这些知识。希望本文能帮助你更好地掌握空间复杂度及其在数据结构中的应用。
16 2
|
7天前
|
存储 算法
【数据结构】——时间复杂度与空间复杂度
【数据结构】——时间复杂度与空间复杂度
|
2月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
2月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
2月前
|
算法
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
23 2
|
2月前
|
机器学习/深度学习 算法
数据结构入门 时间 空间复杂度解析
数据结构入门 时间 空间复杂度解析
22 0
|
2月前
|
存储 算法 C语言
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
24 0
|
2月前
|
算法 Shell C语言
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
23 0
|
2月前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
26 0