C++中的大型图表示
Large Graph Representation in C++
可能会有类似的问题,但我仍然有一些部分无法理解。我试图表示一个没有权重的无向图,但只有1表示连通,0代表不连通。我试图表示一个具有80500个节点和550多万条边的图(从文件中读取)。我在想;
- 如果我把邻接矩阵(我目前正在使用的那个)改为邻接列表,这会产生巨大的影响吗。我对实现没有问题,只是问是否值得花时间将其转换为列表
- 由于我只存储1和0,是否有一种特殊的数据类型不存储此数据。我在中使用,我想字节数据类型会节省很多时间
- 除了邻接矩阵或列表之外,还有其他结构可以更好地解决这个典型问题吗
相邻列表在空间方面更好。因为这样你只需要保存550万*2个数字=11 000 000个整数。假设您保存短整数(2个字节),那么您需要2200000个字节。
如果使用邻接矩阵表示,则需要保存80500*80500=6480 250 000个元素。即使你把它们保存为字节,拥有2200万字节也比拥有60多亿字节要好得多。
编辑:如果您将eges保存为两个4字节的整数,那么您就有44 000 000个字节。如果你用比特篡改非常有效地保存矩阵,那么你可以在一个字节中保存8个元素。但这意味着您仍然需要810 031 250字节。现在差别不大,但仍然是原来的20倍。
如果数据不是稀疏的,那么使用邻接列表可能无法节省那么多空间。您可以使用带有压缩或编码行(或列,但您的图是单向的,因此压缩行对于查找来说可能更自然)的邻接矩阵。通过压缩,您将减少空间,而在查找时解压缩行的时间成本。
相关文章:
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 使用星号在条形图中输出负值,以表示三个值的范围
- 使用 OpenGL 使用 C++ 以图形方式表示堆积条形图
- 加权图的邻接列表表示
- C++图结构中边的有效表示
- 如何在UML活动图中表示编译时间条件
- C++中的大型图表示
- 使用c++向量的有向图的邻接列表表示
- 长整型的位表示未正确打印
- 列表或指针的问题,图的邻接表示
- C++指针、迭代器、图的邻接列表表示的问题
- 如何将一组C++动态分配的对象表示为BGL(Boost Graph Library)图,以获得它们的依赖图
- 如何在图的边列表表示中检测循环
- 由结构体表示的有向图
- 检查float是否可以表示为整型
- 从一个2D矩阵中创建一个表示所有可能路径的图
- 我怎样才能发现,什么意思是所有字节在二进制表示的浮点型
- 在C++中,用十六进制或八进制表示的整型文字的默认类型是什么
- 如何将表示像素的字符数组读取为无符号整型
- 实现了一个邻接表图表示