📅  最后修改于: 2020-12-13 15:15:08             🧑  作者: Mango
为并行算法选择合适的设计技术是最困难也是最重要的任务。大多数并行编程问题可能有多个解决方案。在本章中,我们将讨论并行算法的以下设计技术-
在分而治之的方法中,问题分为几个小子问题。然后,将子问题递归求解并组合起来,以解决原始问题。
分而治之的方法在每个级别涉及以下步骤-
划分-原始问题分为子问题。
征服-子问题递归解决。
合并-将子问题的解决方案合并在一起,以获得原始问题的解决方案。
分治法适用于以下算法-
在优化解决方案的贪婪算法中,随时会选择最佳解决方案。贪婪算法很容易应用于复杂问题。它决定哪一步将在下一步中提供最准确的解决方案。
该算法称为贪婪算法,因为当提供针对较小实例的最佳解决方案时,该算法不会将整个程序视为一个整体。一旦考虑了解决方案,贪婪算法就再也不会考虑相同的解决方案。
贪心算法通过最小的组成部分递归创建一组对象。递归是解决问题的过程,其中对特定问题的解决方案取决于该问题的较小实例的解决方案。
动态编程是一种优化技术,它将问题分解为较小的子问题,在解决了每个子问题之后,动态编程将所有解决方案组合在一起,从而获得最终解决方案。与分而治之的方法不同,动态编程将解决方案多次重用到子问题上。
Fibonacci系列的递归算法是动态编程的一个示例。
回溯是解决组合问题的一种优化技术。它适用于程序性问题和现实生活中的问题。八皇后问题,数独难题和迷宫穿越都是使用回溯算法的流行示例。
在回溯中,我们从可能的解决方案入手,该解决方案满足所有要求的条件。然后,我们进入下一个级别,如果该级别不能产生令人满意的解决方案,则返回上一级并从新选项开始。
分支定界算法是一种用于获得该问题的最佳解决方案的优化技术。它在解决方案的整个空间中寻找给定问题的最佳解决方案。要优化的函数的边界与最新最佳解决方案的值合并在一起。它允许算法完全找到解空间的一部分。
分支和边界搜索的目的是维持到达目标的成本最低的路径。找到解决方案后,就可以继续改进解决方案。分支和边界搜索是在深度限制搜索和深度优先搜索中实现的。
线性规划描述了一大类优化工作,其中优化标准和约束都是线性函数。这是一种获得最佳结果(例如最大利润,最短路径或最低成本)的技术。
在此编程中,我们具有一组变量,并且必须为它们分配绝对值,以满足一组线性方程式并最大化或最小化给定的线性目标函数。