有效的图解释C ++

时间:2014-01-09 20:31:07

标签: c++ algorithm memory graph

我有这个问题: 我有一个节点图,其值在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:)

1 个答案:

答案 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是边数。