📜  DAA分而治之简介

📅  最后修改于: 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中存在的堆栈,则甚至可能使系统崩溃。