我有这个问题: 我有一个节点图,其值在1到200M之间。图表有200M节点,不超过300M转换。转换是使用char符号(在'a'和'z'之间) 所以我把它们全都放在这里: 地图< char,int>跃迁[2亿]; 但它的成本非常低廉。 在transition [i]中i是状态的唯一值,而transition [i] [c],其中c是char符号,是我们从“i”到char“c”的状态 但是,如果我有8M状态,则需要1.6gb内存。我有一个8 GB的ram限制,这个与200M节点一起工作。 你能给我一些更有效的建议吗?我也有2 x int数组,大小为2亿。哪个也应该适合这些8gb内存。它需要1.6gb RAM:)
答案 0 :(得分:0)
看来,使用
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
是边数。