【问题标题】:suitable data structure for set (graph) partition适合集合(图)分区的数据结构
【发布时间】:2011-01-17 13:28:51
【问题描述】:

我需要存储图形分区的数据分组节点,例如:

[node1, node2] [node3] [node4, node5, node6]

我的第一个想法是只有一个简单的向量或整数数组,其中数组中的位置表示 node_id,它的值是某种 group_id

问题在于许多分区算法依赖于对组内的节点对进行操作。使用这种方法,我想我会浪费大量的计算来搜索向量来找出哪些节点属于同一个组。

我也可以存储为 stl 集合,这似乎更接近分区的数学定义,但我得到的印象是不建议或不需要嵌套集合,我需要修改我自己的内部集合我不确定是否可能。

有什么建议吗?

【问题讨论】:

  • boost图形库可能会提到

标签: c++ data-structures stl set data-partitioning


【解决方案1】:

根据您想要对这些集合做什么,您可以尝试disjoint set data structure。在这个结构中,每个元素都有一个方法find,它返回它所属集合的“代表”。

Boost 中提供了 C++ 实现。

【讨论】:

    【解决方案2】:

    我想到了两种很好的数据结构。

    第一个数据结构(也是前面提到的)是不相交集森林,它提供了“合并这两个集合”和“x 在哪个集合中?”的非常有效的实现。但是,它不支持将组彼此分开的操作。

    我推荐的另一种结构是链接/剪切树。这种结构使您可以构建可以连接到树中的图形的分区。与不相交集森林不同,描述分区的树可以切割成更小的树,允许您将分区分成更小的组。这种结构比 union/find 结构效率低一点,但它仍然支持摊销 O(lg n) 中的所有操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2011-01-13
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多