日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一道算法题——合并有交集的集合

發布時間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一道算法题——合并有交集的集合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目如下,

給定一個字符串的集合,格式如:?
{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. 所有的結合已經得到了。

從上面的復雜度看,應該是比原來網上的方法好一些,歡迎大家踴躍拍磚!

總結

以上是生活随笔為你收集整理的一道算法题——合并有交集的集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。