有效的图形解释C++
Effective graph interpretation C++
我有这个问题:我有一个带有节点的图表,其值在 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
是边的数量。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?