数据结构_数据结构与算法02

1》算法设计的原则
设计算法时,通常应考虑达到以下目标:
1,正确性、2,可读性、3,健壮性、4,高效率与低存储量需求

1,正确性:规格说明
四个层次:
    a,程序中不含语法错误;
    b,程序对于几组输入数据能够得出满足要求的结果;
    c,程序对精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果;
    d,程序对于一切合法的输入数据都能得出满足要求的结果;
之所以软件要求维护:d条件是很难满足的。是个趋势

2,可读性:方便人的理解; 难度的程序隐藏错误较多,错误也难以调试。

3,健壮性:当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名其妙的输出结果。

4,高效率与低存储量需求:算法执行时间,存储空间大小


和算法执行时间相关的因素:
1,算法选用的策略
2,问题的规模
3,编写程序的语言
4,编译程序产生的机器代码的质量
5,计算机执行指令的速度


随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可以记作:
    T(n)=O(f(n));
称T(n)为算法的时间复杂度.

算法=控制结构+原操作(固有数据类型的操作)

算法的执行时间=原操作(i)的执行次数*原操作(i)的执行时间。

算法的执行时间与原操作执行次数之和成比例。

for(){n次
  for(){n次
    for(){n次
    
      }    
  }
}

时间复杂度:O(n*n*n)

我们在看看选择排序:
例子二:
    void  select_sort(int a[] ,int n){
    //将a中整数序列重新排列成从小至大有序的整数序列
    for(i=0;i<n-1;++i){
      j=i;
        for(k=i+1;k<n;++k){
            if(a[k]<a[j]){j=k;}
        }
        if(j != i){ a[j] <--> a[i] }
    }
    }//select_sort

基本操作:比较操作
语句频度作为算法的时间复杂度。
这个算法的效率与输入的数据无关。-----》即使输入的数据是有序的,这双重for循环的次数无关。


例子三:
    void bubble_sort(int a[] ,int n){
    //将a中整数序列重新排列成自小至大
    //有序的整数序列。
    for(i=n-1;change=TRUE;i>1&&change;--i){
        change=FALSE;
        for(j=0;j<i;++j){
            if(a[j]>a[j+1]){a[j] <--> a[j+1] ; change = TRUE; }
        }
    }
}//bubble_sort 气泡排序

开始气泡数据:5 7 4 2 8 3
5 5 4 2 2

7 4 2 4 3

4 2 5 3 4

2 7 3 5 5

8 3 7 7 7

3 8 8 8 8

最好情况 外循环只需执行一次,最坏的情况O(n*n)
平均的时间复杂度: O(n*n)

四、算法的存储空间需求
 算法的空间复杂度
    S(n)=O(g(n))

算法的存储量包括:
    1、输入数据所占空间;
    2、程序本身所占空间;//可以不考虑
    3、辅助变量所占空间;

选择排序与气泡排序中:
    输入数据所占的空间是相同的;那么只需考虑辅助变量所占空间。

学习要点:
    理解算法要素的确切含义。
    掌握计算语句频度和估算算法时间复杂度的方法。

n*n  与  50*log2(n)  运用高中学习的知识点:观察它们的二维 曲线
当n趋向于无穷大时 当然是50*log2(n)


























































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值