您的位置:首页 > 理论基础 > 数据结构算法

数据结构每日更新——第一天:算法

2018-03-19 09:07 543 查看

1.算法的特性:有穷性、确定性、可行性、输入、输出

2.算法的设计的要求:正确性、可读性、健壮性、高效率和低存储量需求

3.算法的度量方法:事后统计方法(不科学)、事前分析估算能力

4.算法时间复杂度

推导大O阶:

- 用参数1代替加法参数

- 在修改后的运行次数函数中,只保留最高阶项

- 如果最高阶存在且不是1,则除去与这个项相乘的常数

得到的结果就是大O阶

5.常数阶

int main(){
int sum=0,n=100; //一次
sum = (1+n) * n/2; //一次
printf("%d",sum);  //一次
}


时间复杂度为O(1)

6.线性阶

int i;
for(i=0;i<n;i++){
printf("复杂度为O(1)的程序步骤!");
}


时间复杂度为O(n)

7.平方阶

int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("复杂度为O(1)的程序步骤!");
}
}


时间复杂度为O(n^2)

第二种情况:

int i,j;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
printf("复杂度为O(1)的程序步骤!");
}
}


这里i循环是n次,但是j循环里面逐渐减少。

i=1,j=n-1;i=2,j=n-2;……

可得到总执行次数为:n^2/
98d0
2 + n/2

所以时间复杂度为O(n^2)

8.对数阶

int count=1;
while(count<n){
count = count * 2;
printf("复杂度为O(1)的程序步骤!");
}


这里count每次乘以2,离n越来越近,有多少个2相乘后大于n,则会退出循环。由2^x=n得到x=log2(n)

时间复杂度为O(logn)

9.一般在没有特殊说明情况下,都是指定最坏时间复杂度

10.空间复杂度(不扩展,主要讲时间复杂度,以后再来看)

11.常见时间复杂度所耗时间排序:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: