1.什么是数据结构?
2.什么是算法?解决问题的方法
1+2+3+4+5+6+......+1000 ---------->累加法:一个个的加
----------->利用等差数列求和公式直接算出答案
如何评判算法的优劣---------------->通过时间复杂度来进行判别
算法的时间复杂度是如何计算出来的?
时间复杂度是研究数据总量x和算法执行次数y之间的关系。
y=an+b(是系数,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别的关系----------
void fun(int n){ 第一轮 i = 1
int i = 1; 第二轮 i = 2
while(i<n){ 第三轮 i = 4
i = i*2; 第三轮 i = 8
} 第四轮 i = 16
} 第y轮:i = 2^(y-1) = n
2^y = n------------------->y = log2n
时间复杂度是研究:数据总量n和执行次数Y之间的关系。
void fun (int n){
int i = 0
while(i*i*i<n){
I++;
}
}
C.O(3倍的根号n)
第一轮:i=0
第二轮:i=1
第三轮:i=2
第四轮:i=3
......
第五轮:i=(y-1)
(y-1)*(y-1)*(y-1)= n
y^3=n
y=n^1/3
x = 2
whlie(x<n/2){
x = x * 2;
}
第一轮:x = 2
第二轮:x = 4
第三轮:x = 8
第四轮:x = 16
.....
第y轮:x = 2^y
2 ^ y =n--------->y=log2n
x = 0
while (n>(x+1)*(x+1)){
x = x + 1;
}
第一轮:x = 0
第二轮: x = 1
第三轮:x = 2
.....
第y轮:x = y-1
y^y =n
y=?
i = 1
while(i<n--1){
k = k+10*i
i++;
}
一轮:i = 1
二: i = 2
三: i = 3
....
y:i = y
y = n-1