SQL でのバイナリ文字列のハミング距離の計算
2 つのバイナリ文字列間のハミング距離の計算は、エラーを含むさまざまなアプリケーションで重要な操作です。検出とクラスタリング。ただし、MySQL の BINARY データに対してこの計算を直接実行するのは非効率となる可能性があります。この記事では、BIGINT 列を使用して最適なパフォーマンスを実現する別のアプローチを検討します。
2 つのバイナリ文字列間のハミング距離は、対応する位置で異なるビット数として定義されます。この距離を計算する一般的な方法は、バイナリ文字列を部分文字列に分割し、それらを整数に変換し、各部分文字列のペアに対して XOR 演算を実行することです。次に、個々のハミング距離が合計されて、全体の距離が取得されます。
このアプローチは効率的に見えるかもしれませんが、BINARY 列を扱う場合には計算量が多くなる可能性があります。パフォーマンスを最適化するには、BINARY 列を複数の BIGINT 列に分割し、各列に元のデータの 8 バイトの部分文字列を含めることをお勧めします。これにより、前に提供した BIGINT 列を直接操作する HAMMINGDISTANCE 関数などのカスタム関数を利用できるようになります。
HAMMINGDISTANCE 関数は、BIT_COUNT 関数を使用して、 BIGINT 列。このアプローチでは、BINARY アプローチを使用する場合と比較してパフォーマンスが大幅に向上します。
たとえば、MySQL 5.1 では、BIGINT-подхода был более чем в 100 раз быстрее, чем ис をテストします。 BINARY と互換性があります。 Таким образом, для больгих таблиц, содержащих много строк и много столбцов BINARY(32), эта оптимизация можест и к существенному сокращению времени обработки.
以上がSQL でバイナリ文字列のハミング ディスタンス計算を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。