(配列内のすべてのペアの中で) 共通セット ビットの最大数を持つ配列内のビット文字列のペアを見つけるアルゴリズムを見つけたいと考えています。配列内のビット文字列のすべてのペアを比較することでこれを実行できることはわかっていますが、これは O( n 2 ) です。より効率的なアルゴリズムはありますか? 理想的には、反復ごとに 1 つの入力ビット文字列を処理することで、アルゴリズムが段階的に機能するようにしたいと考えています。
たとえば、次のビット文字列の配列 (長さ 8) があるとします。
B1:01010001
B2:01101010
B3:01101010
B4:11001010
B5:00110001
ここでの最適なペアはB2
とB3
で、4 つの共通セット ビットがあります。
そのようなアルゴリズムを説明しているように見える論文を見つけました (S. Taylor & T. Drummond (2011); " Binary Histogrammed Intensity Patches for Efficient and Robust Matching "; Int. J. Comput. Vis. 94:241–265),しかし、252ページからのこの説明がわかりません:
これは、再計算が必要な [ビット文字列] オーバーラップのみが、新しい親フィーチャのオーバーラップと、組み合わせ用に選択された 2 つのうちの 1 つであるルート内の他の [ビット文字列] であるため、反復ごとに段階的に更新できます。これにより、反復ごとに O(N 2 ) オーバーラップ比較が不要になり、通常サイズの 700 フィーチャのデータベースのフォレストを 1 秒未満で構築できます。