📜  并行算法-设计技术

📅  最后修改于: 2020-12-13 15:15:08             🧑  作者: Mango


为并行算法选择合适的设计技术是最困难也是最重要的任务。大多数并行编程问题可能有多个解决方案。在本章中,我们将讨论并行算法的以下设计技术-

  • 分而治之
  • 贪婪法
  • 动态编程
  • 回溯
  • 分界
  • 线性规划

分治法

在分而治之的方法中,问题分为几个小子问题。然后,将子问题递归求解并组合起来,以解决原始问题。

分而治之的方法在每个级别涉及以下步骤-

  • 划分-原始问题分为子问题。

  • 征服-子问题递归解决。

  • 合并-将子问题的解决方案合并在一起,以获得原始问题的解决方案。

分治法适用于以下算法-

  • 二进制搜索
  • 快速分类
  • 合并排序
  • 整数乘法
  • 矩阵求逆
  • 矩阵乘法

贪婪法

在优化解决方案的贪婪算法中,随时会选择最佳解决方案。贪婪算法很容易应用于复杂问题。它决定哪一步将在下一步中提供最准确的解决方案。

该算法称为贪婪算法,因为当提供针对较小实例的最佳解决方案时,该算法不会将整个程序视为一个整体。一旦考虑了解决方案,贪婪算法就再也不会考虑相同的解决方案。

贪心算法通过最小的组成部分递归创建一组对象。递归是解决问题的过程,其中对特定问题的解决方案取决于该问题的较小实例的解决方案。

动态编程

动态编程是一种优化技术,它将问题分解为较小的子问题,在解决了每个子问题之后,动态编程将所有解决方案组合在一起,从而获得最终解决方案。与分而治之的方法不同,动态编程将解决方案多次重用到子问题上。

Fibonacci系列的递归算法是动态编程的一个示例。

回溯算法

回溯是解决组合问题的一种优化技术。它适用于程序性问题和现实生活中的问题。八皇后问题,数独难题和迷宫穿越都是使用回溯算法的流行示例。

在回溯中,我们从可能的解决方案入手,该解决方案满足所有要求的条件。然后,我们进入下一个级别,如果该级别不能产生令人满意的解决方案,则返回上一级并从新选项开始。

分支定界

分支定界算法是一种用于获得该问题的最佳解决方案的优化技术。它在解决方案的整个空间中寻找给定问题的最佳解决方案。要优化的函数的边界与最新最佳解决方案的值合并在一起。它允许算法完全找到解空间的一部分。

分支和边界搜索的目的是维持到达目标的成本最低的路径。找到解决方案后,就可以继续改进解决方案。分支和边界搜索是在深度限制搜索和深度优先搜索中实现的。

线性规划

线性规划描述了一大类优化工作,其中优化标准和约束都是线性函数。这是一种获得最佳结果(例如最大利润,最短路径或最低成本)的技术。

在此编程中,我们具有一组变量,并且必须为它们分配绝对值,以满足一组线性方程式并最大化或最小化给定的线性目标函数。