📅  最后修改于: 2020-12-10 03:52:47             🧑  作者: Mango
分而治之简介
分而治之是一种算法模式。在算法方法中,设计是对巨大输入进行争议,将输入分解为小部分,在每个小部分上确定问题,然后将分段解决方案合并为全局解决方案。解决问题的这种机制称为分而治之策略。
分而治之算法由使用以下三个步骤的争议组成。
- 除以原问题为一组子问题。
- 征服:递归地分别解决每个子问题。
- 合并:将子问题的解决方案放在一起,以得到整个问题的解决方案。
通常,我们可以在三步过程中遵循分而治之的方法。
示例:具体的计算机算法基于分而治之方法:
- 最大和最小问题
- 二元搜寻
- 排序(合并排序,快速排序)
- 河内塔。
分而治之策略的基本原理:
分而治之策略有两个基本原则:
1.关系公式:这是我们从给定技术中生成的公式。在生成公式之后,我们将应用D&C策略,即,我们递归解决问题并解决破碎的子问题。
2.停止条件:当我们使用分而治之策略解决问题时,我们需要知道需要花多少时间应用分而治之。因此,需要停止D&C递归步骤的条件称为“停止条件”。
分而治之方法的应用:
以下算法基于分而治之技术的概念:
- 二进制搜索:二进制搜索算法是一种搜索算法,也称为半间隔搜索或对数搜索。它通过将目标值与排序数组中存在的中间元素进行比较来工作。比较之后,如果值不同,则最终将排除不包含目标的那一半,然后继续搜索另一半。我们将再次考虑中间元素,并将其与目标值进行比较。该过程一直重复直到达到目标值。如果在结束搜索后发现另一半为空,则可以得出结论,目标不存在于数组中。
- 快速排序:这是最有效的排序算法,也称为分区交换排序。首先从数组中选择一个枢轴值,然后将其余的数组元素划分为两个子数组。通过将每个元素与枢轴值进行比较来进行分区。它比较元素持有的值大于还是小于枢轴,然后递归对数组进行排序。
- 合并排序:这是一种排序算法,通过进行比较对数组进行排序。首先将数组划分为子数组,然后对每个数组进行递归排序。排序完成后,它将它们合并回去。
- 最接近的点对:这是计算几何的问题。该算法强调在给定n个点的情况下找出度量空间中最接近的一对点,从而使这对点之间的距离最小。
- Strassen算法:这是一种用于矩阵乘法的算法,以Volker Strassen的名字命名。在大型矩阵上工作时,它被证明比传统算法快得多。
- Cooley-Tukey快速傅立叶变换(FFT)算法:快速傅立叶变换算法以JW Cooley和John Turkey命名。它遵循分而治之的方法,并施加了O(nlogn)的复杂性。
- Karatsuba快速乘法算法:它是传统时间中最快的乘法算法之一,由Anatoly Karatsuba于1960年末发明并于1962年发布。它通过将两个n位数字减为最多一个而以这种方式相乘-数字。
分而治之的优势
- 分而治之往往可以成功解决最大的问题之一,例如数学难题河内塔。解决您没有基本概念的复杂问题是具有挑战性的,但是借助分而治之的方法,它减少了将主要问题分成两半然后递归解决的工作。该算法比其他算法快得多。
- 它有效地使用了高速缓存,而又不占用太多空间,因为它解决了高速缓存中的简单子问题,而不是访问速度较慢的主内存。
- 它比同类的蛮力技术要熟练得多。
- 由于这些算法禁止并行处理,因此它不涉及任何修改,并由包含并行处理的系统处理。
分而治之的弊端
- 由于其大多数算法都是通过合并递归来设计的,因此需要进行高级内存管理。
- 显式堆栈可能会过度使用该空间。
- 如果执行的递归严格大于CPU中存在的堆栈,则甚至可能使系统崩溃。