是否有像地图这样的数据结构但会保留传递属性?

时间:2016-07-22 14:52:02

标签: data-structures

例如,如果我向地图添加两个条目:(2-> 1)和(1-> 3),则地图将包含:(2-> 3)和(1-> ; 3)

我不需要删除任何内容,在我添加了我关注的所有映射后,我只对迭代所有条目感兴趣。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找可达性索引,就像在图数据库中使用的那样。您的号码变为“节点”,地图中的条目就是“边缘”。'然后,传递性在图中变为可达性。

一个这样的索引是GRAIL,该文件还比较了一系列相关方法。

我不知道在实践中使用了什么。如果您的数据集很小,您可以采用强力方法:

我们假设您添加(1> 2),然后使用(2> x)查找所有条目并为每个条目添加条目(1> x)。不需要递归,因为(2-> x)应该已经是一个传递集。

答案 1 :(得分:1)

听起来很像union-find

  

动态连接。输入是一对整数,其中每个整数表示某种类型的对象,我们将解释对p q,意思是p连接到q。我们假设“与...相关”是一种等价关系:
  对称:如果p连接到q,​​则q连接到p。
  传递:如果p连接到q并且q连接到r,则p连接到r。
   reflexive :p连接到p。