分治算法(divide and conquer)
来源:互联网 发布:mac找不到pppoe服务器 编辑:程序博客网 时间:2024/06/07 17:07
0) 引论
正如名字divide and conquer所言,分治算法分为两步,一步是divide,一步是conquer。
Divide:Smaller Problems are solved recursively except base cases.
Conquer:The solution to the original problem is then formed from the solutions to the sub-problem.
说白了,分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。
常见的利用分治算法思想的有快速排序以及合并排序等等。
1) 分治排序的运行时间问题
这里写下这个结论只是为了后面分析时间问题的方便。
2) 最近点问题
假设在坐标平面上分布了一系列的点,那么问题是求取这些点两两之间的最短距离。
最naive的做法当然是穷举法,计算所有的两两点间的距离,然后取最小值。穷举法对于小样本总是不错的。但是对于大样本来说,就不是那么合适了,这里我们用divide-and-conquer算法来解决这一问题。
首先对于所有的点,按照x坐标将其分为两部分,这就是divide,那么最短距离就是左边部分中的最短距离Dl,右边部分的最短距离Dr,以及左右部分之间的距离Dc。对于Dl以及Dr,可以递归的计算得到,这就是conquer。那么唯一的问题就是Dc。我们知道如果最短距离是Dc的话,那么Dc<=min(Dl,Dr)。因此我们只需要计算距离divide分割线S = min(Dl,Dr)的点就可以了。进一步我们可以看到对于每个在2S区域内的点,只需要计算y坐标距离这一点不大于S的点就可以,这样可以进一步简化运算量。
for(i=0;i<NumPointsInStrip;i++)for(j=i+1;j<NumPointsInStrip;j++)if(Pi and Pj coordinates differ by more than S)break;elseif(Dist(Pi,Pj)<S)S = Dist(Pi,Pj);
- 分治算法(divide and conquer)
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 分治算法(Divide-and-Conquer Algorithm)一
- 分治算法(Divide-and-Conquer Algorithm)二
- 分治算法Divide-and-Conquer概述
- 分治算法 Divide and Conquer Algorithm
- 分治 Divide and Conquer
- 分治法(divide-and-conquer)
- 分治策略Divide and Conquer
- 算法第二周: Divide and Conquer-分治算法
- 算法入门(1)——分治算法(Divide and Conquer)
- 基础算法1——分治(divide and conquer)【未完待续】
- 新鲜出炉 --分治排序 (Divide-and-conquer)
- 分治算法(Divide ans conquer ,D&C)
- 【Python排序搜索基本算法】之归并排序&分治法(Merge Sort and Divide & Conquer)
- 分治法(divide & conquer)应用举例
- Divide & Conquer 分治策略
- 大型网站架构图
- 我对SIFT的一点点了解
- JAVA学习.继承环境下的引用变量指向
- CAN总线的远程、错误帧的作用
- 判素数
- 分治算法(divide and conquer)
- 模版方法设计模式
- 同一个页面多次调用KindEditor上传插件
- Kettle--数据获取并转换
- Ambi实习(二)
- 在文件的特定字节处替换字节值
- gearman failover
- android 手机端获取服务器端的json数据
- Django ORM涉阶(一)