我需要从非常大的(大约一百万条目)文本文件中读取数据,并且我正在尝试确定哪种数据结构最合适。文件中的每个条目包含两个整数,表示有向图中的边(尾部和头部顶点),绝大多数顶点至少有一个出边。我的“天真”解决方案是使用矢量矢量,所以如果尾部顶点是1并且头部顶点是2,我只需执行类似graph[1].push_back(2)
的操作来读入条目“1 2”。一旦读入图形,我将使用Kosaraju的算法来计算强连通分量,因此我认为能够在恒定时间内通过[]运算符访问每个元素将非常方便。
在这种情况下,数据结构方面的“典型”选择是什么?另外,假设向量的向量是一个坏的,为什么它是坏的?我猜他们的矢量需要重新调整大小的事实会减慢速度,但是直到运行时才能知道边/顶点的数量,所以我不知道如何解决这个问题。
由于
答案 0 :(得分:1)
你知道顶点的数量吗?
矢量矢量并不像你想的那么糟糕,因为你可以在读取边缘之前调整外部矢量的大小。因此,可以防止复制整个图表。
据我所知,矢量矢量是图形的良好结构。它经常被奥林匹克运动员用于计算机科学。