【发布时间】:2017-06-30 09:52:00
【问题描述】:
在以图形作为输入分析算法的复杂性时,我很难区分多项式运行时和伪多项式运行时。
该图有 |A|弧线和 |V|顶点。该算法的复杂度为 O(|A|*K^2),其中 K 是某个常数。
复杂度是多项式还是伪多项式?又取决于图是指定为邻接表还是邻接矩阵?
【问题讨论】:
标签: algorithm graph big-o complexity-theory
在以图形作为输入分析算法的复杂性时,我很难区分多项式运行时和伪多项式运行时。
该图有 |A|弧线和 |V|顶点。该算法的复杂度为 O(|A|*K^2),其中 K 是某个常数。
复杂度是多项式还是伪多项式?又取决于图是指定为邻接表还是邻接矩阵?
【问题讨论】:
标签: algorithm graph big-o complexity-theory
简答:对于邻接列表,该算法绝对是多项式(因此是伪多项式),对于邻接矩阵,它取决于图形的“密集”程度。
要制定算法,我们需要某种方法将输入编码为机器可读的形式。在最理论的版本中,这意味着作为图灵机的输入。如果我们有一个带有n 顶点和m 边的图,我们可以编写以下表示(类似于边列表):
n#u1,v1#u2,v2#...#um,vm
其中ui 是起始顶点的编号,vi 是i-th 边的结束顶点的编号。
如果我们使用数字的二进制表示(即数字k 占用 O(log k) 空间),那么我们的整个图可以表示为长度为 L = O(log n * m )
如果我们使用一元表示,我们的输入词的长度为 L = O(n * m)。
多项式(或伪多项式)意味着如果我们的输入数字表示为二进制(或一元)数字,您的算法最多需要 O(L^k) 时间来处理某个固定的 k。
您的算法的运行时间为 O(m)(常量可以在 Big-O 表示法中省略),对于邻接列表(使用 O(log n * m) 空间),这绝对是多项式(k = 1) .
对于邻接矩阵(使用 O(n²) 空间),这仅适用于我们在边数上有一些渐近下界的情况下,但如果我们至少有 Ω(n) 边(例如,如果图已连接)。
【讨论】: