<算法导论>第二章 2.3设计算法
来源:互联网 发布:webcrack软件下载 编辑:程序博客网 时间:2024/06/04 18:41
2.3.1 分治法
分治法由两部分构成:分治+递归
最开始接触递归,是在用递归的方法求解斐波那契数列那会。
斐波那契数很简单,定义如下:
用递归的方法求斐波那契数列和int Fibonacci(int n){ if(n<=1) return n; else return Fibonacci(n-1)+Fibonacci(n-2);}递归特点是不断地调用自身,直到满足结束条件,最后逐层返回结果。
分治法的思想和递归有些相像,它把一个大规模的问题分解成更小的但是算法逻辑相似的问题,不断往下递归,最后由得到的最小问题的解逐层往上构成所求问题的解。
体现分治法的一个典型例子就是归并排序
MERGE-SORT(A,p,r)if p<r q=(r-p)/2 MERGE-SORT(A,p,q) MERGE-SORT(A,q+1,r) MERGE(A,p,q,r)
MERGE(A,p,q,r)n1=q-p+1n2=r-q+1for i=1 to n1 L[i]=A[p+i-1]for j=1 to n2 R[j]=A[q+j]L[n1+1]=65535R[n2+1]=65535i=1j=1for k=p to r if L[i]<=R[j] A[k]=L[i] i=i+1 else A[k]=R[j] j=j+1
贴一张归并排序的简单图解
2.2.3 分析分治算法
注:cn为树根(在递归的顶层引起的代价)
根的两个子树代表较小的规模(T(n/2))
T(n)=2T(n/2)+cn=.....=c*n*( lg n+1 )
=θ(n*lg n)
2.3-2:重写MERGE伪代码(不使用无穷大哨兵)
MERGE(A,p,q,r)n1=q-p+1n2=r-q+1for i=1 to n1 L[i]=A[p+i-1]for j=1 to n2 R[j]=A[q+j]L[n1+1]=65535R[n2+1]=65535i=1j=1for k=p to r if i>n1 or j>n2 break if L[i]<=R[j] A[k]=L[i] i=i+1 else A[k]=R[j] j=j+1 if i>n1 for j to n2 A[P+n1+j-1]=R[j] else for i to n1 A[P+n2+i-1]=L[i]
2.3-3 n=2^1 成立
假设当n=2^p,解T(n)=n*lg n成立
当n'=2^(p+1)时,T(n')=.....=T(n+1)
由数学归纳法,证明完毕。
2.3-4
推导可得: T(n)=θ(n^2)
2.3-5
binarySearch(A,p,q)if p>q return NILif v>A[(p+q)/2] binarySearch(A,(p+q)/2,q)else if v<A[(p+q)/2] binarySearch(A,p,(p+q)/2)else return (p+q)/2时间成本分析:每迭代一次,规模减半。T(n)=T(n/2)+θ(1)求解得T(n)=lg n
0 0
- <算法导论>第二章 2.3设计算法
- 算法导论第二章
- 算法导论第二章
- 算法导论 第二章
- 算法导论 第二章
- 算法导论-第二章
- 算法导论第二章
- 算法导论 第二章InsertSort
- 算法导论 第二章MergeSort
- 《算法导论》第二章 入门
- 算法导论第二章心得
- 算法导论:第二章总结
- 算法导论 第二章作业
- 算法导论第二章笔记
- <笔记><算法导论><第二章>
- 算法导论读书笔记 第二章 算法入门
- 算法导论第二章:算法入门
- [算法导论]第二章《算法基础》
- android——背景颜色渐变(梯度变化)
- Hadoop:MapReduce详解
- eclipse安装svn插件,在输入url后,一直卡在in progress界面不懂。
- Eclipse 常用快捷键 (动画讲解)(转载)
- android——fragment详解
- <算法导论>第二章 2.3设计算法
- android——生成或者下载的图片在相册中找不到
- Android:弄明白Touch事件分发机制
- 为什么自己在百度或者淘宝上搜索的东西会变成广告页面
- android——拍照,相册图片剪切其实就这么简单
- 百度搜索附近加盟店等基于LBS云搜索功能的实现
- android——fragment长时间home或者锁屏java.lang.IllegalArgumentException:No view found for id for....
- BFC(Block Formatting contexts): 块级格式上下文
- 将博客搬至CSDN