笔试和面试题(3)

将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:{aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh} 。要求将其中交集不为空的集合合并,要求合并完成的集合之间没有交集。应输出{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}.
 (1) 请描述你解决这个问题的思路; 

 (2) 给出主要的处理流程,算法,以及算法的复杂度;

 (3) 请描述可能的改进



solution:采用并查集。

首先所有的字符串都在单独的并查集中。然后依扫描每个集合,顺序合并将两个相邻元素合并。
例如,对于(aaa,bbb,ccc) ,首先查看aaa和bbb是否在同一个并查集中,如果不在, 那么把它们所在的并查集合并,然后再看bbb和ccc是否在同一个并查集中,如果不在,那么也把它们所在的并查集合并。接下来再扫描其他的集合,当所有的集合都扫描完了,并查集代表的集合便是所求。复杂度应该是O(NlgN)的。改进的话,首先可以记录每个节点的根结点,改进查询。合并的时候,可以把大的和小的进行合,这样也减少复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值