【问题标题】:Searching a graph larger than 4GB on a 32bit machine在 32 位机器上搜索大于 4GB 的图
【发布时间】:2012-09-13 20:14:10
【问题描述】:

我有一个略大于 4GB 的图表,比我在 32 位机器上的处理能力还要大。

我想编写一个程序来计算连接(直接和间接)到图中特定节点的顶点数。

如果我不能一次将整个图表加载到内存/交换中,我该怎么办?

编辑:这是一个有向图,我实际上想计算我可以(在正确方向上)到特定顶点的顶点数。

【问题讨论】:

  • 你想用什么编程语言和操作系统来做这个?
  • @EricLeschinski PHP 在 Linux 上。

标签: algorithm data-structures graph 32-bit large-data


【解决方案1】:

这实际上取决于您如何存储图表。在许多情况下,您不必加载整个图表。例如,如果您的图形存储为邻接矩阵,您只需要提取一列/行,并且有很多方法可以有效地执行此操作,具体取决于矩阵的存储方式(例如固定长度的单元格或 HDF 文件) .如果您的图表存储为带有指向其他节点的指针的节点列表,您有时可以只提取该节点的数据。 底线,这取决于你如何存储你的图表,但它在许多表示下都是可行的。关键是必须将表示形式保存到磁盘,而不必一次全部加载。

【讨论】:

  • 我没有使用支持指针的语言,我使用哈希表来表示相邻节点。这是否意味着唯一真正的解决方案是使用 C/C++?
  • @futlib,您可以使用多种语言进行操作。每个节点有一个哈希表吗?
  • 是的。我不确定如何将它存储到磁盘并在 PHP 需要时再次加载它,我想我需要弄清楚。
  • 一种选择是将其写入文本文件,然后仅加载您需要的内容。另一种选择是使用序列化(php.net/manual/en/function.serialize.php),它可以让您轻松地将变量保存到磁盘。关键是表示必须以这样的方式保存到磁盘,即不必一次全部加载,无论是在单独的文件中还是在只能加载其中一部分的文件中。
猜你喜欢
  • 2017-02-03
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2013-03-25
  • 2018-04-18
  • 2014-09-28
相关资源
最近更新 更多