forked from go/golangs_learn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1.7 KiB
1.7 KiB
算法运行效率与时间复杂度
- 时间复杂度
使用表示算法运行的快慢 和 循环次数
1、时间复杂度=o(1)
print('Hello World!')
2、时间复杂度=o(n)
for(int i = 0; i < n; i++){
print('Hello World!')
}
3、时间复杂度=o(n*m)
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
print('Hello World!')
}
}
注意区分
理解:问题规模
4、时间复杂度=o(1)
print('Hello World!')
print('Hello Java!')
print('Hello Zhang!')
5、时间复杂度=o(n2)
for(int i = 0; i < n; i++){
print('Hello Java!')
for(int j = 0; j < m; j++){
print('Hello World!')
}
}
5、时间复杂度=o(log2 n) 或者 o(log n)
while(n>1){
print('Hello World!')
n = n / 2
}
当n=64, 则输出为64、32、16、8、4、2
由于26=64,则log2 64=6。
以此类推:
n = n / 3
为 o(log3 n)以此类推:
n = n / 4
为 o(log4 n)总结:只要问题规模出现循环减半情况,则使用对数描述时间复杂度;
只要问题规模出现多层循环情况,则使用次幂描述时间复杂的。
- 小结
时间复杂度是用来描述估计算法运行时间的一个式子(单位)。
一般来说,时间复杂度高的算法比复杂度低的算法慢。
常见的时间复杂度排序(按效率排序 【主要:o(1) < o(log n) < o(n) 】)
o(1) < o(log n) < o(n) < o(n * log n) < o(n2) < o(n2 * log n) < o(n3)