問題の要点は次のとおりです。次のようなセットのリストが与えられます。
[ (1,2,3), (5,2,6), (7,8,9), (6,12,13), (21,8,34), (19,20) ]
共有要素を持つセットが同じグループにあるように、セットのグループのリストを返します。
[ [ (1,2,3), (5,2,6), (6,12,13) ], [ (7,8,9), (21,8,34) ], [ (19,20) ] ]
粘着性に注意してください - セット (6,12,13) には (1,2,3) との共有要素はありませんが、(5,2,6) のために同じグループに入れられます。
問題を複雑にするために、私は実際にはこれらのきちんとしたセットを持っているわけではなく、次のような数百万行の DB テーブルを持っていることに言及する必要があります。
element | set_id
----------------
1 | 1
2 | 1
3 | 1
5 | 2
2 | 2
6 | 2
等々。だから私はSQLでそれを行う方法が大好きですが、解決策の一般的な方向性に満足しています.
EDIT : テーブルの列名を (key, group_id) ではなく (element, set_id) に変更して、用語の一貫性を高めました。Kev の回答では古い列名が使用されていることに注意してください。