次の関数を使用して、いくつかのテスト データを生成できます。
import random, string
a = list(string.ascii_lowercase)
def gen_test_data():
s = []
for i in xrange(15):
p = random.randint(1,3)
xs = [random.choice(a) for i in xrange(p)]
s.append(xs)
return s
これは私のテストデータです。
[
['a', 's'],
['f', 'c'],
['w', 'z'],
['z', 'p'],
['z', 'u', 'g'],
['v', 'q', 'w'],
['y', 'w'],
['d', 'x', 'i'],
['l', 'f', 's'],
['z', 'g'],
['h', 'x', 'k'],
['b'],
['t'],
['s', 'd', 'c'],
['s', 'w', 'd']
]
レターが別のレターとリストを共有している場合、それはそのレターに依存しており、そのレターのいずれかが他の依存関係にあります。例えば
x
依存している['a','c','d','g','f','i','h','k','l','q','p','s','u','w','v','y', 'x','z']
これらの依存関係も双方向です。k
を含むすべてのものに依存しています。x
しかし、またはx
に依存していません。これらは別々のグループに配置できます。b
t
リストをできるだけ多くの非依存グループに分割する必要があります。
各グループは、グループが依存するすべての文字のセットになります。非依存文字は1セットとなります。
上記の出力例は次のとおりです。
[
['t'],
['b'],
['a','c','d','g','f','i','h','k','l','q','p','s','u','w','v','y', 'x','z']
]
これを行う関数を作成しようとしていますが、すべてを正しくグループ化する正しい方法がわかりません。