- 并行算法有用资源
- 并行算法 - 快速指南
- 并行算法 - 有用资源
- 并行算法 - 讨论
并行算法 - 设计技巧
为并行算法选择合适的設計技巧是最困难和最重要的任务。大多数并行编程问题可能有多个解决方案。本章将讨论以下并行算法的设计技巧:
- 分治法
- 贪心算法
- 动态规划
- 回溯法
- 分支限界法
- 线性规划
分治法
在分治法中,问题被分解成几个较小的子问题。然后递归地解决子问题,并将它们组合起来以获得原始问题的解决方案。
分治法在每一层包含以下步骤:
分解 - 将原始问题分解成子问题。
求解 - 递归地解决子问题。
合并 - 将子问题的解决方案组合起来以获得原始问题的解决方案。
分治法应用于以下算法:
- 二分查找
- 快速排序
- 归并排序
- 整数乘法
- 矩阵求逆
- 矩阵乘法
贪心算法
在贪心算法的优化方案中,在任何时刻都选择最佳方案。贪心算法很容易应用于复杂问题。它决定下一步哪个步骤将提供最准确的解决方案。
这种算法被称为贪心算法,因为当提供较小实例的最优解时,算法不会将整个程序作为一个整体考虑。一旦一个解决方案被考虑,贪心算法就不会再考虑相同的解决方案。
贪心算法递归地从最小的组成部分创建一组对象。递归是一种解决问题的程序,其中特定问题的解决方案取决于该问题的较小实例的解决方案。
动态规划
动态规划是一种优化技术,它将问题分解成较小的子问题,并在解决每个子问题后,动态规划将所有解决方案组合起来以获得最终解决方案。与分治法不同,动态规划多次重用子问题的解决方案。
斐波那契数列的递归算法是动态规划的一个例子。
回溯算法
回溯法是一种解决组合问题的优化技术。它应用于编程问题和现实生活问题。八皇后问题、数独游戏和迷宫寻路是使用回溯算法的常见例子。
在回溯法中,我们从一个可能的解开始,该解满足所有要求的条件。然后我们移到下一层,如果该层没有产生令人满意的解,我们返回上一层并从一个新的选项开始。
分支限界法
分支限界算法是一种优化技术,用于获得问题的最优解。它在整个解空间中寻找给定问题的最佳解。待优化的函数中的界限与最新最佳解的值合并。它允许算法完全找到解空间的部分。
分支限界搜索的目的是维护到目标的最低成本路径。一旦找到解决方案,它就可以不断改进解决方案。分支限界搜索在深度受限搜索和深度优先搜索中实现。
线性规划
线性规划描述了一大类优化作业,其中优化准则和约束都是线性函数。这是一种获得最佳结果的技术,例如最大利润、最短路径或最低成本。
在这个编程中,我们有一组变量,我们必须为它们分配绝对值以满足一组线性方程,并最大化或最小化给定的线性目标函数。