【问题标题】:Given a list of paths through a graph, efficiently find the ones that use each edge给定通过图的路径列表,有效地找到使用每条边的路径
【发布时间】:2012-07-05 05:49:08
【问题描述】:

我有一个图表和这个图表中的路径列表。对于每条边e,我需要找到使用e的路径,然后根据这些路径做一些其他的工作。图的大小和对内存使用的限制使得我不能只遍历所有路径来构建一个集合数组,其中 set i 包含使用边缘 i 的路径。

可行的蛮力方法是:

for edge in edges:
    x = []
    for path in paths:
        if edge in path:
          x.append(path)
    f(x)

如何在保持内存效率的同时获得更好的时间效率?

【问题讨论】:

  • 你能把图表本身保存在内存中吗?
  • 是的,图形和路径适合内存。
  • 大概是多少?您能否给我们以下的近似上限: 1. 图中有多少个顶点? 2. 图中有多少条边? 3. 有多少条路径? 4. 一条路径通常有多少条边?
  • 40 000 个顶点,80 000 条边,300 000 条路径,路径通常有几百条边

标签: algorithm data-structures memory-efficient


【解决方案1】:

您的规格不清楚。你从哪里得到图表和路径?它们是否已经预先计算并存储在磁盘中?是需要在RAM中同时维护图中所有边的路径集,还是可以一一处理,然后释放内存?您是在创建集合时存储路径的副本还是可以索引到单个副本中?

如果您没有足够的 RAM,您可以使用一些在磁盘上运行的数据结构。 STXXL 库就是这样一个库。

【讨论】:

  • 图形和路径被预先计算并存储在内存中。每条边的路径集可以一次处理一个,释放内存。无需复制路径;我可以通过索引来引用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多