关于算法复杂度的分析
Hello,各位看官好,今天我们来说一个问题,就是如何计算算法复杂度(这里所说的算法复杂度就是时间复杂度)。
一、时间复杂度的概念
二、计算时间复杂度的原理以及方法
三、练习题目
一、时间复杂度的概念
这里要说一下,时间复杂度其实可以分成三种,分别是最好时间复杂度,最坏时间复杂度,以及准确复杂度,那么我们平时说的是哪一种呢?我们所说的就是最坏时间复杂度,简称大O,
那么其实其他两种复杂度我们需不需要呢?其实也是需要的,不过我们无需理会他们到底怎么算的,只需要记住他们的标记,其中最好时间复杂度为大Ω,准确时间复杂度为大θ。
二、时间复杂度的原理以及方法
计算时间复杂度,以我个人的经验来说,只需要记住三件事情:
1、首先要看循环几层
2、需要看循环里面的内容和外面的内容是否有关联
3、如果一下子看不出来,那么就找出规律,一个一个算。
我们逐条解说
1、首先要看循环几层
1、一般来说循环几层就是n的几次方(前提是判断条件和循环里面的内容没有关系),举例:
public void loop(int n) {
int result = 0;
for (int i = 0; i < n; i++) {
result ++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; i < n; i++) {
result ++;
}
}
}
这里的话就一目了然,最高位两层而且里面的内容和判断条件没有关系,所以他的时间复杂度就是n2
2、需要看循环里面的内容和外面的内容是否有关联
我们举一个例子:
public void multiplication(int n) {
int result = 1;
while (result <= n) {
result = result * 2;
}
}
这里来说判断条件就跟里面的部分有关联,那么这里就需要看2n >=n,所以他的内容就是log2n。
3、如果我们不确定他的复杂度是多少,我们就按照规律将写出来,结果自然一目了然。
三、练习题目
x = n;
y = 1;
while(x >= (y-1)*(y-1)) {
y++;
}
这是邓俊峰老师的数据结构书里面的一道练习题,我们可以以此来做一下解题思路:
y=1 x>=0
y=2 x>=1
y=3 x>=4
y=4 x>=9
y=n x>=n2
那么我们替换一下参数n=x,x=n(因为这样比较好看),x2=n,结果x=log2n,结束。
以上就是我对算法时间复杂度的理解。