算法设计与分析——分治法
来源:互联网 发布:java int转date 编辑:程序博客网 时间:2024/06/05 21:05
算法思想:
“分而治之”。把一个复杂的问题分成两个或更多的相同问题,直到最后各个子问题可以简单的直接求解,对各个子问题的解进行合并即得原问题的解。
工作方案:
1.将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模。
2.对这些较小的实例求解。(一般使用递归的方法)。
3.如果有必要,合并这些较小规模的解,以得到原问题的解。
分治法孕育了计算机科学中许多最重要和最有效的算法。对于并行计算是非常理想的,因为各个子问题都可以由不同的CPU同时计算。
使用分治法的问题的特征:
1.该问题的规模缩小到一定的程度就可以容易地解决;
2.该问题具有最优子结构性质
3.利用子问题的解,合并为原问题的解;
4.该问题所分解出的各个子问题是相互独立,并且与原问题性质相同,即子问题之间不包含公共的子问题。
分治法的基本步骤:分解和治理
divide-and-conquer(P) { if ( | P | <= n0) Adhoc(P); //解决小规模的问题 divide P into smaller subinstancesP1,P2,...,Pk;//分解问题 for (i=1,i<=k,i++) yi=divide-and-conquer(Pi); //递归的解各子问题 return merge(y1,...,yk); //将各子问题的解合并为原问题的解 }
人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。即将一个问题分成大小相等的k个子问题的处理方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。
复杂性分析:
一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分解阀值n0=1,且Adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有:
阅读全文
0 0
- 算法设计与分析——分治
- 算法设计与分析——第四篇,分治法
- 算法设计与分析——分治法
- 算法设计与分析笔记——递归与分治
- 算法设计与分析之分治法——棋盘覆盖
- 算法设计与分析复习-分治法算法描述
- 算法分析与设计之五大常用算法 (I) —— 分治算法
- 算法设计与分析学习-分治法1
- 算法设计与分析学习-分治法2
- 算法与设计分析作业(分治)
- 算法设计与分析(二)分治
- 算法设计与分析之分治思想
- 计算机算法设计与分析——递归与分治策略(一)
- 计算机算法设计与分析——递归与分治策略(二)
- 集合最大元问题(递归与分治)——算法设计与分析
- 算法设计与分析复习(二):算法设计策略-分治法
- 算法设计与分析之递归与分治策略
- 递归与分治策略(一)---算法设计与分析
- Scout YYF I POJ
- 数据结构实验之二叉树三:统计叶子数
- wepy学习笔记
- 1134 最长递增子序列
- 这
- 算法设计与分析——分治法
- php 7之PhpStorm + Nginx + Xdebug运行调试
- 异常处理 1
- 【莱斯大学 Python交互编程入门】 作业Week5 Memory
- 做seo别钻牛角尖
- 漫漫刷题路(1)
- 触摸屏Sensor叠构实例学习记录(一)
- 逻辑回归应用之Kaggle泰坦尼克之灾
- 反思