【发布时间】:2017-03-26 05:45:48
【问题描述】:
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度数是 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个向量,如下所示
// V could be 100 million
vector<int> *AdjList = new vector<int>[V];
vector<int> *Weight = new vector<int>[V];
使用vector 的vector 似乎并不节省空间。它需要超过 400GB 的存储空间。有没有更好的空间效率方法来将这个大图存储在内存中?对使用任何 c++ 库有什么建议吗?
【问题讨论】:
-
对于稀疏结构,地图可能会更好,但从这个问题中不清楚您要代表什么。 degree of nodes 是什么意思,为什么这意味着稀疏结构?
-
@flatmouse 度数表示相邻顶点的数量。对于每个顶点,我最多可以有 100 个相邻(相邻)顶点。
-
您正在分配
V向量的数组。老实说,看看一些 C++ 图形库,确保你了解 C++ 语言本身的扎实基础知识。 -
@Galik 您能否建议如何使用使其动态化?在我的程序中,我动态更新邻接列表。我事先不知道每个列表的大小。
-
@UlrichEckhardt 向量的数量将是
V,因为我知道有V个节点。但是程序会找到每个节点有多少个相邻节点。所以我创建了V向量,然后在程序内部我开始将相邻节点添加到每个向量。