一道算法题——合并有交集的集合
題目如下,
給定一個字符串的集合,格式如:?
{aaa? bbb? ccc}, {bbb?? ddd},{eee?? fff},{ggg},{ddd?? hhh}?
要求將其中交集不為空的集合合并,要求合并完成后的集合之間無交集,例如上例應
輸出?
{aaa? bbb? ccc? ddd? hhh},{eee?? fff}, {ggg}?
(1)請描述你解決這個問題的思路;?
(2)請給出主要的處理流程,算法,以及算法的復雜度?
(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。
我查了查網上的解法,只看到一個(參見http://blog.csdn.net/lillllllll/article/details/4162605),我有一點新想法,說明如下:
1. 首先得到所有元素的集合(aaa, bbb, ccc, ddd, eee, fff, ggg, hhh),復雜度O(N),N是所有元素的個數;
2. 為所有集合標記一個二進制數,來表示包含哪些集合,得到數組int bina[5]復雜度O(N^2);
? ? 如題,{aaa, bbb, ccc} = 1 1 1 0 0 0 0 0,
? ? ? ? ? ? ? ??{bbb, ddd} ? ? ? ? = 0 1 0 1 0 0 0 0,
? ? ? ? ? ? ? ? {eee, fff} ? ? ? ? ? ? = 0 0 0 0 1 1 0 0,
? ? ? ? ? ? ? ? {ggg} ? ? ? ? ? ? ? ? ?= 0 0 0 0 0 0 1 0,
? ? ? ? ? ? ? ? {ddd, hhh} ? ? ? ? = 0 0 0 1 0 0 0 1,
3. 然后寫一個函數,判斷int數組中的第一個元素是否與其他元素&操作為空,復雜度為O(M),M是原集合的個數
? ? a. 為空則輸出該元素對應的集合,并刪除第一個元素,遞歸調用本方法;
? ? b. 不為空則與那個元素做或操作合并,刪除那個元素,遞歸調用本方法;
? ? c.?如果只剩下一個元素則輸出其對應的字符串;
4. 所有的結合已經得到了。
從上面的復雜度看,應該是比原來網上的方法好一些,歡迎大家踴躍拍磚!
總結
以上是生活随笔為你收集整理的一道算法题——合并有交集的集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python打印支票_从数字转换为单词以
- 下一篇: 飞鸽传输IPMsg协议+翻译