Python 怎么实现归并集合功能?

2019-03-13 16:26:26 +08:00
 zealinux

比如

输入:[(A, B), (B, C), (X,Y)]
输出:[(A, B, C), (X, Y)]

即归并有相同元素的集合。

有没有现成的库?

或者自己实现的化思路是什么样的?

2087 次点击
所在节点    Python
13 条回复
niknik
2019-03-13 16:41:04 +08:00
楼下帮我回一下,我上个厕所👇
shyrock
2019-03-13 16:42:55 +08:00
这不是元组列表吗。。。哪里有集合。。。
bumz
2019-03-13 17:01:10 +08:00
并查集?
bumz
2019-03-13 17:01:26 +08:00
@shyrock #2 逻辑上的集合
ybbswc
2019-03-13 17:03:20 +08:00
首先判断是否有相同元素,有的话就作并集。楼下来吧。(ーー;)
bumz
2019-03-13 17:33:08 +08:00
亲测并查集可行,复杂度 O(n),n 为输入中唯一元素的个数 * 每种元素平均出现次数

https://gist.github.com/bumfo/26fc4865e27b48385ed650cd08fe6004
bumz
2019-03-13 17:34:34 +08:00
@bumz #6 想要 set 的话把 tuple 改成 set 一样
bumz
2019-03-13 17:41:09 +08:00
@bumz #6 复杂度 O(n log m),m 是不同元素的个数,n 是 m * 每个元素的平均出现次数
bumz
2019-03-13 17:45:06 +08:00
@ybbswc #5 这种做法复杂度 O(ab), a 是集合的个数,b 是每个集合中元素的个数的平均值
lasuar
2019-03-13 17:50:19 +08:00
```
a = [(1,2), (2,3)]
b = [(1,2)]

print(set(a) | set(b))
```
strict
2019-03-13 18:36:38 +08:00
复杂度目前想到的全是 m*n
xor
2019-03-13 20:28:01 +08:00
@strict 并查集可以 n log m
xor
2019-03-13 20:38:59 +08:00
@xor 并查集可以做到在现实中 O(m)
严格来讲 O(m α(n)) 但是现实中 α(n) <= 4

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/544193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX