算法入门——时间复杂度与空间复杂度

算法入门——时间复杂度与空间复杂度_第1张图片

 时间复杂度是一个单位概念,是衡量程序复杂程度或同等条件下程序运行快慢的标准。我们记输出,加减乘除四则运算的复杂度为O(1)(O在这里表示数学上的一个上界的概念),相应的,嵌套k层循环的程序复杂度就是n的k次方。但是要注意,时间复杂度是一个单位就是把O(1)定义为一个单位,不管是输出一个语句还是你打五个print输出五个语句,其复杂度都是O(1),同理如果有循环a{输出a,循环b{输出b}}应该为O(n²+n)的复杂度,因为其n对n²而言微不足道,故而其复杂度应该是O(n²),上面是错的,具体如下:

算法入门——时间复杂度与空间复杂度_第2张图片

 对于while循环语句会有时候出现复杂度为O(logn)(即O(log₂n)因为计算机一般是二进制,别跟我说什么苏联的三进制计算机,早解体了呵呵呵,就可以省略下标2)算法入门——时间复杂度与空间复杂度_第3张图片

 因为上述程序循环是六次,每次相当于循环总数n除以二代入,所以n与2存在对数关系,故而表达为logn。思考:若把上述循环语句中n//2改为n-2,则时间复杂度应该是多少?

答案是O(n)因为改好后循环的次数从logn次变成n/2次,n/2与n属于一个单位的数量级,所以复杂度是O(n)算法入门——时间复杂度与空间复杂度_第4张图片空间复杂度相对于时间复杂度不是一个那么常用概念,就是说当代的大多数程序主要追求节省时间而非空间,在内存越来越廉价的当下,更多的会设计复杂度低内存大的程序,去换取时间上的优势。

空间复杂度也是一个单位概念,无论是一个变量a,还是几个变量a,b,c,d,e,f,g,都是空间复杂度为O(1)。而O(n)在空间复杂度里表示一维列表。O(mn)表示一个二维列表

算法入门——时间复杂度与空间复杂度_第5张图片

部分图片参考自b站路飞学城python算法学习视频,本文仅供个人学习使用,特此声明

你可能感兴趣的:(Algorithm,算法,python)