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

9.3. Заказанные карты 401

Поддержание набора максимумов с заказанной картой

Мы можем сохранить компанию пар максимумов в заказанной карте, M, заказанный стоимостью, так, чтобы стоимость была ключевым полем, и работа (скорость) является областью стоимости. Мы можем тогда осуществить операции, добавляют (c, p), который добавляет новую пару работы стоимости (c, p), и лучший (c), который возвращает лучшую пару со стоимостью в большей части c, как показано в Кодовых Фрагментах 9.19 и 9.20.

Алгоритм, лучший (c):

Вход: стоимость c Продукция: пара работы стоимости в M с самой большой стоимостью, меньше чем или равной

c, или специальный конец стража, если нет такой пары

возвратите M.  oorEntry (c)

Кодовый Фрагмент 9.19: лучшее () функция, используемая в поддержании класса ряд макс. - я иду в осуществленный с заказанной картой M.

Алгоритм добавляет (c, p):

Вход: пара работы стоимости (c, p) Продукция: Ни один (но M будет иметь (c, p) добавленный к набору работы стоимости

пары)

e к M.  oorEntry(c)

если e = заканчиваются тогда

если e.value ()> p тогда

самая великая пара со стоимостью в большей части c

возвратитесь (c, p) доминируется, поэтому не вставляйте его в M

e ¬ M.ceilingEntry(c) Следующая пара со стоимостью, по крайней мере, c

Удаляют все пары, которые являются во власти (c, p)

в то время как e = конец и e.value () <p делают

M.erase (e.key ()) Эта пара во власти (c, p)

e ¬ M.higherEntry(e.key ()) Следующая пара после e

M.put (c, p) Добавляют пару (c, p), над которым не доминируют

Кодовый Фрагмент 9.20: добавление (c, p) функция, используемая в классе для поддержания ряда максимумов, осуществлено с заказанной картой M.

К сожалению, если мы осуществляем M, использующий какую-либо из структур данных, описанных выше, он приводит к плохой продолжительности для вышеупомянутого алгоритма. Если с другой стороны мы осуществляем M использование списка пропуска, который мы описываем затем, то мы можем выступить лучший (c) вопросы в O (зарегистрируйте n), ожидаемое время и добавляет (c, p) обновления в O ((1 + r) регистрируются, n) ожидал время, где r - удаленное число очков.

402 Глава 9. Хеш-таблицы, карты и списки пропуска

9.4 Пропустите Списки

Интересная структура данных для того, чтобы эффективно понять заказанную карту ADT является списком пропуска. Эта структура данных делает случайный выбор в подготовке записей таким способом, которые ищут и обновляют времена, O (зарегистрируйте n), в среднем, где n - число записей в словаре. Интересно, понятие средней сложности времени, используемой здесь, не зависит от распределения вероятности ключей во входе. Вместо этого это зависит от использования генератора случайных чисел во внедрении вставок, чтобы помочь решить, куда поместить новый вход. Продолжительность усреднена по всем возможным исходам случайных чисел, используемых, вставляя записи.

Поскольку они используются экстенсивно в компьютерных играх, криптографии и com-моделированиях короткой клюшки для гольфа, функции, которые производят числа, которые могут быть рассмотрены, поскольку случайные числа встроены в большинство современных компьютеров. Некоторые функции, вызванные псевдо - генераторы случайных чисел, производят как будто случайные числа, начинающиеся с начального семени. Другие функции используют устройства аппаратных средств, чтобы извлечь «истинные» случайные числа из природы. В любом случае мы предполагаем, что у нашего компьютера есть доступ к числам, которые достаточно случайны для нашего анализа.

Главное преимущество использования рандомизации в структуре данных и дизайне алгоритма состоит в том, что структуры и функции, что результат обычно прост и эффективен. Мы можем создать простую рандомизированную структуру данных, названную списком пропуска, у которого есть те же самые логарифмические границы времени для поиска, как достигнут двойным алгоритмом поиска. Тем не менее, границы ожидаются для списка пропуска, в то время как они - границы худшего случая для двойного поиска в справочной таблице. С другой стороны, пропустите списки, намного быстрее, чем справочные таблицы для обновлений карты.

Список S пропуска для карты M состоит из ряда списковS0, S1..., Sh. Каждый список

Си хранит подмножество записей M, сортированного, увеличивая ключи плюс записи с

два специальных ключа, обозначенные- ¥ и + ¥, где- ¥ меньше, чем каждое возможное

ключ, который может быть вставлен в M и + ¥, больше, чем каждый возможный ключ, который может быть

вставленный в M. Кроме того, списки в S удовлетворяют следующее:

Список S0 содержит каждый вход карты M (плюс специальные записи с ключами

- ¥ и + ¥)

• Поскольку я = 1..., h- 1, перечислите Сайа, содержит (в дополнение к- ¥ и + ¥) беспорядочно

произведенное подмножество записей в списке Сай 1

• Список Sh содержит только- ¥ и + ¥.

Пример списка пропуска показывают в рисунке 9.9. Это обычно, чтобы визуализировать список S пропуска со списком S0 в основании и перечисляет S1..., Sh выше его. Кроме того, мы обращаемся к h как

высота списка S пропуска.