代码之家  ›  专栏  ›  技术社区  ›  Nick Dong

在64位系统中,是否可以用c++11为图形创建位邻接数组

  •  1
  • Nick Dong  · 技术社区  · 7 年前

    在64位系统中,是否可以用c++11为图形创建位邻接数组

    例如:

    4X4邻接矩阵,16位数组:101001010011010

    所以元素1,1是1,元素1,2是0,…,元素4,4是0

    问题是怎么做?如何在内存中分配一个长的连续位存储器? malloc

    编辑

    比如说1000万。对于无符号字符可能有90吨的内存。我知道有人在部署10^7个节点。可能他们使用的是向量或列表,这是动态分配内存。

    2 回复  |  直到 7 年前
        1
  •  2
  •   rpaulin56    7 年前

    你需要一个“稀疏数组”,实际上只填充了几个元素。我首先考虑使用std::map,如下所示:

    #include <map>
    class MyNode {
    // your stuff here
    };
    typedef <your node id type> MyNodeId; // must naturally or by overload define an operator <
    
    typedef std::map<MyNodeId, MyNode> ArcsFromNode;
    
    typedef std:map<MyNodeId, ArcsFromNode> MyGraph;
    
        2
  •  1
  •   skeller    7 年前

    邻接矩阵中的大多数条目都可能是0,因此需要一个所谓的“稀疏矩阵”来节省内存。

    其基本思想是存储元素映射,因此它只存储非零项而不是存储大矩阵。

    https://www.boost.org/doc/libs/1_45_0/libs/numeric/ublas/doc/matrix_sparse.htm 概述。