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

8.5. Упражнения 365

C-8.15 Покажите, что для любого n есть последовательность вставок в куче это пере -

печатные листыW (n регистрируют n), время, чтобы обработать. C-8.16 Обеспечьте оправдание границ времени в Таблице 8.1. C-8.17 Развивают алгоритм, который вычисляет kth самый маленький элемент ряда n

отличные целые числа в O (n + k регистрируют n), время.

C-8.18 предположим внутренние узлы двух двоичных деревьев, T1 и T2 соответственно,

держите пункты, которые удовлетворяют собственность заказа кучи. Опишите метод для объединения этих двух деревьев в дерево T, чьи внутренние узлы держат союз пунктов в T1 и T2 и также удовлетворяют собственность заказа кучи. Ваши алгоритмы должны бежать вовремя O (h1 + h2), где h1 и h2 - соответствующие высоты T1 и T2.

C-8.19 Дайте альтернативный анализ восходящего строительства кучи, показав

это, для любого положительного целого числа h,åh=1 (i/2i) является O (1). я

C-8.20 Позвольте T быть кучей, хранящей n ключи. Дайте эффективный алгоритм для сообщения

все ключи T, которые меньше, чем или равны данному ключу вопроса x (который находится не обязательно в T). Например, учитывая кучу рисунка 8.3 и ключа вопроса x = 7, алгоритм должен сообщить 4, 5, 6, 7. Обратите внимание на то, что о ключах не должны сообщать в сортированном заказе. Идеально, Ваш алгоритм должен управлять в O (k) временем, где k - число ключей, сообщил.

C-8.21 Дайте дополнительное описание оперативного алгоритма вида кучи, который использует

стандартный компаратор вместо обратного.

C-8.22 Опишите эффективные алгоритмы для выполнения операций, удаляют (e) на

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

C-8.23 Позвольте S быть рядом n пункты в самолете с отличным целым числом x-и y-

координаты. Позвольте T быть полным двоичным деревом, хранящим пункты от S в его внешних узлах, таких, что пунктами заказывают слева направо в - мнущиеся x-координаты. Для каждого узла v в T, позвольте S (v), обозначают подмножество S, состоящего из пунктов, сохраненных в поддереве, внедренном в v. Для корня r T, определите вершину (r), чтобы быть пунктом в S = S(r) с максимальной y-координатой. Для любого узла v, определите вершину (r), чтобы быть пунктом в S с самой высокой координатой y-в S (v), который не является также самой высокой y-координатой в S (u), где u - родитель v в T (если такой пункт существует). Такая маркировка превращает T в приоритетное дерево поиска. Опишите линейно-разовый алгоритм для того, чтобы превратить T в приоритетное дерево поиска.

Проекты

P-8.1 Обобщите структуру данных Кучи Раздела 8.3 от двоичного дерева до

k-ary дерево, для произвольного k³ 2. Изучите относительные полезные действия

366

P-8.2 P-8.3

P-8.4

P-8.5

P-8.6

P-8.7

Глава 8. Кучи и Приоритетные Очереди, заканчивающиеся структура данных для различных ценностей k, вставляя и удаляя большое количество беспорядочно произведенных ключей в каждую структуру данных. Дайте C ++ внедрение приоритетной очереди, основанной на несортированном списке. Развейте C ++ внедрение приоритетной очереди, которая основана на куче и поддерживает основанные на локаторе функции. Осуществите оперативный алгоритм вида кучи. Сравните его продолжительность с тем из стандартного вида кучи, который использует внешнюю кучу. Осуществите основанную на куче приоритетную очередь, которая поддерживает следующий addi-tional операция в линейное время:

replaceComparator (c): Замените текущий компаратор c. После изменения компаратора должна будет быть реструктурирована куча. (Намек: Используйте восходящий строительный алгоритм кучи.) Пишут программу, которая может обработать последовательность запаса, покупают и распоряжения о продаже, как описано в Упражнении C-8.1. Одно из главных применений приоритетных очередей находится в операционных системах - для планирования рабочих мест на центральном процессоре. В этом проекте Вы должны построить программу, которая намечает моделируемые рабочие места центрального процессора. Ваша программа должна бежать в петле, каждое повторение которой соответствует интервалу времени для центрального процессора. Каждая работа

назначен приоритет, который является целым числом между-20 (самый высокий приоритет)

и 19 (самый низкий приоритет), включительно. Из числа всех рабочих мест, ждущих, чтобы быть

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

Примечания к главе

Книга Нута по сортировке и поиску [57] описывает мотивацию и историю для вида выбора, вида вставки и алгоритмов вида кучи. Алгоритм вида кучи происходит из-за Уильямса [103], и линейно-разовый строительный алгоритм кучи происходит из-за Флойда [33]. Дополнительные алгоритмы и исследования для куч и изменения вида кучи могут быть найдены в статьях Бентли [12], Карлссон [20], Гоннет и Манро [38], Макдиармид и Рид [70], и Шаффер и Седгьюик [88]. Шаблон использования осведомленных о местоположении записей (также описанный в [39]), кажется, новый.

Глава

9

Хеш-таблицы, карты и списки пропуска

Содержание

9.1

Карты........................

.

.

.

368

9.1.1 Карта ADT................

.

.

..

369

9.1.2 C ++ интерфейс карты.............

.

.

..

371

9.1.3 STL наносят на карту Класс..............

.

.

..

372

9.1.4 Простое основанное на списке внедрение карты..

.

.

..

374

9.2

Хеш-таблицы....................

.

.

.

375

9.2.1 Множества ведра.................

.

.

..

375

9.2.2 Функции мешанины................

.

.

..

376

9.2.3 Кодексы мешанины..................

.

.

..

376

9.2.4 Функции сжатия............

.

.

..

380

9.2.5 Обращающиеся со столкновением схемы..........

.

.

..

382

9.2.6 Коэффициенты нагрузки и перефразирование.........

.

.

..

386

9.2.7 C ++ внедрение хеш-таблицы......

.

.

..

387

9.3

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

.

.

.

394

9.3.1 Заказанные столы поиска и двоичный поиск..

.

.

..

395

9.3.2 Два применения заказанных карт......

.

.

..

399

9.4

Пропустите списки......................

.

.

.

402

9.4.1 Поиск и операции по обновлению в списке пропуска

.

.

..

404

9.4.2 Вероятностный анализ пропуска перечисляет ...

.

.

..

408

9.5

Словари.....................

.

.

.

411

9.5.1 Словарь ADT.............

.

.

..

411

9.5.2 C ++ внедрение словаря......

.

.

..

413

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

.

.

..

415

9.6

Упражнения......................

.

.

.

417