数据结构0308
2018-03-08 23:47 SummerVan 阅读(154) 评论(1) 收藏 举报算法设计的要求:
1正确性(应该保证输入输出处理没有歧义,能够得到问题的正确答案)
(1)最基本没有语法错误
(2)对于合法的输入能得出正确的结果
*(3)对于异常,不合法的输入能得出满足规格的结果(程序不报错或异常 一般情况下以第三条作为标准)
(4)即使是专门挑选用来测试的数据都能有满足要求的结果输出
2可读性(便于阅读理解算法 算法越能简单易懂越好)
3健壮性(在错误或者异常的输入时 算法也能进行相对的操作保证程序不会异常或者卡死)
4时间效率和存储量(算法执行的时间长短和占用计算机内存大小)
算法效率的度量方法
1事后统计法(基本不予采用):通过设计好的程序和数据来对算法的执行时间进行比对,来判断效率 耗费时间和精力巨大 效率高的算法往往需要大量数据才能判断优劣
2事前分析估算法:在程序编制前,根据统计方法估算
估算的因素:
(1)算法采用的方法 思路(算法好坏的根本)
(2)编译产生的代码质量(依赖软件)
(3)问题的输入规模
(4)计算机执行的速度(依赖硬件)
总结:一个程序的运行时间,取决于算法本身的的好坏和问题输入的规模大小
例:算法1 算法2
let n =100 sum = 0 执行一次 let n =100 sum = 0; 一次
for(var i =1; i < n;++i) n + 1此 sum = (n+1)*n/2; 一次
{ return sum 一次
sum += i; n次 共3次
}
return sum 一次
共 2n +3次
随着问题输入规模 N的增大 算法优劣会越来越明显 在分析一个算法的运行时间时 要把基本操作的数量和输入规模关联起来 (基本操作的数量必须表示成输入规模相关的函数)
函数的渐进增长
定义:给定两个函数法f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是大于g(n),那么我们说f(n)的渐进增长快于g(n)
例:2n+3次操作和3n+1次操作 在n>2的时候前者优于后者
4n+8和2n²+1相比在n>3后后者计算量远远大于前者与最高项相乘得常数并不重要 最高次项指数大的函数随着n的增长也会变得增长特别快
在判断一个算法运行效率时,函数中的常数和其他次项可以忽略不计,应该关注最高阶项的阶数 例:2n²和3n+1和2n²+3n+1相比较
比较算法:随着n的增大(问题输入规模的增大)算法会越来越优于或差于另一个算法,以此来推断算法优劣 渐进增长越快 函数的操作次数也会增长的越快 所以增长最慢的最优
浙公网安备 33010602011771号