【问题标题】:Polynomial vs. pseudo-polynomial complexity for an algorithm with a graph as input以图为输入的算法的多项式与伪多项式复杂度
【发布时间】:2017-06-30 09:52:00
【问题描述】:

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

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

复杂度是多项式还是伪多项式?又取决于图是指定为邻接表还是邻接矩阵?

【问题讨论】:

    标签: algorithm graph big-o complexity-theory


    【解决方案1】:

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

    首先,伪多项式或基于多项式的定义是什么?

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

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

    其中ui 是起始顶点的编号,vii-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) 边(例如,如果图已连接)。

    【讨论】:

    • 谢谢!我确定我理解这种表示。 ui是开始顶点的个数,vi是结束顶点的个数怎么算?
    • 我应该更清楚地表述它:ui是开始顶点,vi是第i条边/弧的结束顶点
    猜你喜欢
    • 2014-02-10
    • 2014-01-25
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多