Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

9.5. Словари 415

ведро до или прибывающий в конец ведра или сталкивающийся с входом с a

ключ различной стоимости. Позвольте p быть этой стоимостью iterator. Мы возвращаем диапазон iterator (b, p).

/* HashDict K, V, H:: */ //находят все записи с k

Диапазон findAll (константа K& k)

Iterator b = искатель (k);

Iterator p = b;

/ / l o o k k

в то время как (! endOfBkt (p) && (*p) .key () == (*b) .key ())//находят затем неравный ключ

+ + p;

возвратите Диапазон (b, p); //возвращают диапазон положений

Кодовый Фрагмент 9.27: внедрение словаря функционирует findAll.

9.5.3 Внедрения с осведомленными о местоположении записями

Как с картой ADT, есть несколько возможных способов, которыми мы можем осуществить dic-

tionary ADT, включая незаказанный список, хеш-таблицу, заказанную таблицу поиска или список пропуска. Когда мы сделали для приспосабливаемых приоритетных очередей (Раздел 8.4.2), мы можем также использовать осведомленные о местоположении записи, чтобы ускорить продолжительность для некоторых операций в словаре. В удалении осведомленного о местоположении входа e, например, мы могли просто пойти непосредственно в место в нашей структуре данных, где мы храним e и удаляем его. Мы могли осуществить осведомленный о местоположении вход, например, увеличив наш класс входа с частной переменной местоположения и защитили местоположение функций () и setLocation (p), которые возвращают и устанавливают эту переменную соответственно. Мы были бы тогда пере - печатный лист, который переменная местоположения для входа e будет всегда отсылать к положению e или индексу в структуре данных. Мы должны были бы, конечно, обновить эту переменную любое время, мы переместили вход, следующим образом.

Незаказанный список: В незаказанном списке, L, осуществляя словарь, мы можем

поддержите переменную местоположения каждого входа e, чтобы указать на положение e в

основной связанный список для L. Этот выбор позволяет нам выступать, стирают (e) как L.erase (e.location ()), который бежал бы в O (1) время.

Хеш-таблица с отдельным формированием цепочки: Рассмотрите хеш-таблицу со множеством ведра

A и мешанина функционируют h, который использует отдельное формирование цепочки для обработки столкновений.

Мы используем переменную местоположения каждого входа e, чтобы указать на положение e в списке L, осуществляющем список A [h (k)]. Этот выбор позволяет нам выполнять стирание (e) как L.erase (e.location ()), который бежал бы в постоянное ожидаемое время.

Заказанный стол поиска: В заказанном столе, T, осуществляя словарь, нас

должен поддержать переменную местоположения каждого входа e, чтобы быть индексом e в T.

Этот выбор позволил бы нам выступать, стирают (e) как T.erase (e.location ()).

416

Глава 9. Хеш-таблицы, Карты и Списки Пропуска (Вспоминают, что местоположение () теперь возвращает целое число.) Этот подход бежал бы быстро, если бы вход e был сохранен около конца t.

Список пропуска: В списке пропуска, S, осуществляя словарь, мы должны поддержать

переменная местоположения каждого входа e, чтобы указать на положение e в нижнем уровне

из S. Этот выбор позволил бы нам пропускать шаг поиска в нашем алгоритме для выполнения, стирают (e) в списке пропуска.

Мы суммируем выполнение удаления входа в словаре с местоположением - осведомленные записи в Таблице 9.4.

Список Хеш-таблица Стол поиска Пропустите Список O (1) O (1) (ожидаемый) O (n) O (регистрируют n) (ожидаемый)

Таблица 9.4: Исполнение стереть функции в словарях осуществлено с осведомленными о местоположении записями. Мы используем n, чтобы обозначить число записей в словаре.