我有这个问题:
我有一个带节点的图,它的值在1到200米之间。这个图有200米的节点和不超过300米的转换转换使用字符符号(在“a”和“z”之间)
所以我把它们都放在这里:
map转换[200000000];
但这是非常有成本效益的。
在transitions[i]中,i是状态的唯一值,transitions[i][c]中,c是一个字符符号,是从“i”到字符“c”的状态。
但是如果我有8M的状态,它需要1.6GB的内存。我有一个8gb ram的限制,这个可以在200M节点上工作。
你能给我一个更有效的建议吗?我还有2个2亿大小的int数组它也应该适合这些8gb内存它需要1.6GB内存:)
最佳答案
似乎,用
std::vector<std::pair<std::pair<int, char>, int>> edges;
更有效的方法是:条目
((f, x), t)
用符号f
表示从nodet
到nodez
的转换您可以对这个向量进行排序,并使用带有适当谓词的std::lower_bound(edges.begin(), edges.end(), predicate)
来定位转换。内存占用大概是3 * sizeof(int) * e
,其中e
是边的数量。关于c++ - 有效的图形解释C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21030496/