C++ 使用整数向量的邻接矩阵的内存节省方案

C++ 使用整数向量的邻接矩阵的内存节省方案,c++,memory-management,image-segmentation,adjacency-matrix,C++,Memory Management,Image Segmentation,Adjacency Matrix,我尝试使用BFS和Edmonds-Karp算法解决图像分割问题,我使用向量邻接矩阵作为数据结构来保存保持图形垂直和水平链接的邻接矩阵 这是一个无向图,因此我认为可能有比完整的int向量矩阵更好的节省内存的方法 我在做什么 Adj_Matrix.reserve(totalV); for (int i = 0; i < totalV; i++){ Adj_Matrix[i].reserve(totalV); } Adj_矩阵储备(totalV); 对于(int i=0;i800x8

我尝试使用BFS和Edmonds-Karp算法解决图像分割问题,我使用
向量邻接矩阵
作为数据结构来保存保持图形垂直和水平链接的邻接矩阵

这是一个无向图,因此我认为可能有比完整的int向量矩阵更好的节省内存的方法

我在做什么

Adj_Matrix.reserve(totalV);
for (int i = 0; i < totalV; i++){
     Adj_Matrix[i].reserve(totalV);
}
Adj_矩阵储备(totalV);
对于(int i=0;i
为数据结构保留内存,然后
Adj_Matrix.clear()


但在解析和计算大型(>800x800)矩阵时,我遇到了内存问题和崩溃。因此,我想知道存储或表示这些邻接矩阵的更好方法是什么,这样可以节省内存和时间。

可以使用邻接列表来代替邻接矩阵。不同之处在于,当您没有足够的链接用于特定顶点时,其对应的adj_列表[i]向量所需的元素将少于其在邻接矩阵中预定义的totalV大小。这在稀疏图的情况下特别有用


此外,您可以对信息进行编码,以便在向量的单个元素中存储多个链接,以便以后可以使用位掩蔽

等技术对其进行解码。您可以尝试使用本征函数将其存储为稀疏矩阵。800x800整数相当于2.5兆。您是否使用受限硬件?8000x8000为250兆,8000x8000为25兆。