(1)通过公式的形式大概估算出一个算法耗费的时间
print("HelloWorld") O(1) 这个O是数学中表示一个界限的上界,也可以理解为是最大值,封顶,也可以说是大约是这个括号中的值。
for i in range(n):
print("HelloWorld") O(n)
for i in range(n):
for j in range(n):
print("HelloWorld") O(n²)
for i in range(n):
for j in range(n):
for k in range(n):
print("HelloWorld") O(n³)
时间复杂度在很多时候,O()括号中的那个数字或者字母更多像是一种算法中的特殊计量单位,而在一个低级单位遇见相同单位时通常就融合成一个低级单位,例如下(1);而在一个低级单位遇见了另一个量级相对更高的单位时,通常忽略低级单位带来的细微的事件复杂影响,如下(2):
print("HelloWorld")
print("Algorithm")
print("Python") (1)
时间复杂度为O(1)而不是O(3),如上面所解释的,多个同级单位在一起,取一个单位的时间复杂度作为整体的时间复杂度;
for i in range(n):
print("Algorithm")
for j in range(n):
print("Algorithm") (2)
这一段的时间复杂度就为O(n²)而不是看见的那样O(n+n²),就如上讲所说的,低级遇高级,高级为主,所以是O(n²)。
n = 128
while n > 1:
print(n)
n = n // 2 (1)
while n > 1:
print(n)
n = n - 2 (2)
while n > 1:
print(n)
n = n // 3 (3)
如(1)所示情况,这个时候的时间复杂度为O(log[2]n),不是可能第一眼看过去想到的O(n/2),很明显在n=128的时候,这个程序的n值会输出128,64,3,16,8,4,2,执行了7次,而不是像我第一眼看过去所认为的64次,这是对数级的时间复杂度,像(1)也可以略写成O(logn)(一般在程序出现折半的,也就是一次砍去一半的情况,时间复杂度就是O(log[2]n));
而(2)所示的,这时候的情况就是O(n/2),通常我们不写O(n/2),而是写成O(n);
像(3)所示的这种情况就该写成O(log[3]n),而这个就没有像(1)所示的缩写的情况。
一般情况下,按照效率,或者简单来讲,按照运行速度来说,
O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n²logn)<O(n³);
而在一些比较难的算法题中,可能会出现一些不太常见的时间复杂度,如下:
O(n!) O(2{n次方}) O(n{n次方})
算法运行的快慢(时间复杂度)
最新推荐文章于 2023-04-26 12:55:38 发布
本文介绍了如何通过O记法估算算法的时间复杂度,解释了不同级别的复杂度如O(1),O(n),O(n²)等的含义,并通过示例说明了在处理循环和递归时如何分析复杂度。还提到了对数级别的时间复杂度O(logn)以及不常见的复杂度如O(n!)和O(2^n)。
摘要由CSDN通过智能技术生成