主要内容
分治法
算法 | 最差运行时间 | 最佳运行时间 | 平均运行时间 |
---|---|---|---|
选择排序 | |||
插入排序 | |||
合并排序 | |||
快速排序 |
分治法
合并排序和快速排序都采用基于递归的通用算法范例。 这种范式,分治法,将问题分解为类似于原始问题的子问题,递归地解决子问题,最后将解决方案组合到子问题中以解决原始问题。因为分而治之是递归地解决子问题,每个子问题必须小于原始问题,并且必须有子问题的基本情况。您应该将分治法视为包含三个部分:
- 拆分 将问题分成许多子问题,这些子问题是同一问题的较小实例。
- 治理 通过递归求解未解决的子问题。如果它们足够小,请将子问题解决为基本情况。
- 合并 将子问题的解决方案合并到原始问题的解决方案中。
您可以轻松地记住分治算法的步骤,如 拆分,治理,合并。以下是如何查看一个步骤,假设每个拆分步骤创建两个子问题(虽然也有一些分治法算法创建两个以上):
如果我们再扩展出两个递归步骤,就会看起来像这样:
因为分治法至少会产生两个子问题,分而治之的算法会产生多个递归调用。