私は配列a [i] [j]を持っています。要素はcharであり、セット{1、...、8}のサブセットとして解釈されます(k番目のビットが1の場合、要素kはサブセットにあります)。私はそれが適切だとは思わないが、すべての要素は正確に4ビットが設定されています。サブセットの集合と順列の比較
各行a [1] [j] .. a [n] [j]は、{1、...、8}のサブセットの集合です。 2つの行が{1、...、8}の順列によって他方から取得できる場合、重複行と見なされる重複行を削除する必要があります。
例(0bxxxxxxxxは2進数を意味する):前者は置換
8->8, 7->7, 6->1, 5->4, 4->3, 3->2, 2->5, 1->6
を適用することによって後者から得ることができるので
0b11000000, 0b01100000, 0b00110000
は
0b00110000, 0b00011000, 0b00100100
の複製であります結果を並べ替える。
パフォーマンス上の理由から、配列には約2000個の行が含まれ、それぞれに最大20個の要素が含まれています。各行はすでに順序付けされており、行が辞書順に昇順になっています(これが役立つ場合)。アルゴリズムの残りの部分はCで書かれているので、Cの解決法が望ましいでしょう。
ありがとうございました。
グラフのteoryでは、これは4-uniformハイパーグラフの同型問題です。 問題をbruteforcingに適したものにしたアドホックな単純化を行うことができましたが、私はまだ一般的なアルゴリズムについては疑問を抱いています。 – user175348