2010-08-06 3 views
2

Я ищу «плохую» хеш-функцию: Я хотел бы хэш-строки и поместить похожие строки в одно ведро.Хеш-функция, которая хэширует аналогичные строки в том же ведре

Можете ли вы дать мне подсказку, с чего начать исследования? Некоторые методы или имена алгоритмов ...

+0

Куда направили ваше исследование этого конкретного вопроса? – JRun

ответ

-1

Это зависит от того, что вы подразумеваете под «подобной строкой»?

Но если вы ищете такой плохой, вы должны построить его самостоятельно.

Пример:

  • вы можете создать 10 ведер (от 0 до 9) и групповых струн от ихнего длины мод 10

  • используйте устройство зЬгстра() как функцию и группы их различиями с определенной строкой

3

Ваша проблема заключается в том, не простой. Две идеи:

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

Это похоже на то, что делает jpeg compression: Бросьте детали и просто оставьте важные вещи. Если у вас есть два почти одинаковых изображения, и вы jpeg их очень сильно сжимаете, вы обычно получаете одинаковый результат.

pHash использует метод, подобный этому.

Опять же, это будет довольно сложный способ сделать это.

Вторая идея: minHash

Идея minHash является то, что вы выбираете некоторые маркеры, которые могут быть одинаковыми, если исходные данные одинаковы. Затем вы вычисляете вектор для выходов всех маркеров. Если два входа имеют одинаковые векторы, то входы аналогичны.

Например, подсчитайте, сколько раз в тексте появляется слово «the». Если это равно, 0, если это странно, 1. Теперь подсчитайте, сколько раз в тексте появляется слово «математика». Опять же, 0 для четного, 1 для нечетных. Сделайте это для многих слов.

Теперь вы обрабатываете все тексты, и каждый из них дает вам выход типа «011100010101» или что-то еще. Если два текста похожи, то они будут иметь аналогичные строки вывода, отличающиеся только 1 или двумя битами. Вы можете использовать multi-variate partition trie (MVP) для эффективного поиска выходных данных.

Это тоже может быть излишним для вашей проблемы.