将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:{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)的。改进的话,首先可以记录每个节点的根结点,改进查询。合并的时候,可以把大的和小的进行合,这样也减少复杂度。