算法复杂度(description in C)

本篇博客的目的是总结算法复杂度的概念,分析了几种经典算法的复杂度。

时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数用T(n)表示,如果可以找到函数f(n),使n趋向于无穷大时,T(n)/f(n)是某个不为0的常数,则称f(n)是T(n)的同数量级函数。数学上记做T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。

例1:给定一个整数n,以2的乘积的方式递增,需要计算多少次

image.png

计算次数x,2^x <= n,x = log2n,所以时间复杂度是O(log2n)

例2:冒泡排序

冒泡排序.png

计算次数T(n) = n * (n-1)/2,当n趋向于无穷大时,可以找到函数n2,(n*(n-1)/2)/(n2) = 0.5,所以时间复杂度是O(n2)

空间复杂度:类似于时间复杂度的讨论,空间复杂度定义算法所占用的存储空间是问题规模n的某个函数。算法占用的存储空间只考虑程序运行过程中为局部变量分配的存储空间的大小,包括参数表中形参占用的空间和函数体在运行过程中定义的局部变量空间。

如上冒泡排序法,除了算法本身占用的存储空间外,运行过程中额外增加了形参a和临时变量temp,且与问题规模n无关,所以空间复杂度是O(1)

例3:一个空间复杂度与问题规模n有关的算法,斐波那契数列递归实现

斐波那契数列.png

传入函数的参数从n开始递减,占用存储空间依次为(1 1 2 3 5...)* int类型占用的字节数,可以看到递归算法是相当吃内存的。

通项公式如下:
通项公式.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关...
    西域小码阅读 2,010评论 0 11
  • 算法的时间复杂度和空间复杂度-总结通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这...
    Explorer_Mi阅读 1,551评论 0 1
  • 算法复杂度 时间复杂度 空间复杂度 什么是时间复杂度 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗...
    KODIE阅读 3,403评论 0 9
  • 收集一些文章而已。 本文转自 http://blog.csdn.net/typhoonzb/article/det...
    暮雨沉沦阅读 601评论 0 5
  • 什么是算法的复杂度 算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。 一个...
    儒生阅读 1,861评论 0 2

友情链接更多精彩内容