コンピュータ サイエンスの基本概念であるハミング距離は、バイナリ文字列間の相違度を測定します。異なるビットの数を数えることによって 2 つのバイナリ文字列を抽出します。 SQL では、類似したデータ ポイントや最近傍のデータ ポイントを見つけるなど、さまざまな目的でハミング距離を計算する必要があります。
開発者は、ハミング距離を計算しようとしているときにハードルに遭遇します。テーブルのバイナリ列のエントリと指定された値の間。この問題は、SQL の整数ベースの演算子と関数に固有の制限があり、バイナリ文字列と互換性がありません。
1.部分文字列と整数の演算アプローチ
開発者は、バイナリ文字列を手動で部分文字列に分割し、それぞれを整数に変換して、部分文字列ごとにハミング距離を計算することを検討しています。ただし、このアプローチは複雑で非効率的で、洗練されていません。
2.複数の BIGINT 列へのハッシュの保存
その後の研究により、それぞれ 8 バイトの部分文字列を表す 4 つの BIGINT 列にハッシュを保存すると、ハミング距離の計算が大幅に高速化されることが明らかになりました。開発者は、各部分文字列のハミング距離を結合するカスタム関数を作成します。
<code class="sql">CREATE FUNCTION HAMMINGDISTANCE( A0 BIGINT, A1 BIGINT, A2 BIGINT, A3 BIGINT, B0 BIGINT, B1 BIGINT, B2 BIGINT, B3 BIGINT ) RETURNS INT DETERMINISTIC RETURN BIT_COUNT(A0 ^ B0) + BIT_COUNT(A1 ^ B1) + BIT_COUNT(A2 ^ B2) + BIT_COUNT(A3 ^ B3);</code>
このアプローチは、バイナリ列ベースと比較して、テストで 100 倍を超えるパフォーマンスの向上を示しています。
代替アプローチでは、開発者はバイナリの部分文字列を 16 進数値に変換し、さらにそれらを 10 進数値に変換してから、ビットごとの XOR とハミング距離を計算します。 BIT_COUNT。ただし、このアプローチにはいくつかの変換手順が含まれるため、BIGINT 列ベースの方法よりも効率が低くなります。
複数の BIGINT 列のカスタマイズと使用により、次のような高速かつ効率的なソリューションが提供されます。 SQL でバイナリ文字列のハミング距離を計算します。このアプローチは、パフォーマンスが重要になる大規模なデータセットを扱う場合に特に有利です。
以上がSQL でバイナリ文字列のハミング ディスタンスを効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。