【问题标题】:Vertices that are K away距离 K 的顶点
【发布时间】:2012-10-31 11:28:54
【问题描述】:

给定一个图 G(V,E) 和一个顶点 v,我如何找到可以通过简单路径到达的所有顶点(路径上没有顶点重复)的长度正好 k

邻接矩阵的幂给出了顶点之间的路径数,但它包括非简单路径。

这个问题可以在多项式时间内解决吗?如果没有,是否有任何已知的近似算法。任何指向文学的指针都会很棒。

【问题讨论】:

  • 这是一个有趣的问题,我认为属于cstheory.stackexchange.com
  • 是否可以在不同的堆栈站点之间移动问题?我可能没有足够的声誉来做这件事。
  • 有人可以做到,但据我所知,我也没有足够的声誉来做到这一点。 :-/
  • 假设您有一个由 v、A 和 B 组成的三角形。当 k=2 时,A 和 B 都是您要找的吗?
  • @JameySharp,不,它没有,请在提出迁移建议之前阅读网站的常见问题解答。这个问题不应该迁移到 cstheory,而应该迁移到Computer Science

标签: algorithm graph-algorithm


【解决方案1】:

下面介绍的算法将找到与起始节点v 的最小距离等于k 的节点列表。 EG:给定一个三角形图 v、A 和 B 如果:

  • k 为 0,则结​​果为 v
  • k 为 1,则结果包含 AB
  • k 为 2 或更多,则结果为 empty

伪代码:

FindNodesWithShortestPath_K(G, v, k):
    create empty list R
    create empty queue Q

    mark v as visited
    set v.distance to 0
    add v to Q

    while Q is not empty:
        t <- dequeue node from Q
        if t.distance == k:
            add t to R
        else if t.distance > k:
            break
        else                
            for all neighbors u of t:
                if u is not marked as visited:
                    mark u as visited
                    u.distance = t.distance + 1
                    enqueue u onto Q

    return result

注意:

  • 检查节点是否标记为已访问可确保路径简单
  • 节点的初始距离不相关
  • 如果 t.distance == k,则 t 属于 R 并且 t 邻居(不在 Q 中)不属于
  • 如果 t.distance > k,那么即使 Q 不为空,算法也会停止。给定算法实现,Q中节点的距离不递减
  • R 和 Q 上的操作可以在 O(1) 中运行,具体取决于实现。该算法的最坏情况是 O(|E| + |V|)

【讨论】:

  • 这是一个从顶点 v 开始的 bfs。
  • 差不多,终止条件当然不同。这能解决你的问题吗?我是否正确解释了您的问题?
  • 不,它没有。我想要通过简单路径在“精确”k 步中可到达的顶点。
【解决方案2】:

我只回答第一个问题:“它可以在多项式时间内求解吗?”。

假设它在多项式时间内是可解的。然后为k=|V|-1 解决它并选择任何结果顶点。删除此顶点并为k=|V|-2 解决此问题。生成的一组顶点应包含至少一个连接到最后一个删除顶点的顶点。删除此顶点并继续处理k=|V|-i,直到保留单个起始顶点。您刚刚为使用多项式时间算法的原始图找到了 Hamiltonian path

由于哈密顿路径问题是NP完全的,OP中的问题也不太可能在多项式时间内解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2020-06-14
    • 2013-04-22
    相关资源
    最近更新 更多