Jump to content

Динамическое идеальное хеширование

В информатике динамическое идеальное хеширование это метод программирования для разрешения коллизий в хеш-таблицы структуре данных . [1] [2] [3] Хотя он требует больше памяти, чем его аналоги с хеш-таблицами, [ нужна ссылка ] этот метод полезен в ситуациях, когда необходимо выполнять быстрые запросы, вставки и удаления для большого набора элементов.

Подробности

[ редактировать ]

Статический случай

[ редактировать ]

Схема ФКС

[ редактировать ]

Проблема оптимального статического хеширования была впервые решена Фредманом, Комлосом и Семереди. [4] В своей статье 1984 г. [1] они подробно описывают схему двухуровневой хеш-таблицы, в которой каждый сегмент хеш-таблицы (первого уровня) соответствует отдельной хеш-таблице второго уровня. Ключи хешируются дважды: первое значение хеш-функции сопоставляется с определенным сегментом в хеш-таблице первого уровня; второе значение хеш-функции дает позицию этой записи в хеш-таблице второго уровня этого сегмента. Таблица второго уровня гарантированно не имеет коллизий (т.е. идеальное хеширование ) при построении. стоимость поиска гарантированно составит O(1) Следовательно, в худшем случае . [2]

В статическом случае нам заранее дается набор из x записей, каждая из которых имеет уникальный ключ. Фредман, Комлос и Семереди выбирают хеш-таблицу первого уровня с размером ведра. [2]

Для построения x записей разделяются на сегменты s с помощью хеш-функции верхнего уровня, где . Затем для каждого сегмента с k записями выделяется таблица второго уровня с слоты, а его хэш-функция выбирается случайным образом из универсального набора хеш-функций , чтобы она не имела коллизий (т. е. идеальная хеш-функция ) и сохраняется вместе с хеш-таблицей. Если случайно выбранная хеш-функция создает таблицу с коллизиями, новая хеш-функция выбирается случайным образом до тех пор, пока не будет гарантирована таблица без коллизий. Наконец, с помощью хэша без коллизий k записей хэшируются в таблицу второго уровня.

Квадратичный размер space гарантирует, что случайное создание таблицы с коллизиями происходит нечасто и независимо от размера k , обеспечивая линейное амортизированное время построения. Хотя каждая таблица второго уровня требует квадратичного пространства, если ключи, вставленные в хеш-таблицу первого уровня, распределены равномерно , структура в целом занимает ожидаемое пространство. малы пространство, так как размеры ведра с высокой вероятностью . [1]

Хэш-функция первого уровня специально выбирается таким образом, чтобы для конкретного набора x уникальных значений ключей общее пространство T , используемое всеми хеш-таблицами второго уровня, ожидалось. космос, а точнее . Фредман, Комлос и Семереди показали, что при наличии универсального семейства хеш-функций по крайней мере половина этих функций обладает этим свойством. [2]

Динамический случай

[ редактировать ]

Дитцфельбингер и др. представить алгоритм динамического словаря, который при постепенном добавлении в словарь набора из n элементов, запросы на членство всегда выполняются за постоянное время и, следовательно, в худшем случае общий объем требуемого хранилища составит (линейный) и ожидаемое амортизированное время вставки и удаления ( амортизированное постоянное время ).

В динамическом случае, когда ключ вставляется в хеш-таблицу, если его запись в соответствующей подтаблице занята, то говорят, что происходит коллизия, и подтаблица перестраивается на основе нового общего количества записей и случайно выбранной хэш-функции. Поскольку коэффициент загрузки таблицы второго уровня поддерживается низким , восстановление происходит нечасто, а амортизированная ожидаемая стоимость вставок составляет . [2] Аналогично, амортизированная ожидаемая стоимость удалений равна . [2]

Кроме того, в динамическом случае неизвестны конечные размеры таблицы верхнего уровня или любой из подтаблиц. Один из методов поддержания ожидаемого пространство таблицы должно вызывать полную реконструкцию, когда произошло достаточное количество вставок и удалений. По результатам Дитцфельбингера и др., [2] до тех пор, пока общее количество вставок или удалений превышает количество элементов на момент последнего построения, амортизированная ожидаемая стоимость вставки и удаления остается с учетом полной перефразировки.

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

Реализация псевдокода

[ редактировать ]
function Locate(x) is
    j := h(x)
    if (position hj(x) of subtable Tj contains x (not deleted))
        return (x is in S)
    end if
    else 
        return (x is not in S)
    end else
end

Вставлять

[ редактировать ]

Во время вставки новой записи x в j счетчик глобальных операций count увеличивается.

Если x существует в j , но помечен как удаленный, то отметка удаляется.

Если x существует в j или в подтаблице T j и не помечен как удаленный, то говорят, что произошел конфликт, и j й Таблица второго уровня T j сегмента перестраивается с использованием другой случайно выбранной хеш-функции h j .

