繁体   English   中英

建立相交图的线性时间复杂度算法

[英]Linear time complexity algorithm for building the intersection graph

在确定用于构建元素U的有限集合的子集的相交图的线性时间复杂度算法方面,我们将不胜感激。

例如,让U = {a,b,c,d,e,f,g,h}。 考虑U的集合S = {{{{a,b},{c,d},{a,e,h},{e,f,g}}。我们需要建立S的交点图G线性时间,如果可能的话。 S中的每个元素都是G的一个节点。当且仅当N1和N2具有至少一个共同的元素时,G中的两个节点N1和N2才在它们之间具有边。

例如,上面的S的交集图G将具有四个节点,即{a,b},{c,d},{a,e,h}和{e,f,g}。 G将具有G的2个边,即{a,b}-{a,e,h}和{a,e,h}-{e,f,g}。

是否存在一种线性算法,用于根据一组有限元素的子集构建交集图?

我可以在O(E * M)做到这一点,其中E是结果图中边的数量, M是具有公共元素的节点之间公共元素的平均数量。

当然。 首先,我将为S的元素赋予任意顺序,并以该顺序的索引来命名S的元素。 我还给U的元素赋予了任意顺序,并以该顺序的索引为其命名。

那是“我现在可以说我想要U中的第4个元素和S中的第2个元素”的一种奇特的表达方式,而这样做是O(1)的。

我创建以下数据结构:

table: 1...|U| -> list of numbers in range 1...|S|

现在,我去了所有的元素NS ,这样N我去了所有uN ,然后我看着节点列表中的table[u]并添加N和所有节点之间的曲线边缘table[u] 最后,将当前N添加到table[u]

伪代码:

for N1 in S:
  for u in N1:
    for N2 in table[u]:
      Create edge N1-N2
    add N1 to table[u]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM