构造Hasse图的算法

时间:2012-07-10 09:01:10

标签: algorithm poset

请帮助我改进以下算法的时间复杂度。

Hasse Diagram (如果您已经知道什么是Hasse Diagram,请跳过此部分,请直接转到下一部分):

考虑一个部分有序的集合(简称poset)(A,⊆),其中A是集合,而⊆是部分顺序。图中的每个节点都是poset的元素,如果两个元素x和y通过一条线连接,则x⊆y或y⊆x。元素和连接的位置是根据以下规则绘制的:

  1. 如果在poset中x xy,则对应于x的点出现在与y对应的点下方。

  2. 图中省略了poset的传递性,即,如果x⊆y和y⊆z,那么,通过部分阶数trans的传递性,x⊆z。在这种情况下,连接x-z被省略。

  3. 同样的反身性在图形上被省略。

  4. Posse的Hasse Diagram表示(S = {{1,2,3,5},{2,3},{5},{3},{1,3},{1,5}}, ⊆)如下(仅报告边缘)

    {1,2,3,5} - GT; {2,3}

    {1,2,3,5} - GT; {1,3}

    {1,2,3,5} - GT; {1,5}

    {2,3} - > {3}

    {1,3} - > {3}

    {1,5} - > {5}

    我最初的想法

    我能想到的唯一算法是O(N ^ 2)如下:

    读取第一个元素是S并将其作为Hasse Diagram中的第一个元素插入。当我们阅读下一个元素时,将它们插入到已经构造的图中的正确位置(假设到目前为止构造的图具有K个元素,那么在正确的位置插入新元素需要O(K)时间)。这样O(N ^ 2)就很明显了。

    但我正在考虑是否对poset S的元素进行排序可能会有所帮助,但是对S中完整元素的排序顺序无法构建,因为⊆可能不适用于所有元素对(例如,考虑{2,3}& {1,3})。

    欢迎任何改善最坏情况复杂性的想法!!

    感谢。

    P.S:这不是一个家庭作业问题!!

2 个答案:

答案 0 :(得分:0)

此问题通常称为transitive reduction。我相信你的算法不正确;虽然我没有足够的细节来告诉你究竟是怎样的,但是从传递闭合到传递缩减有一个有效的减少,并且前者的最着名的算法在时间O(n ω)中运行指数ω> 2。

答案 1 :(得分:0)

如果集合为{1,2,3,5},则子集将为({Æ},{1},{2},{3},{5},{1,2},{1 ,3],{1,5},{2,3} {2,5},{3,5},{1,2,3} {1,3,5},{1,2,5}, {2,3,5},{1,2,3,5})。 在取消传递关系后,我们将({{Æ}},{1},{2},[3},{4},{5},{1,2},{2,3} {1,5 },{2,5},{3,5},{1,2,3},{1,3,5},{1,2,5},{1,2,3,5})。 现在从空集和绘制线开始到1,2,3,5 ..然后从点1和2绘制线到1,2从2和3绘制线以加入2,3.然后从5线绘制线到5 1,2,3 ......然后从[1,2},{2,3}画线到{1,2,3}。然后从{3,5}和{1,5}到{1,3,5}画线。然后再次画一条线到下一组,并且atlast从前面的sbset到最后一个子集画线......

相关问题