2017-04-21 1 views
0

1つのセットのみを含む1つのリストで2つのセットのリストを反復しようとし、すべてのセットが追加されるまでに最大交差点を持つリストにセットを追加します。 order_of_setsの新しい要素は、手続きを繰り返す必要があります。アルゴリズムは欲張りアルゴリズムのように機能するはずです。私は最終的に欲しいリストに最も多くの交差要素を含むセットを追加する方法

 s1=set([1,2,3,4,5,6,7,8,9,10]) 
     s2=set([1,3,56,8,9]) 
     s3=set([1,4,5,6,7,8,10,22,23,24,25]) 
     s4=set([7,8,9,10,23,14,22,23,24,30,56]) 
     list_of_sets=[s2,s3,s4] 
     order_of_sets=[s1] 

     for x in list_of_set: 
      for y in order_of_sets: 
      if len(x.intersection(y))==max[len(x.intersection(y))]: 
       order_of_lists.append(y) 
       list_of_sets.remove(y) 

は次のとおりです。

order_of_sets=[s1,s3,s4,s2]  

多分私が交差点の長さを評価しますが、私はどのように知らない関数を定義することができます。

+0

出力は何ですか?あなたの説明にこれを書いてください。 – qbzenker

+0

"他のどのセットと"最大の交差点を持っていますか? – user2357112

+0

s1となる集合の順番で設定します。私はs1との最も大きな交差点を持つlist_of_setsからセットを追加したいと思います。これはs3になります。それから、次はセット3で次のことをしたい。最も大きな交差点はs3とs4の間です。 –

答えて

0
s1 = {1,2,3,4,5,6,7,8,9,10} # in python 3 this set notation is easier on the eyes 
s2 = {1,3,56,8,9} 
s3 = {1,4,5,6,7,8,10,22,23,24,25} 
s4 = {7,8,9,10,23,14,22,23,24,30,56} 

list_of_sets = [s2,s3,s4] 
order_of_sets = [s1] 

while list_of_sets: 
    best_set = max(list_of_sets, key=lambda s: len(s.intersection(order_of_sets[-1]))) # gets the set from list_of_sets having the largest intersection with the last set from order_of_sets 
    list_of_sets.remove(best_set) 
    order_of_sets.append(best_set) 


print(order_of_sets) 

[{1、2、3、4、5、6、7、8、9、10}、{1、4、5、6、7、8、10 、22,23,24,25}、{7,8,9,10,14,22,23,24,56,30}、{1,3,,8,9,56}]

+0

ありがとうございます。私はそれが何か単純で、私の知識は単に不十分であることが分かっていました。 2行目の "[-1]"の意味は何ですか? –

+0

これは 'order_of_sets'の最後の項目を取得します – Guillaume

+0

もちろん、最初のものはインデックス0 –

関連する問題