Использование битовой выборки для построения minhash

Я использовал эту прекрасную статью о хешировании, чувствительном к локальности, чтобы построить свою собственную схему хеширования, чувствительной к локальности, которая разветвляется в знании предметной области - я имею в виду мое знание только того, что хешируется, чтобы, надеюсь, обеспечить более надежные локальные совпадения сходства.

Одна из идей, обсуждаемых в этой статье, которая действительно привлекает меня, - использование битовой выборки для ускорения и упрощения процесса мини-хэшей. Цитировать из этой статьи

Чтобы уменьшить временную сложность сравнения minHashes друг с другом, мы можем добиться большего успеха с помощью метода, известного как битовая выборка. Основная идея заключается в том, что нам не нужно знать точное значение каждого хеша, а только то, что хеш-коды равны в своих соответствующих позициях в каждом хеш-векторе. С этим пониманием давайте рассмотрим только младший значащий бит (LSB) каждого хеш-значения. Еще псевдокод:

для которого автор предоставляет относительно простой псевдокод

def bitSampling(hashes):
 N = 100
 bits = 0
 for each i = 1 to N:
    hash = hashes[i]
    bits = (bits << 1) | (hash & 1)
 return bits

Ниже автор продолжает замечание

Конечно, два разных хэша будут иметь один и тот же младший бит 50% времени; чтобы увеличить нашу эффективность, мы бы изначально выбрали большой N

Я не вижу, как использовать большее значение N сделает результат более надежным - все-таки можно ожидать, что половина генерируемых хэшей будет нечетными числами. Разве не имеет смысла выбирать несколько большее количество бит?

Например, почему бы не сэмплировать биты 0, 3 и 16? т.е. hash & 41,

Возможно, существует лучший форум по Stack Exchange для этого вопроса, но я не смог это установить.

0 ответов

Другие вопросы по тегам