【发布时间】:2012-09-06 17:05:55
【问题描述】:
我计划用 C++ 表示一个相当大的、稀疏的、无向图结构。这将是大约 10,000 多个顶点,每个顶点的度数约为 10。
我已经阅读了一些关于将图表示为邻接矩阵或列表的 background,但它们似乎都不适合我想做的事情。在我的场景中:
- 图表中的每条边都会附加一些属性(数值)
- 初始图创建后,边可以删除,但永远不会创建
- 永远不会创建或删除顶点
- 图上的主要查询操作将是查找边 E,以了解哪些其他边连接到它。这相当于在 E 的每一端找到连接到顶点的边。
正是这最后一点使邻接矩阵看起来不合适。据我所知,每个查询都需要 2*N 次操作,其中 N 是图中的节点数。
我相信邻接表会减少所需的操作,但似乎不合适,因为我在每条边中都包含了参数 - 即因为邻接表存储了每个
有没有更好的方法来存储我的数据,以便这些查询操作更快,并且我可以存储每条边及其参数?我不想开始实施不正确的方法。
【问题讨论】:
-
邻接表没问题,可以把数据和边一起附加。怎么了?邻接矩阵是不可能的,除非您有大量可用内存(接近 100 MB),而总共只有 10^5 条边。
-
好的,谢谢。但是我该如何处理邻接列表中的重复呢?每条边将被表示两次,一次在节点 i 的行中,一次在节点 j 的行中。
标签: c++ data-structures graph