Hex-Pair Hamming Distance Functions

August 23, 2016 ยท View on GitHub

This extension provides four functions to work with hex representation of feature vector.

Every function asserts that both arguments have the same length.

hamming_distance(varchar, varchar) RETURNS int (IMMUTABLE STRICT)

Computes absolute hamming distance between to FVs

SELECT hamming_distance('1d3f', '1110');
 hamming_distance
------------------
                7
(1 row)

This expands as

a = '1d3f'  -> 0001 1101 0011 1111
b = '1110'  -> 0001 0001 0001 0000

c = a ^ b   -> 0000 1100 0010 1111

popcount(c) ->   0 + 2 + 1 + 4 = 7

hamming_similarity(varchar, varchar) RETURNS int (IMMUTABLE STRICT)

SELECT hamming_similarity('1d3f', '1110');
 hamming_similarity
--------------------
                  9
(1 row)

Can be defined as

HAMMING_SIMILARITY = len(a) * 4 - hamming_distance(a, b);

hamming_distance_normalized(varchar, varchar) RETURNS float (IMMUTABLE STRICT)

SELECT hamming_distance_normalized('1d3f', '1110');
 hamming_distance_normalized
-----------------------------
                      0.4375
(1 row)

Can be defined as

HAMMING_DISTANCE_NORM = hamming_distance(a, b) / len(a) * 4;

hamming_similarity_normalized(varchar, varchar) RETURNS float (IMMUTABLE STRICT)

SELECT hamming_similarity_normalized('1d3f', '1110');
 hamming_similarity_normalized
-------------------------------
                        0.5625
(1 row)

Can be defined as

HAMMING_SIMILARITY_NORM = hamming_similarity(a, b) / len(a) * 4;

Installation

cd .../hamming_distance
sudo make install

Running tests

make installcheck