【问题标题】:Efficient algorithm to check queue consistency by pairwise relationship通过成对关系检查队列一致性的高效算法
【发布时间】:2021-03-19 05:07:23
【问题描述】:

我们有 n 个项目进入和离开队列,它们可以随时进入和离开。我们得到的信息是,对于每一对 (a,b),我们知道 1) a 在 b 进入之前离开队列,反之亦然; 2) 在某个时刻,a 和 b 同时在队列中。或 3) 根本没有任何信息。假设给定所有(n 选择 2)对的成对信息列表,找到一个 O(n^2) 算法来确定信息中是否存在任何不一致。

例如a在b进入之前离开(为简单起见,写成a>b),b>c,c=a是不一致的,因为没有a,b,c进出的可能时间线使所有三个语句都为真的队列。我想过把它变成一个图横向问题,每个项目作为一个顶点,成对关系作为一条边,如果 a>b 或 b 或 b、b>c、c=a不一致,而a=b、b=c、c>a一致。

任何意见和想法将不胜感激!

【问题讨论】:

    标签: algorithm graph queue consistency pairwise


    【解决方案1】:

    将此视为一个有向图,如果ab 进入之前离开,则从ab 有一条弧线,反之亦然。

    对于同时在队列中的节点(x,y),注意这意味着对于每个顶点w,一致图没有x w > y。通过将这些节点合并为一个节点来反映这一点,保留所有弧。

    然后,运行topological sort 来查找节点的拓扑排序。

    当且仅当没有拓扑排序时,才会出现不一致。

    运行时间:拓扑排序为 O(nodes + edges),即 O(n^2)。

    【讨论】:

    • 非常聪明的想法,提醒我将强连接组件收缩为单个节点。非常感谢!
    • 谢谢!假设我们知道 (x,y) 同时在队列中。通过 1. 将所有以 y 作为端点的弧线中的 y 替换为 x 来合并它们,然后 2. 删除 y。在此步骤中,如果 a->x 是弧,但 x->y 也是弧,则可以及早发现不一致。
    猜你喜欢
    • 2011-09-17
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多