有效的图形解释C++

Effective graph interpretation C++

本文关键字:C++ 解释 图形 有效      更新时间:2023-10-16

我有这个问题:我有一个带有节点的图表,其值在 1 到 200M 之间。并且图形具有 200M 个节点,并且不超过 300M 个转换。过渡带有字符符号(在"a"和"z"之间)所以我把它们都放在这个: 映射<字符,int>转换[200000000];但这是非常不合理的成本。在转换[i]中,I是状态的唯一值,而转换[i][c],其中c是字符符号,是我们从带有字符"C"的"I"进入的状态但是,如果我有 8M 个状态,则需要 1.6gb 内存。而且我有 8 GB 内存的限制,以便与 200M 节点一起使用。你能给我一个更有效的建议吗?我还有 2 个大小为 2 亿的 int 数组。这也应该适合这些 8gb 内存。它需要像1.6GB内存:)

似乎使用

std::vector<std::pair<std::pair<int, char>, int>> edges;

会更有效:条目((f, x), t)将表示从节点f到节点t的转换,符号z。您将保持此向量排序,并使用具有合适谓词的std::lower_bound(edges.begin(), edges.end(), predicate)定位转换。内存占用量可能大致3 * sizeof(int) * e其中e是边的数量。