对于分治算法来说,其算法设计策略主要分为三个步骤:
1.我们要讲一个大问题分解成一些列规模大小基本相同的子问题
2.解决这些子问题(这里通常会用到一些递归法)
3.最后将其结果合并。
这种策略可用的主要基础来自其工作量的平衡性。典型情况下,它能帮我们讲一个复杂度平方级别的运算降低到线性级别。我们所介绍的归并排序,快速排序以及集合中的最近点怼问题都是这方面的重要例子。
在某些情况下(例如在某有序序列中搜索,或选取中间项时),我们还可以剪枝掉相关子问题以外的分支问题,以获取从根节点道相关叶节点之间的子问题路径,从而产生一些更为有效的算法。
另外这些子问题的结构也是可以用二分搜索树来明确表示的。该树上的每个节点都大于其左子树上的所有节点,而小于其右子树上的所有节点。这意味着:
1.二分搜索树可以通过根节点的遍历来实现。
2.另外如果我们直接向其插入一些随机值,搜索树本身在通常情况下是依然能维持平衡的,但也可能通过某些节点划分为或转换操作来对树结构进行再平衡,以确保在最糟糕的情况下仍只需对数级运行时间。