具有图形作为输入的算法的多项式与伪多项式复杂度

时间:2017-06-30 09:52:01

标签: algorithm graph big-o complexity-theory

当使用图形作为输入分析算法的复杂性时,我很难区分多项式运行时和伪多项式运行时。

图表有| A |弧和| V |顶点。算法的复杂度为O(| A | * K ^ 2),其中K是一些常数。

是复杂多项式还是伪多项式?它是否取决于图形是否被指定为邻接列表或邻接矩阵?

1 个答案:

答案 0 :(得分:0)

简答:对于邻接列表,算法肯定是多项式(因而是伪多项式),对于邻接矩阵,它取决于图的“密集”程度。

首先,基于?

的伪多项式或多项式的定义是什么?

为了制定算法,我们需要一些方法以机器可读的形式对输入进行编码。在最理论的版本中,这意味着图灵机的输入。如果我们有一个包含n个顶点和m边的图,我们可以编写以下表示(类似于边列表):

n#u1,v1#u2,v2#...#um,vm

其中ui是起始顶点的编号,vii - 边的结束顶点的编号。

如果我们使用数字的二进制表示(即数字k占用O(log k)空间),那么我们的整个图形可以表示为长度为L = O的输入字(log n * m)

如果我们使用一元表示,我们的输入字的长度为L = O(n * m)。

多项式(或伪多项式)意味着如果我们的输入数字表示为二进制(或一元)数字,则算法在某些固定k时最多需要O(L ^ k)时间。

回到你的问题

你的算法有运行时O(m)(常量可以用Big-O表示法省略),对于邻接列表(使用O(log n * m)空间)肯定是多项式(k = 1)

对于邻接矩阵(使用O(n²)空间),这仅适用于我们在边数上有一些渐近下界,但是如果我们至少有Ω(n)个边(例如,如果图连接)。