当前位置首页 > 百科> 正文

组合算法

2018-08-22 23:49:35 百科
组合算法

组合算法

组合算法(combinatorial algorithm)是组合学的一个研究分支,一些组合问题需用电子计算机解决,当研究如何进行计算时,就需要研究算法,组合算法是一类不同于代数计算的方法,为使这种算法能够有效地进行,对于每种组合算法,必须研究其组合结构和在此基础上讨论其时间的複杂性和空间的複杂性问题,即对算法所需的时间和存储单元与输入数据量的关係作出估计。

基本介绍

  • 中文名:组合算法
  • 外文名:combinatorial algorithm
  • 所属学科:数学(组合学)
  • 简介:组合学的一个研究分支

基本介绍

组合算法指计算对象是离散的、有限的数学结构的组合学问题的算法。组合算法的用途十分广泛。从方法学的角度,组合算法包括算法设计算法分析两个方面,关于算法设计,已经总结出若干带有普遍意义的方法和技术,包括动态规划、回溯法、分枝限界法、分治法、贪心法等。儘管如此,组合算法的设计仍然是一门艺术需要高度的技巧和灵感。算法分析的任务是分析算法的优劣,主要是讨论算法的时间複杂性和空间複杂性。它的理论基础是组合分析,包括计数和枚举。计算複杂性理论,特别是NP完全性理论,与组合算法是紧密相关的。NP完全性概念的提出,正是为了刻画包括旅行商问题、图着色问题、整数规划等在内的一大批组合问题的计算难度。计算複杂性理论研究算法在时间和空间限制下的能力以及问题的难度,使组合算法的研究有了更加清晰的框架,将组合算法的研究提高到一个新水平。

相关算法介绍

单纯形法

单纯形法是G.B.Dantzig在1947年提出的一种线性规划算法,他本人以及其他学者后来又提出多种形式的变形和改进。实践表明,单纯形法及其变形和改进是非常行之有效的,在市场上已经形成许多可以有效解央大型线性规划问题的软体包。线性规划研究线性目标函式在一组线性等式与线性不等式约束下的极值问题。这本来是连续问题,Dantzig发现线性规划问题的可行解集(即满足约束条件的点的全体)是一个超多面体。 如果它的最优解存在,那幺最优解一定可以在这个超多面体的某个顶点取到。由于超多面体的顶点只有有限个,从而使线性规划成为一个组合最佳化问题。单纯形法是按照一定的规划,从可行解集的一个顶点转移到另一个顶点,使得目标函式的值不断地得到改进,最后达到最优。儘管单纯形法一直使用得很好,但在最坏情况下它需要指数运行时间,从而使线性规划问题是否属于P类一度成为人们关心的问题。1979年前一位苏联数学家提出一个多项式时间的线性规划算法——椭球算法, 从而解决了这个问题。1984年印度数学家N.Karmarkar又提出一个新的更好的多项式时间算法——投影算法。

排序和检索

将给定的元素序列按照某种顺序关係重新排列成有序序列称作排序。例如将n个数组成的序列按照从小到大的顺序重新排列;将n个英语单词组成的序列按照字典顺序重新排列。在给定的集合中查找某个特定的元素称作检索。例如从给定的n个数中找到最大的数。排序和检索算法已经成为数据结构中不可缺少的部分,是计算机科学技术中最基本、使用最频繁的算法。正因为如此,它们也是研究得最细緻的一类组合算法(参见排序算法)。

图与网路最佳化算法

图与网路最佳化算法是组合算法中内容最丰富的部分。图论中的计算问题包括图的搜寻路径问题、连通性问题可平面性检验、着色问题、网路最佳化等。图论中的着名算法有求最小生成树的Kruskal算法、求最短路的Dijkstra算法和Floyd算法、求二部图最大匹配(指派问题)的匈牙利算法、求一般图最大匹配的Edmonds"花”算法、求网路最大流和最小割的标号法等。

贪心法与拟阵

贪心法是求解关于独立系统组合最佳化问题的一种简单算法,求最小生成树的Kruskal算法就是一种贪心法。但是,贪心法并不总能找到最优独立集,贪心法能求得最优独立集的充分必要条件是L为一个拟阵。事实上,求最大生成树是关于拟阵的组合最佳化问题,而二部图的所有匹配构成的独立系统U不是拟阵。

穷举搜寻

组合算法要解决的问题只有有限种可能,在没有更好办法时总可以用穷举搜寻的办法来解决,即逐个检查所有可能的情况。当情况较多时这样做是很费时的。实际上,并不需要机械地检查每一种情况,常常有可能提前判断出某些情况不可能取到最优解,从而可以提前捨弃这些情况。这样使“隐含地”检查了所有情况,既减少了搜寻量,又保证不漏掉最优解。参见回溯法。

分支限界法

分支限界法是一种用于求解组合最佳化问题的排除非解的搜寻方法。它的基本思想是:把问题分成若干个子问题,估计子问题的目标函式值的上界或下界。对于最大值问题,子问题的下界也是原问题的下界。 当子问题的上界小于原问题的下界时,不可能在这个子问题中取得原问题的最优解,捨去这个子问题。否则将这个子问题再划分成若干更小的子问题,重複上述过程,直到没有需要检查的子问题为止。
其他组合算法还有动态规划,快速传里叶变换等。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net