2.什么是算法? ----------------------> 解决问题的方法
1+2+3+4+5+6+.......+1000
(1)累加法:一个个的加
(2)利用等差数列求和公式直接算出答案
如何评判算法的优劣 ---------------------------> 通过时间复杂度来进行判别
算法的时间复杂度是如何计算出来的?
时间复杂度是研究数据总量n和算法执行次数y之间的关系 |
y= an + b (a是系数,b是常数),如果n非常大-->y=n(算法执行次数和数据总量直接相关)--->O(n)
y= an^2+bn+c(ab是系数,c是常数),如果n非常大-->y=n^2(算法执行次数和数据总量的平法直接相关)--->O(n^2)
y= a (a是常数),-------->算法的执行次数和数据总量没有任何关系)--->O(1)
y= logn---------->算法的执行次数和数据总量存在log别的关系--->O(long)
例题:(时间复杂度)
void fun(int n){
int i = 1;
while(i<n){
i = i *2;
}
}
viod fun(int n ){ int i = 1; while(i<n){ i = i*2 } } | 时间复杂度是研究:数据总量n和执行次数y之间的关系 第一轮:i = 1 第二轮:i = 2 第三轮:i = 4 第四轮:i = 8 第五轮:i = 16 ....... 第y轮:i = 2^(y-1) = n |
O(logn) | 2^y = n ---------------y = log2n |