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

2019 年 3 月 13 日
 zealinux

比如

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

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

有没有现成的库?

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

2869 次点击
所在节点    Python
13 条回复
niknik
2019 年 3 月 13 日
楼下帮我回一下,我上个厕所👇
shyrock
2019 年 3 月 13 日
这不是元组列表吗。。。哪里有集合。。。
bumz
2019 年 3 月 13 日
并查集?
bumz
2019 年 3 月 13 日
@shyrock #2 逻辑上的集合
ybbswc
2019 年 3 月 13 日
首先判断是否有相同元素,有的话就作并集。楼下来吧。(ーー;)
bumz
2019 年 3 月 13 日
亲测并查集可行,复杂度 O(n),n 为输入中唯一元素的个数 * 每种元素平均出现次数

https://gist.github.com/bumfo/26fc4865e27b48385ed650cd08fe6004
bumz
2019 年 3 月 13 日
@bumz #6 想要 set 的话把 tuple 改成 set 一样
bumz
2019 年 3 月 13 日
@bumz #6 复杂度 O(n log m),m 是不同元素的个数,n 是 m * 每个元素的平均出现次数
bumz
2019 年 3 月 13 日
@ybbswc #5 这种做法复杂度 O(ab), a 是集合的个数,b 是每个集合中元素的个数的平均值
freemoon
2019 年 3 月 13 日
```
a = [(1,2), (2,3)]
b = [(1,2)]

print(set(a) | set(b))
```
strict
2019 年 3 月 13 日
复杂度目前想到的全是 m*n
xor
2019 年 3 月 13 日
@strict 并查集可以 n log m
xor
2019 年 3 月 13 日
@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