我将在C#中编写自己的Graph结构(我知道这样存在,但我想练习+我需要自定义方法)。这个想法很简单:
Graph<T>
类将有一组GraphNode<T>
个对象,代表节点GraphNode<T>
个对象,代表它所连接的节点(面向图)。我的问题很简单:如果我想快速遍历GraphNode<T>
集,我应该使用哪种数据结构?快速添加/删除是+,但不是主要目标。
答案 0 :(得分:0)
如果您期望节点数量相对较少(少于十万个),则可以使用邻接矩阵(对于更大数量的节点,您可以使用按位运算符;这还取决于您的图是否称重)。这在插入/删除时会非常慢。
对于快速图遍历,邻居节点列表将非常有用,因为它可以非常快速地遍历。此外,这种方法将允许遍历的并行化,这将提高性能。这种方法可能是您正在寻找的最佳方法。
我会使用List<GraphNode<T>>
来存储邻居。
对于具有许多节点的加权图,ConcurrentDictionary<GraphNode<T>, double>
应该表现良好。