简单数据组的快速算法

时间:2016-05-27 02:48:44

标签: algorithm

这样有几十亿行

id | type | groupId
---+------+--------
1  |  a   |  
1  |  b   |  
2  |  a   |
2  |  c   |
1  |  a   |  
2  |  d   |  
2  |  a   |
1  |  e   |
5  |  a   |
1  |  f   |
4  |  a   |
1  |  b   |
4  |  a   |
1  |  t   |
8  |  a   |
3  |  c   |
6  |  a   |

我需要为这些数据添加groupId,如果id相同或类型相同,那么它是一个相同的groupId,结果如下:

id | type | group
---+------+--------
1  |  a   |  1
1  |  b   |  1
2  |  a   |  1
2  |  c   |  1
1  |  a   |  1
2  |  d   |  1
2  |  a   |  1
1  |  e   |  1
5  |  a   |  1
1  |  f   |  1
4  |  a   |  1
1  |  b   |  1
4  |  a   |  1
7  |  t   |  2
8  |  g   |  3
3  |  c   |  1
6  |  a   |  1

我尝试使用循环来执行此操作,但效率非常低,需要服务器周才能完成所有这些。

1 个答案:

答案 0 :(得分:-1)

这是一个典型的例子,您可以使用 Quick-Union算法。


计算限制

  • 时间复杂度用于分组N行:O(N log * N)其中log * N是“获取数字lg到达1之前所需的次数”。例如Log * 10 ^ 100 = 3(约)
  • 空间复杂性:O(N)


阅读有关此算法的更多信息:

  1. https://www.youtube.com/watch?v=MaNCMWhYIHo
  2. https://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf