问题:有16枚硬币,其中有一枚是伪造的。并且伪造的硬币的重量和真硬币重量不同,你能不能用最少的比较次数找出这枚伪造的硬币?
提供一台可以用来比较两组硬币重量的仪器。
解决问题:
方法1:两两比较(最坏情况比较8次)
方法2:硬币分成两组,一次比较两组。一次比较后,可以舍弃完全是真币的那一组,只对另一组进行下一步比较(4次)
方法3:硬币分成三组,5,5,6。(3次)
分治法(“分而治之”)
在设计查找、排序算法时很有效
最常用的分治法:二分法、归并法、快速排序等。
关键:将大问题分割成若干小问题,小问题与原问题是完全类似的。
分治法的基本思想:
- 大问题分解为子问题,这些子问题相互独立且与原问题相同。
- 分别求解子问题。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。
- 合并解,自底向上逐步求出原来问题的解。
分治法的设计思想:将严格难以直接解决的大问题,分割成一些规模比较小的相同问题,以便各个击破,分而治之。
分治法的适用条件
- 问题的规模缩小到一定程度就可以容易地解决。
- 问题具有最优子结构性质(当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质)
- 分解出的子问题的解可以合并为该问题的解。
- 问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。