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

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

有些问题已经得到证明有复杂度下界:如排序算法为 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值