分而治之是算法设计中一个非常重要的思想,经典的汉诺塔问题就是利用分治策略进行求解的代表性问题。
问题的引入
下面将从一个具体问题出发,讨论分治策略的使用,并给出在Python中的实现。假设我们有一个字符串(或者数组,或者其它线性表),可以对其做任意划分,从而得到若干个连续的子序列,例如有数组
[0, 1, 2, 3, 4, 5]
若将其分成2段,那么[[0, 1],[ 2, 3, 4, 5]]或者[[0],[1, 2, 3, 4, 5]]都是可能的答案;若将其分成3段,那么[[0, 1],[2], [3, 4, 5]]或者[[0],[1], [2, 3, 4, 5]]都是可能的答案。现在的问题是,假设我们给出一个线性表,能否枚举出所有可能的划分呢?
问题乍一看难免有些无从下手,可能最大的障碍就是不同的划分情况实在太多,一时间又很难找出其中的规律。此时,分治策略就可以大显身手了。不妨设想一下,给定一个线性表 A A