【问题标题】:What is a fast matrix or two-dimensional array to store an adjacency matrix in C++什么是在 C++ 中存储邻接矩阵的快速矩阵或二维数组
【发布时间】:2013-10-29 12:07:12
【问题描述】:

我试图推断一个我只能模拟的过程的马尔可夫链。最终图将包含的状态/顶点数量非常多,但我事先不知道顶点的数量。

现在我有以下内容:

  • 我的模拟输出一个boost::dynamic_bitset,每个时间步包含 112 位。
  • 我使用 bitset 作为 Google 稀疏散列中的键来映射到整数值,该整数值可用作我要构造的邻接矩阵的索引。

现在我需要一个好/快的矩阵或二维数组来存储整数。它应该:

  • 使用我存储在 Google Sparse Hash 中的整数值作为行数/列数。 (例如,我想通过执行matrix(3,4) = 3 之类的操作来访问/更改存储的整数。
  • 我不知道我需要提前多少行或列。所以它应该能够即时添加行和列。
  • 大多数值将是 0,因此它可能应该是某些东西的稀疏实现。
  • 行数和列数会很大,所以应该很快。
  • 使用简单。我不需要大量的数学运算,它应该是一种快速简单的存储和访问整数的方法。

我希望我的问题足够清楚。

【问题讨论】:

    标签: c++ arrays matrix multidimensional-array adjacency-matrix


    【解决方案1】:

    我推荐 http://www.boost.org/doc/libs/1_54_0/libs/numeric/ublas/doc/matrix_sparse.htm -- 提升 UBLAS 稀疏矩阵。稀疏矩阵存储有几种不同的实现,因此阅读文档可以帮助您选择适合您目的的类型。 (TLDR:稀疏矩阵具有快速检索或快速插入。)

    【讨论】:

    • 我尝试了 boost 稀疏矩阵。然而,在 Boost 库中似乎还没有实现 resize() 函数同时保留数据。 (或者我无法让它工作,这总是可以考虑的。)如果没有 resize() 函数,我就有麻烦了,因为我需要的条目数量是不可预测的。
    • 在邮件列表中询问。开发人员可以并且确实回答您的问题,他们是一群非常有礼貌的人。从算法上讲,您可以使用 unordered_maps 的 unordered_map 来存储数据:顶级 unordered_map 对第一个维度进行建模,使用 unordered_map 来存储整数。 (YMMV,自发的想法……;)
    猜你喜欢
    • 1970-01-01
    • 2010-12-30
    • 2012-03-18
    • 2014-11-28
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多