function Insert(x) is
    count = count + 1;
    if (count > M) 
        FullRehash(x);
    end if
    else
        j = h(x);
        if (Position hj(x) of subtable Tj contains x)
            if (x is marked deleted) 
                remove the delete marker;
            end if
        end if
        else
            bj = bj + 1;
            if (bj <= mj) 
                if position hj(x) of Tj is empty 
                    store x in position hj(x) of Tj;
                end if
                else
                    Put all unmarked elements of Tj in list Lj;
                    Append x to list Lj;
                    bj = length of Lj;
                    repeat 
                        hj = randomly chosen function in Hsj;
                    until hj is injective on the elements of Lj;
                    for all y on list Lj
                        store y in position hj(y) of Tj;
                    end for
                end else
            end if
            else
                mj = 2 * max{1, mj};
                sj = 2 * mj * (mj - 1);
                if the sum total of all sj ≤ 32 * M2 / s(M) + 4 * M 
                    Allocate sj cells for Tj;
                    Put all unmarked elements of Tj in list Lj;
                    Append x to list Lj;
                    bj = length of Lj;
                    repeat 
                        hj = randomly chosen function in Hsj;
                    until hj is injective on the elements of Lj;
                    for all y on list Lj
                        store y in position hj(y) of Tj;
                    end for
                end if
                else
                    FullRehash(x);
                end else
            end else
        end else
    end else
end

Удаление x просто помечает x как удаленное без удаления и увеличивает счетчик . В случае как вставок, так и удалений, если счетчик достигает порога M , вся таблица перестраивается, где M — некоторое постоянное кратное размеру S в начале новой фазы . Здесь фаза означает время между полными перестройками. Обратите внимание, что здесь -1 в «Delete( x )» представляет собой представление элемента, который не входит в набор всех возможных элементов U .

function Delete(x) is
    count = count + 1;
    j = h(x);
    if position hj(x) of subtable Tj contains x
        mark x as deleted;
    end if
    else 
        return (x is not a member of S);
    end else
    if (count >= M)
        FullRehash(-1);
    end if
end

Полная перестройка

[ редактировать ]

Полная перестройка таблицы S сначала начинается с удаления всех элементов, помеченных как удаленные, а затем установки следующего порогового значения M в некоторое постоянное кратное размеру S . Хэш-функция, которая делит S на s ( M ) подмножеств, где размер подмножества j равен s j , повторно выбирается случайным образом до тех пор, пока:

Наконец, для каждой подтаблицы T j хеш-функция h j повторно случайно выбирается из H sj до тех пор, пока h j не станет инъективной для элементов T j . Ожидаемое время полной перестройки таблицы S размера n равно O( n ). [2]

function FullRehash(x) is
    Put all unmarked elements of T in list L;
    if (x is in U) 
        append x to L;
    end if
    count = length of list L;
    M = (1 + c) * max{count, 4};
    repeat 
        h = randomly chosen function in Hs(M);
        for all j < s(M) 
            form a list Lj for h(x) = j;
            bj = length of Lj; 
            mj = 2 * bj; 
            sj = 2 * mj * (mj - 1);
        end for
    until the sum total of all sj ≤ 32 * M2 / s(M) + 4 * M
    for all j < s(M) 
        Allocate space sj for subtable Tj;
        repeat 
            hj = randomly chosen function in Hsj;
        until hj is injective on the elements of list Lj;
    end for
    for all x on list Lj 
        store x in position hj(x) of Tj;
    end for
end

См. также

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б с Фредман М.Л., Комлос Дж. и Семереди Э. 1984. Хранение разреженной таблицы с временем доступа в наихудшем случае 0 (1). J. ACM 31, 3 (июнь 1984 г.), 538-544 http://portal.acm.org/citation.cfm?id=1884#
  2. ^ Jump up to: Перейти обратно: а б с д и ж г час Дитцфельбингер М., Карлин А., Мельхорн К., Мейер ауф дер Хайде Ф., Ронерт Х. и Тарьян Р.Э. 1994. «Динамическое идеальное хеширование: верхняя и нижняя границы». Архивировано 4 марта 2016 г. на Wayback Machine . СИАМ Дж. Компьютер. 23, 4 (август 1994 г.), 738–761. http://portal.acm.org/citation.cfm?id=182370 дои : 10.1137/S0097539791194094
  3. ^ Эрик Демейн, Джефф Линд. 6.897: Расширенные структуры данных . Лаборатория компьютерных наук и искусственного интеллекта Массачусетского технологического института. Весна 2003 года.
  4. ^ Ага, Чи. «Универсальная конструкция по схеме ФКС» . Нью-Йоркский университет . Нью-Йоркский университет . Проверено 15 февраля 2015 г. [ постоянная мертвая ссылка ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 99c160390a07dacdf21aae1d29e4646a__1684224240
URL1:https://arc.ask3.ru/arc/aa/99/6a/99c160390a07dacdf21aae1d29e4646a.html
Заголовок, (Title) документа по адресу, URL1:
Dynamic perfect hashing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)