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

Поведение vh1

Коэффициент загрузки

Предположение (2) подразумевает, что для любого x > αmaxbN/2, мы имеем α > αmin = amax/2. α достигает минимума после нового распределения и затем растет с x до следующего распределения. Согласно (3), это распределение имеет место, когда α > αmax и появилась первая коллизия. Если α­max ≈ 0.9 , то очень вероятно создание коллизии для новой вставки, и, таким образом, максимумы α будут практически равны αmax . Так как bN может быть небольшим, то значит, что практически для каждого x мы имеем αmax : 0.45 < α <= 0.9 . Это неравенство может быть справедливо даже для удалений, так как они могут представлять операцию, обратную расщеплению.

Доступ

По отношению к данными к проблемам может привести только размер битовой таблицы В. Однако, нам нужно относительного немного памяти для В, даже если Nb очень маленькое, а x очень большой. Например, для обычного b , скажем b = 20, N = 7 и αmax = 0.9 означает, что мы можем вставить до 0.9 * 20 * 7 * 213 = 1 032 132 записей за счет 7.2 Кб для В. Это значит, что для типичного ядра и x, не нужно обращаться к диску, чтобы вычислить адрес. Это обстоятельство принимается во внимание и дальше.

Рис. 3 показывает среднее количество обращений к диску посредством удачного поиска как функцию от количества вставок x. Кривые следуют из моделирования для N = 7, αmax = 0.9 и b = 1, 5, 20, 50. Для каждого b файл достигнул уровня 12, т.е. количество Nb записей, которые могут быть найдены за один доступ классическим хешированием, превысило на 2048 (211) ! Кривые нарисованы в линейном масштабе для каждого интервала x так, что αmin < αj αmax и в масштабе log2 , когда возрастает j. Фактически, любая такая область есть множество x , которые предоставляет файл с уровнем j. Некоторые значения для уровня j = 10 представлены таблицей 1.

Рис.3 – Среднее количество обращений к диску посредством удачного поиска после x вставок. Во всех случаях хеширование, выбранное при создании файла, могло сохранить 7b прямых (первичных | начальных) записей. Вставки увеличили это число почти на 2048. Жирная линия показывает уровень j = 10, детально отраженный в таблице 1:

Получается следующее:

  • (x) начинается переходным состоянием, и продолжается устойчивым состоянием, где периодическая функция от α. Уровень файла, соответствующий началу устойчивого состояния, уменьшается, когда растет b.

  • наихудший случай (x) соответствует b = 1. Однако, эта производительность все еще превосходна, задавая для любого x, (x) < 1.55 . Удивительно, в устойчивом состоянии (x) фактически константа. Оба свойства обязаны тому факту, что b = 1, пропорция между переполнениями, которые несет VH1, и α максимальна.

  • доступ становится лучше, когда растет b. С одной стороны (таблица 1) наихудшее значение (x) уменьшается (для b = 5 мы уже имеем (x) < 1.26). С другой стороны, пропорция между α , такой что (α)≈1, возрастает. Любопытно, что наибольшая амплитуда (α) достигается для b = 10. Следует также обратить внимание, что для любого b наихудшее значение (x) практически равно (α=0.9) классического хеширования, в котором для разрешения коллизий используется метод «отдельного формирования цепочки».

  • Улучшение доступа понятно, так как когда растет b:

  • любая hj создает меньше коллизий, когда используется для вставок, и обходит переполнения лучше, когда используется для расщеплений.

  • α соответствует большему количеству коллизий, и, таким образом, расщепления должны следовать более близко за любым локальным максимумом (x).

  • Пусть k – количество уровней j , таких, что как минимум один блок будет иметь уровень j . Это значит, что для l > k нет никаких блоков уровня j ≤ l-k , и, таким образом, первые 2l-k+1N–N биты таблицы B равны 1. Зная k , мы можем обойти эти биты, и, таким образом, размер B уменьшится. Если k = 1 , то нам вовсе не нужна таблица B , так как значения l , в этом случае, будет достаточно для хеширования.

Таблица 1 дает kmin и kmax для j = 10, т.е. для устойчивого состояния. Оба значения уменьшаются, когда растет b. Но по таблице это не значит, что пропорция α , где k kmin также уменьшается.

В особенности для b = 50, мы имеем kmin = 1 для α [0.77 , 0.9] . Это означает, что в устойчивом состоянии мы не нуждаемся в таблице B для 30% возможных x. Кроме того, только 10% блоков имеют уровень l1 , если α > 0.57 , т.е. 90% битов В равны 1. Так как такие строки битов могут быть легко уплотнены в намного меньшее количество битов, то это значит, что для 73% возможных x нам надо либо намного меньше, чем половина В , либо В не нужна вовсе. Так как kmax = 2 для остальных x , то это значит, что для оставшихся 27% x нам нужно и вовсе только ¾ В .

  • через ’ мы обозначаем среднее число доступов на неудачный поиск. Моделирование показывает, что для ’ мы также имеем переходное и устойчивое состояние. Таблица 1 указывает минимальное и максимальное значение ’ для 10-ого уровня. Оба хуже, чем соответствующие значения для . Стоит также обратить внимание, что самое плохое значение ’ увеличивается с b. Причина состоит в том, что ’ , соответствующий α = 0.9 , возрастает в случае классического хеширования, в котором для разрешения коллизий используется метод «отдельного формирования цепочки».

Наличие устойчивого состояния подразумевает, что остается близким к 1 для любого x , до тех пор, пока В в памяти. Таким образом, с обычным ядром мы можем использовать j ≥ 12, т.е. мы можем вставить миллионы записей, а будет все еще оставаться близким к 1. Так как α может оставаться высоким даже для очень маленького x, то это значит, что VH1 может эффективно работать с почти любым количеством записей. В природе нет классического хеширования с таким свойством.