一.什么是数据结构和算法?
1.什么是数据结构?
数据结构是程序存储,组织数据的方式。一个数据结构是由程序中的数据元素按照某种逻辑关系组织起来的。是若干个数据元素的组合
数据结构是程序中处理数据的基本单位,在程序中作为一个整体来使用
2.什么是算法?
算法就是解决问题的方法。
eg:1+2+3+4........+1000000 计算出
一种是累加法一个个的加
一种是利用等差数列求和公式直接算出答案
3.如何能评判算法的优劣------------通过时间复杂度来进行判别
算法的时间复杂度是如何计算出来的?
时间复杂度是研究数据总量x和算法执行次数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(logn)
eg:求时间复杂度
时间复杂度是研究:数据总量n和执行次数Y之间的关系
void fun(int n ){
int i = 1;
while(i<n){
i = i*2;
}
}
第一轮:i = 1
第二轮: i = 2
第三轮: i = 4
第四轮: i = 8
第五轮: i = 16
第y轮: i = 2^(y-1) = n
2^y=n-------------->y=log2n
时间复杂度是:O(logn)
void fun(int n ){
int i = 1;
while(i*i*i<n){
i ++;
}
}
第一轮:i = 0
第二轮: i = 1
第三轮: i = 2
第四轮: i = 3
第y轮:i = (y-1)
(y-1)*(y-1)*(y-1) = n
y^3 = n
y = n^1/3
时间复杂度: O() (n的三分之一次方)
x=2;
while(x<n/2){
x=x*2;
}
第一轮:x = 2
第二轮: x = 4
第三轮: x =8
第四轮: x =16
第y轮:x =2^y
2^y=n --------------> y= log₂n
x = 0;
while (n>(x+1)*(x+1)){
x = x+1;
}
y*y=n
时间复杂度是:y=
i = 1 ; k = 0;
while(i<n-1){
k = k+10*i;
i++;
}
y=n-1
时间复杂度: O(n)