我一直在研究使用邻接列表实现的图,我reading认为添加边是O(1)操作。
如果仅在Vertex的边缘链接列表上添加一条边线,这是有道理的,但是我不理解这种情况,只要您关心如果已经条边线就删除旧边线存在。找到该边缘将花费O(V)时间。
如果不执行此操作,而添加一条已经存在的边,则该边将有重复的条目,这意味着它们的权重可能不同,等等。
谁能解释我似乎缺少的东西?谢谢!
答案 0 :(得分:0)
您正确地进行了能力分析。查找边缘是否已经存在确实是O(V)。但是请注意,即使存在,添加该边仍然是O(1)。
您需要记住,即使目标的权重不同,也有两个具有相同来源的目标边是有效的图形输入-甚至具有不同的权重(可能不是,甚至是因为)。
以这种方式向邻接列表图添加边是O(1)
答案 1 :(得分:0)
What people usually do to have both optimal search time complexity and the advantages of adjacency lists is to use an array of hashsets instead of an array of lists.
Alternatively,
If you want a worst-case optimal solution, use RadixSort to order the list of all edges in O(v+e) time, remove duplicates, and then build the adjacency list representation in the usual way.