我正在创建一个可以从边缘列表构建邻接列表的算法。
例如,如果数据输入为:
1 2
1 8
2 8
3 5
3 1
4 5
4 6
5 2
5 9
6 4
6 8
7 4
7 10
8 4
8 6
9 4
9 5
10 7
10 3
输出结果为:
1: 8 4 6
2: 4 6
3: 9 2 8
4: 2 9 8
5: 8 4
6: 5 4
7: 5 6 3
8: 5 6 4
9: 5 6 2
10: 4 5 1
算法显然受到顶点和边数的限制,所以最初我认为它将是O(v + e)。但我只能通过在2d数组的循环中实现for循环来使程序工作,我认为这会导致O(N ^ 2)的复杂性。
任何人都可以帮助我更好地理解吗?
答案 0 :(得分:2)
在很大程度上取决于您使用什么类型的数据结构将地图从顶点存储到相邻顶点的列表。迭代边缘列表当然会有时间复杂度O(e)。任何更大的时间复杂度将来自在地图中找到顶点所需的时间以及将新项目插入到顶点的相邻顶点列表中所需的时间。如果你使用的是平面数组,那么你可能会有O(v * e)复杂度(对于每个边,循环遍历顶点列表以找到所需的顶点),但是这可以通过使用哈希表或树来改进很多数据结构,为您提供更好的查找性能。