Дано:
Есть много входных данных, пусть будет 1ТБ. Представим их в виде бинарного кода. Получившуюся бинарную последовательность разделим на части длины N. То есть будет очень большое количество бинарных последовательностей (далее сегментов) фиксированной длины N (длина N может быть разной, от 8 до 65536).
Цель:
Нужно выделить K кластеров, в каждом из которых будут содержаться похожие сегменты (степень похожести нужно задать).
Очевидно, что представить их как вектора размерности N и делать классическую кластеризацию по расстоянию (Хэмминга, Евклида и тп) выйдет слишком дорого, т.к. придется считать расстояния между всеми векторами (побитовое сравнение), которых очень много. Нужен какой-то алгоритм, который позволит делать кластеризацию по хеш-кодам. То есть сначала нужна хеш-функция, которая похожим векторам будет давать похожие хеш-коды. Или необязательно нужна такая хеш-функция, а нужен только алгоритм, который будет определять степень похожести векторов через их хеш-коды. Есть идеи, как это сделать? Или подскажите какие-нибудь алгоритмы. Такие есть, но на русском языке не нашел описания подходящего под эту задачу, а на английском такую литературу пока не могу переваривать. Заранее благодарен.
upd. Нашел вроде что-то подходящее, но не могу разобраться с этим (технический английский страдает):
roussev.net/pubs/2010-IFIP--sdhash-design.pdf
Тут рассматриваются Rabin Fingerprinting, Fuzzy Hashing и то, как это работает. Кто-нибудь знает подобные статьи на русском языке или может помочь с адаптацией этой?