Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР №1.docx
Скачиваний:
8
Добавлен:
07.12.2018
Размер:
243.68 Кб
Скачать

Алгоритмы Основные принципы алгоритма виртуального хеширования.

VH1 показывает, что VH может обеспечить хеширование при работе с файлом не предполагаемое для сих пор. Предложение о "компромиссе" позволяет определять другие полезный VH. Мы покажем теперь, как такой VН может быть разработано. Алгоритмы разделения могут быть лучше видны как две почти независимые операции разделения :

(1) Выбираются ключи, которые продолжают быть отмечены на m.

(2) Адресация других ключей.

Результаты этих операций могут представляться как значения соответствующих функций, как хеширование представленное вычисляющей функцией хеширования.

Как аргументы этих функций можно выбрать c,m и i, где i - координата узла m, как адрес в SG структурном графе. Если разделение c m, то согласно определению графа i увеличиться с I. Значение первой функции тогда показывает должно ли О быть перемещено и если такое значение второй указывает адрес передислокация. Функция hollowing может использоваться

для (1):

Let a: C XN XN + {O, ll. Let Сm o # 0

набор ключей отмеченных на m Let Сm i: i = I,

23, , **, - набор ключей, отмеченных на m после i-го разделения.

Мы предполагаем что:

c m i - {C.-C E c m>i-l A afc,I,m)=11

Мы называем функцию относительности. Для (2) мы можем предположить, что новый адрес - значения q (c, i, m) некоторой передислокации функционирующего q.

Несколько комбинаций a и q удобны, например следующий:

- Let 6(m, m’) = 1, если m = m' и 6 (m, m’) = 0 иначе (6 - функция KRONECRER). Let INT (x), обозначает часть целого числа x 6 R.

Let RN nk (c) E [O, lC - k-ое число, выбранное генератором случайных чисел с основаниеv c.

Формулирование:

al(c, i, m) = 6 (O, INT (2 z x R&(“) + ‘(C))) i=l, 2..

4 (c, i, m) = m+2 Z (m) +i-l N.

Разделение (A) нужно he чтобы хешировать разделением. Замечательное свойство вышеупомянутого разделения состоит в том, чтобы иметь те же самые свойства как (A), но с каждыми функциями хешировать

как ho. Также это разделение может быть более случайным чем (A).

Первичные адреса могут быть найдены алгоритмом, который определяет последовательное расположение узлов дорожки s (c, g) вычисления (i) ho, (ii) для любого (m, i-l) :

во-первых (c, i, m), then g (c, 'i, m) if (c, i, m) = 0.

Иногда может быть интересно определить a и q в форме, зависящей от j. Например, интересный класс алгоритмов разделения следует из следующих определений :

- Let ho: C-t (O, l..., N-11. Let 'Nj) m 1 2

последовательность Lf адресов таких что Nj +, > N j.

Мы называем dj = {Ñ, Ñ +,*. *> Nj+l-11 j-того расширение.

Let t =card d.. Мы принимаем что, если c отмечен на адресе m поддерживающий j-ое

разделение и разделение перемещает c по адресу передислокации:

qj = R (m, tj) + Nj

- Let z,y и x, y 2 0. Let v (z, y) = 1,

if r <y and y (r, F) = 0 else

Let Pj ¶tj / (Nj+tj).

Мы определяем значение по формуле:

aj (c) = y (1 - pj, Wti (c, I>>.

Если мы выбираем t 4 для любого j и мы допускаем предположения (1) (3) , мы получаем VH, которое имеет такое же исполнение как VHl. Однако, если t<#; мы можем практически получить так же мало выборов как мы желаем. Но, затем A становится выше, и мы нуждаемся в большем количестве разделений и больше места хранения для B.

Использование разделения следует из предположений :

- по способу распределения хранения.

- по выбору коллизий, которые должны быть решены разделением.

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

При разделение для любого столкновения n становится лучше. Но это ведет теперь к неэффективности, так как каждое распределение удваивает число ведер.

Проблема этого хеширования состоит в том, что создается два ведра, которые являются смежными на диске, обычно не имеют смежные первичные адреса. Однако стабильность A и лучшего теоретического lll(r) для разделения функцией хеширования, делая этим виртуальное хеширование также очень интересным.