算法分析的方法

计算机科学又叫计算的科学 目标是使计算高效

算法正确性: 可执行 有穷性(Hailstone函数) 健壮性(非法输入时保证程序不崩溃)
最重要:使程序运行时间短,占用空间小

算法分析
正确性:分析算法的不变性和单调性(采用数学证明,对数器)
复杂度:包括时间空间,不妨先主要考虑时间 这样我们就需要引入一把尺子作为度量(T(n)一般n越大成本越大,n相同实例不同成本也不尽相同(Hailstone函数))

算法分析原则 :最坏 平均 分摊

对于特定问题不同算法不同编译运行环境成本不同,引入理想的图灵机模型和RAM模型
图灵机模型 :读写头,纸带( 当前状态内容,需要修改的内容 下一个状态 最后复位(作为算法一部分 复位是算法的规范要求 ))
RAM :无限个寄存器,有赋值操作 goto跳转 stop
上述模型把需要计算的时间转化成了运行次数!!!

如果模型是尺子,那么渐进分析 big-O 记号好比尺子的刻度,比起局部小的变化趋势我们更关注大规模长远的变化
T (n)( fn) 存在c大于0,n>>2 ,T (n)<c·fn 因为n比较大,我们处理T (n)表达式是可简单放大化简,忽略系数和较小项得到O(fn)
通过c变化,可使T (n)为实际运行的上界
欧米伽下界,
c它有两个系数 为两者中间

时间复杂度
O(1)
logn ( 因为乘一个数可以改变底数所以不写底数 ,n如果有指数可提成系数忽略)
线性 O(n)
指数的
np computer
多项式复杂度化简,包含多个子算法如何比较得到成本?

算法分析
主要考虑正确性(不变 单调)和复杂度(迭代——级数求和 ;递归——递归跟踪,递归方程 ;猜想+验证)
级数求和(从几何分布上快速求解?!!!):
算术级数:T(n)=1+2+…+n=O(n^2) 与末项平方同阶
幂方级数: 比幂次高出一阶
几何级数:T(n)=a^0+…+ a ^n (a>1) 与末项同阶
收敛级数:T(n)=1+…+1/n^2 收敛到一个常数
调和级数:T(n)=1+1/2+。。+1/n n确定的logn
对数级数:T(n)=log 1+…logn=log(n!) 确定的nlogn
起泡排序:
定性
不变性:k轮扫描,最大k个元素就位
单调性: k轮扫描,规模n到了n-k
推出正确性,n轮扫描后 确定了n个元素 规模缩小到0,终止给出正答
定量
运算次数:外循环x=n,内循环(;y*y<x;y++) 推出y<n^1/2 推出 O(n ^1/2)
封底估算:10^9操作=1sec=10 ^-5 day

递归的分析方法
减而治之:将原问题化成一个平凡问题和一个规模减小的子问题
分而治之:分成两个子问题,凡治众先治寡
处理:递归跟踪(几何直观),递归方程(代数抽象)

动态规划:如果递归可以make run make right 那么迭代可以make fast

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章