一个精心设计的算法尽可能地将问题划分为更小的子问题,从而最大限度地优化可用资源的使用。设计算法有不同的算法策略,算法策略包含下面列出的三种典型策略,还有些策略没有列入进来。
这里,我们介绍以下三种策略:
分治策略
动态规划策略
贪心算法策略
01
分治策略
分治策略就是找到一种方法,将规模较大的问题分解成可以相互独立解决的规模较小的子问题,然后将这些子问题产生的解合并起来,生成问题整体的解,这就是所谓的分治策略。
从数学上讲,如果问题(P)有n个输入且需要对数据集d进行处理,则用分治策略为问题设计求解方案会将问题分解成k个子问题,记为P1至Pk,每个子问题将处理数据集d的一个分区。通常,假设P1至Pk依次处理数据分区d1至dk。
我们看一个实例。
实例—适用于Apache Spark的分治策略
Apache Spark是一个用于解决复杂分布式问题的开源框架,它使用了分治策略来解决问题。为了处理问题,它将问题分为多个子问题,并且彼此独立地处理。我们将通过从一个列表中计数单词的简单的例子来说明这一点。
假设我们有以下单词列表:
我们要计算此列表中每个单词出现的频率。为此,我们将采用分治策略来有效解决此问题。
图4-3展示了分治策略的实现流程。
在图4-3中,我们将一个问题