算法设计与分析——基础知识

来源:互联网 发布:人工智能 电影免费 编辑:程序博客网 时间:2024/05/16 01:42

算法设计与分析包括:算法的描述,算法的设计技术,算法的正确性证明,算法的时空复杂度(最坏,平均,最好)

有些问题已经得到证明有复杂度下界:如排序算法为O(nlogn).

有些问题还未给出多项式算法,只会蛮力(brutal force)的指数算法,如哈密顿回路。它们属于NP完全问题,21世纪数学界最重要的问题之一。

简单的数学基础

阶乘函数 O(n!)=O(nlogn). 在数据结构与算法课上已经学过,由stirling公式 n!=2πn(ne)n可以推得

调和级数 nk=11k=lnn+O(1).这是微积分中熟知的结论。

附上书上精彩的积分证明. 作图y=lnx即可.矩形面积之和.

nk=11k>n+11dxx=ln(n+1).

nk=11k<1+n1dxx=1+lnn.

由夹逼原理,得证.

递推方程的求解方法

我认为这是本章的难点。简单的递推方程,形如:T(n)=2T(n1)+1,(Hanoi塔时间复杂度)是高中数列题,作变形T(n)+1=2(T(n1)+1),等比数列即可。但处理 T(n)=2T(n/2)+n1,(二分归并排序算法)高中数学好像不管用了,而这个方程属于形式 T(n)=aT(n/b)+f(n),是递归函数的常见形式,可以通过递归树或主定理解决。值得注意的是,不同于数学学科需要求出精确值,计算机科学只需要求出复杂度的上下界,故方法比较容易。

1. 递归树

这里写图片描述

e.g. T(n)=T(n/3)+T(2n/3)+n
作出如上的递归树。第一层为f(n)(常数项),第二层原本为T(n/3)&T(2n/3),保持该递推等式,然后考虑第二层分裂,于是第二层变为f(n/3)&f(2n/3),以此类推,会发现子树高度不对称,比例因子1/3,2/3使得右子树趋于0的速度最慢。故最坏情况下层数k满足(23)kn=1,即k=log3/2n. 注意带权结点之和为T(n),我们可以通过先每层求和,再求总和计算。发现每层之和均为n,层数为k,故T(n)=kn=O(nlogn).

2. 主定理 MasterTheorem

这里写图片描述

这里就不叙述证明了,值得提醒,主定理并非适用所有该形式的递推方程。

图1摘自http://blog.sina.com.cn/s/blog_6dd607f50100v72q.html

图2摘自http://baike.baidu.com/link?url=P0-6ufn72rY1EX8sfELR6j9qttVfncUGrLOuRq531dtJWrqY5FiwNlNB_kbwncMXeDIsZPDNfdYGMez8gJQ_yY_E6TRFd2Fda3RHCioch7GyM6qUawkNbHVQUAWyyIIx

1 0
原创粉丝点击