前言
时间复杂度(Time complexity)是算法中一个重要的概念,一起来了解一下
O(1)
观察以下代码段
print("Hello world!")
这是一句输出语句,那在算法中怎么表示呢?
首先我们了解一下表示算法的时间复杂度的符号:用O()表示
而这段语句很简短,只有1句语句,所以可以直接填写O(1)
那我们观察以下这段代码
print("Hello csdn!")
print("Hello github!")
print("Hello vscode!")
print("Hello Earth!")
那有同学肯定要说了,O(4)啊,这也太简单了吧!X
No~No~No
O()里面填写的是一个单位,并不用精确到具体数,所以这段代码仍然用O(1)来表示
况且时间复杂度就是用来表示时间的,用来打印1句和4句速度差别极小
O(n)
观察以下代码,我们能用O(1)判断吗?
for i in range(n):
print("你好")
这段语句中range了n,显然不能用O(1)判断
观察一下 for i in range(n),这里的n是不是可以用作一个单位呢?
O(n²) & O(n³)
观察以下代码,怎样判断嵌套循环的时间复杂度呢?
for i in range(n):
for j in range(n):
print("hi")
这是一个双层的嵌套循环,根据我们前面判断O(n)的经验,你想一想怎zai么去判断呢?
在单层嵌套循环中,我们循环了n次,也就是n*1次,那双层嵌套循环,我们是不是就循环了
n*n次,也就是n²次了
掌握了这么多内容,看看如何判断如下代码的时间复杂度
for i in range(n):
print("哈喽")
for j in range(n):
print("?")
for k in range(n):
print("111")
三层嵌套循环,然后都有打印,难道是O(n³+n²+n¹)?
No~No~No
前面说过,时间复杂度的单位表示的是大概,所以直接用O(n³)就好了
下次看到有几层嵌套,可以写O(n几次方)
关于O(logn) O(n!) O(nⁿ)等就详见下回啦