【问题标题】:Complexity of creating an adjacency list from a lits of edges?从边列表创建邻接列表的复杂性?
【发布时间】:2012-09-17 06:00:32
【问题描述】:

我正在创建一种算法,可以从边列表构建邻接列表。

例如,如果输入的数据是:

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)。但是我只能通过在带有二维数组的 for 循环中实现 for 循环来让程序工作,我认为这会导致 O(N^2) 的复杂性。

谁能帮助我更好地理解?

【问题讨论】:

    标签: algorithm complexity-theory performance


    【解决方案1】:

    这在很大程度上取决于您使用哪种数据结构来存储从顶点到相邻顶点列表的映射。遍历边列表当然会有时间复杂度 O(e)。任何更大的时间复杂度都来自于在地图中找到顶点所需的时间以及将新项目插入顶点的相邻顶点列表所需的时间。如果您使用的是平面数组,那么您可能会有 O(v*e) 复杂度(对于每条边,循环遍历顶点列表以找到所需的顶点),但是通过使用哈希表或树可以大大改善这一点数据结构,为您提供更好的查找性能。

    【讨论】:

    • 但是 O(v+e) 甚至不是一个选项?
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多