整数配列のリストがあり、各配列にはいくつかの数値がソートされています。ここでは、すべての配列に基づいて、整数のシーケンスの最も一般的に発生する組み合わせを見つけたいと思います。たとえば、配列のリストが次の場合
A1 - 1 2 3 5 7 8
A2 - 2 3 5 6 7
A3 - 3 5 7 9
A4 - 1 2 3 7 9
A5 - 3 5 7 10
ここ
{3,5,7} - {A1,A3,A5}
{2,3} - {A1,A2,A4}
したがって、最も一般的に発生する組み合わせとして{3,5,7}または{2,3}を使用できます。
今私が使用したアルゴリズムは次のとおりです
セットと他のすべての交差を見つけます。そして、結果のセットを保存します。すでに存在する場合は、結果のセットオカレンスをインクリメントします。例:以下のすべての交差点を検索します
A1 intersection A2
A1 intersection A3
A1 intersection A4
A1 intersection A5
A2 intersection A3
A2 intersection A4
A2 intersection A5
A3 intersection A4
A3 intersection A5
A4 intersection A5
ここで、A1交差点A3はA3交差点A5と同じであるため、set-{3,5,7}オカレンスを2として設定できます。同様に、結果として得られる各セットオカレンスを判別できます。
しかし、このアルゴリズムはO(n ^ 2)の複雑さを要求します。各セットがソートされていると仮定すると、私が書き留めることができないO(n)の複雑さを持つより良いアルゴリズムを見つけることができると確信しています。誰かが同じためのO(n)アルゴリズムを提案できますか?