如何将文件用作图形邻接列表运行时存储

时间:2016-06-05 22:38:11

标签: c++ algorithm graph-databases adjacency-list

我有一个内存双向图实现为邻接列表,如下所示:

class MemGraph
{
    struct Node { int id; std::vector<int> from, to; }; //stores ids of adjacent edges
    struct Edge { int id, from, fromIndex, to, toIndex; }; //from, to are ids of nodes and the fromIndex and toIndex are locations in those
    //Index is open-addressing hash table using Node::id and Edge::id as key
    struct Index { int count; std::vector<int> data; };

    std::vector<Node> nodes;
    Index nodeIndex;
    std::vector<Edge> edges;
    Index edgeIndex;
};

这允许O(1)为所有操作(对id和index位置插入,删除,搜索和随机访问)进行转换。插入仅仅附加在相应的列表中。使用“swap with last”技术完成删除(需要一些较小但始终不断更新交换元素)。

有没有办法在保持O(1)复杂度的同时将这种方法(或修改后的版本)与文件(而不是向量)一起用作后端?

我遇到的问题是相邻边缘的向量。每当我修改它们时,整个节点都需要在最后重新插入文件中。这同样适用于边缘,但这些边缘始终是恒定的,而节点可能很大(因此违反了O(1)时间复杂度的要求。

0 个答案:

没有答案