- 7
- 0
- 约1.1万字
- 约 72页
- 2018-02-21 发布于浙江
- 举报
[工学]02算法分析与设计
分治法( Divide-and-conquer ) 引例:称硬币 引例:称硬币 常规的解决方法是先将这些硬币分成两枚一组,每一次只能称一组硬币。如果运气好的话,只要称一次就可以找到,运气坏的话,最多要称8次才能找出那枚硬币。 引例:称硬币 这种直接寻找的方法存在着相当大的投机性,只适用于硬币数量较少的情形。在硬币数量较多的情况下,就成为一件费时费力又需要运气的事了。 引例:称硬币 试着改变一下方法:如果我们将全部硬币分成两组,将原来设计的一次比较两枚硬币变以为一次比较两组硬币,我们会发现,通过一次比较之后,完全可以舍弃全部是真币的一组硬币,选取与原有问题一致的另一半进行下一步的比较。 这样,问题的规模就明显缩小,而且每一次比较的规模都成倍减少。 引例:称硬币 根据以上分析,我们可以得出以下的结论: 参与比较的硬币数量越多,使用该方法来实现就越快,而且投机性大大减少; 解决方法的关键在于能将大问题分割成若干个小问题; 小问题与原问题是完全类似的(与递归?)。 分治法 通常,我们将这种大化小的设计策略和思想称为“分治法”,即“分而治之”的意思。 分治法的特点: 大问题可以化为若干个小问题来解决 每个小问题的出现与大问题情况相同 所以,与递归方法相同,分治算法往往用递归方法来实现,其步骤如下: 分解:将问题分解为若干小问题,相互独立; 解决:求解小问题; 合并:将子问题的解合
原创力文档

文档评论(0)