时间复杂度与空间复杂度

时间复杂度与空间复杂度

一、基本概念

我们可以使用程序语言的时间函数记录一个程序执行所需的时间,最大的缺点是程序执行的时间会随计算机的不同有所差异,所以绝对时间概念一般不被计算机科学家采用。

程序运行时间的测量方法是采用步骤数表示程序运行时间,基本测量单位是1个步骤,由步骤数测量程序执行所需时间,又将步骤数称时间复杂度。

假设骑自行车每2分钟可以骑1千米,请问骑10千米需要多少时间?

答案是2*10,需要20分钟。

假设骑n千米,需要2n分钟。

在时间测量方法中,可以使用T()函数表达所需时间,骑n千米所需时间可以用数学公式表达:

T(n)=2n

假设有16千米路段,骑自行车每3分钟可以骑剩下路程的一半,骑剩1千米需要多少时间?

第一个3分钟骑8千米,第2个3分钟骑4千米,第3个3分钟骑2千米,第4个3分钟骑1千米,表达式:

3*log16

T(n)=3logn

假设骑自行车每一千米所需时间比前1千米多1分钟,骑10千米需要多少时间?

1+2+…+10=55分钟

如果是n千米,所需时间:

T(n)=0.5n2+0.5n

假设骑自行车每2分钟可以骑1千米,喝一杯饮料需要2分钟,请问喝饮料需要多少时间?

T(n)=2

时间测量复杂度

在计算机科学领域,实际上是将程序执行的时间测量简化为一个数量级数,简化的结果也称时间复杂度,使用O(f(n))表示,也称bigO表示法。

如果时间复杂度是常数,用1表示。

T(n)=O(1)

有系数省略系数。

T(n)=O(n)

保留最高阶项目,同时省略系数。

T(n)=O(n2)

当n足够大时,相对时间关系如下:

O(1)

内存的使用:空间复杂度

执行算法的内存空间,也称空间成本。为了提高效率,我们可以使用额外的内存存储中间数据,这个额外内存就是空间复杂度。

假设在遍历每个数据时,将此数据放在一个字典形式的哈希表。字典哈希表左边字段key是键值,右边字段value是该键值出现的次数,每次遍历一个数值时,先检查该值在字典是否出现,如果没有就将此数值依哈希表规则放入字典内。如果遍历到最后一个数值是3,可以发现该值出现过,这时就获得我们所要的解答了。

上述时间复杂度是O(n),效率大大提高了,而使用额外暂时存储的字典哈希表空间是n

S(n)=O(n)

原先使用重复遍历找寻重复数字的空间复杂度是O(1),但时间复杂度是O(n2),两者取舍时,时间复杂度是优先于空间复杂度,因为算法的时间成本更重要,相当于用内存空间去换时间。

空间复杂度的计算

O(1)称为常数空间,O(n)称为线性空间,O(n2)称为二维空间。

你可能感兴趣的:(算法,算法,数据结构)