Я изучаю методы хэширования для поиска и поиска информации. Но прежде, чем я углубится, я смущен определенными понятиями о хэш-функциях вообще.Основные понятия хэширования векторов
Скажем, у меня есть вход x
, который является вектором значений с плавающей запятой, xi = [x_1,x_2,...,x_L]
. Размер вектора L
. Есть N
такие векторы, также называемые примерами, X = [x1,x2,..,x_N]
. Учитывая вектор запроса p
, мне нужно найти ближайший/ближайший пример, который соответствует запросу. Просматривая несколько материалов для чтения, самая простая (но неэффективная) хеширующая функция - h(x) = x mod M
, когда размер таблицы равен M=10
(скажем).
x mod M
является остатком x
при делении на M
, то x mod M
всегда будет находиться в диапазоне от 0
и M -1
, всегда можно сопоставить целое с одним из M
слотов. Мои вопросы:
Вопрос 1: Модуль выполняется по размеру стола. Однако, если каждый образец имеет длину L
и есть такие N
такие образцы, то какое число по модулю представляет? Будет ли h(x) = x mod vector length
или h(x) = x
mod number of examples
?
В приложениях для криптографии обычно выполняется мода 256, поскольку каждый блок имеет размер 8 бит. Это означает, что модуль берется по длине вектора? Пожалуйста, исправьте меня, если ошибаетесь.
Вопрос 2: Я должен преобразовать числа с плавающей запятой в целые числа, потому что многие примеры показывают, что вход представляет собой либо значение ASCII, либо целое число.
Вопрос 3: Если для аргументации хэш-функция имеет значение h(x) = 2*x mod 1
, то это приведет к получению числа с плавающей запятой в диапазоне [0,1]
. Я могу преобразовать его в целое число, используя H(x) = round(h(x))
. Для примера сообщения x
, если он разделен на k
, блокирует каждую длину такой же длины L
, мне нужны k
такие хэш-функции? Любые предложения для хэш-функции для этого примера. Спасибо.
Благодарим вас за ответ, однако все еще неясно, касаются операции с модулем и размера стола. Я использую Matlab, и у меня есть база данных объектов. Каждый объект является вектором признаков, массивом длины L. В моем вопросе я сказал, что каждый вектор имеет длину L. Итак, у меня есть матрица, где строки N являются объектами данных (точками данных) и столбцом ach является функцией , Есть L таких столбцов, поэтому длина массива объекта равна L. Итак, будет ли размер таблицы N или L? –
Это было бы не так! Покрутите мою руку, и я скажу размер N для каждого из ваших объектов данных, НО причина, по которой вы хотите, чтобы таблица была длиннее, чтобы избежать столкновения с другими объектами. В вашем столе будут пустые места, и все в порядке, вот как они работают! Но идея состоит в том, чтобы получить какое-либо количество вообще, когда вы хешируете свой объект данных, тем более диким, тем лучше! Как можно более случайным образом, чтобы вы могли использовать оператор modulo с размером вашей таблицы (что-то вроде N * 2), так что независимо от того, насколько сумасшедший ваш номер, вы вернете индекс в диапазоне вашей таблицы , –
Если вы задаетесь вопросом о самом модуле оператора, '500% 11' в основном говорит:« Разделите 500 на 11 столько раз, сколько сможете, и ответ будет тем, что остается, что нельзя разделить », в этом случае 5. Потому что '495/11 = 0', и у нас есть остаток 5! Таким образом, вы можете увидеть это, если ваша длина таблицы равна 11, потому что она всегда дает нам число от 0 до 10 –