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

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

R-8.25 Дайте псевдокодовое описание нерекурсивного оперативного вида кучи algo-

rithm.

R-8.26 Группа детей хочет играть в игру, названную Немонополией, где в

каждый поворот игрок с большей частью денег должен дать половину его/ее денег игроку с наименьшим количеством суммы денег. Какая структура (ы) данных должна использоваться, чтобы играть в эту игру эффективно? Почему?

Креативность

C-8.1 Компьютерная система онлайн для запаса товаров должна обработать заказы

форма «покупает 100 акций в $x, каждый» или «продает 100 акций в $y каждый». Заказ покупки на $x может только быть обработан, если есть существующее распоряжение о продаже

с ценовым $y, таким образом, что y£ x. Аналогично, распоряжение о продаже за $y может только быть

обработанный, если есть существующий заказ покупки с ценовым $x, таким образом что x³ y.

Если покупка или распоряжение о продаже введены, но не могут быть обработаны, это должно ждать

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

C-8.2 Расширьте решение предыдущей проблемы так, чтобы пользователям разрешили

обновите цены за их покупку или распоряжения о продаже, которые должны все же быть обработаны.

C-8.3 Напишите компаратор для объектов целого числа, который определяет заказ, основанный на

число 1 с в двойном расширении каждого числа, так, чтобы я <j, если цифра - частота ошибок по битам 1 с в двойном представлении я - меньше, чем число 1 с в двойном представлении j.

C-8.4 Покажите, как осуществить стек ADT использование только приоритетной очереди и

одна дополнительная членская переменная.

C-8.5 Покажите, как осуществить (стандартную) очередь ADT использование только приоритета

очередь и одна дополнительная членская переменная.

C-8.6 Опишите, подробно, внедрение приоритетной очереди, основанной на a

сортированное множество. Покажите, что это внедрение достигает O (1) время для op-erations минута и removeMin и O (n) время для операционной вставки.

C-8.7 Опишите оперативную версию алгоритма вида выбора, который использует только

O (1) пространство для членских переменных в дополнение к самому входному множеству.

C-8.8 Принятие входа к проблеме сортировки дано во множестве A, описать

как осуществить алгоритм вида вставки, используя только множество A и, самое большее, шесть дополнительных (основной тип) переменные.

C-8.9 Принятие входа к проблеме сортировки дано во множестве A, описать

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

364

Глава 8. Кучи и Приоритетные Очереди, c-8.10 Описывают последовательность n вставок к куче, которая требуетw (n регистрируют n), время

обработать. C-8.11 Альтернативный метод для нахождения последнего узла во время вставки в a

куча T должна сохранить, в последнем узле и каждом внешнем узле T, указателя на внешний узел немедленно с его правой стороны от него (обертывающий к первому узлу в следующий более низкий уровень для самого правого внешнего узла). Покажите, как поддержать такой указатель в O (1) время за операцию приоритетной очереди, ADT, принимая T осуществлен как связанная структура.

C-8.12 Мы можем представлять путь от корня до данного узла двоичного дерева

средства двойной последовательности, где 0 означает, «идут к покинутому ребенку», и 1 означает, «идут к правильному ребенку». Например, путь от корня до узла, хранящего 8 в куче рисунка 8.3, представлен двойной последовательностью 101. Проектируйте O (зарегистрируйте n), разовый алгоритм для нахождения последнего узла полного двоичного дерева с n узлами, основанными на вышеупомянутом представлении. Покажите, как этот алгоритм может использоваться во внедрении полного двоичного дерева посредством связанной структуры, которая не держит ссылку на последний узел.

C-8.13 предположим двоичное дерево T раньше осуществляло кучу, может быть получен доступ, используя

только функции двоичного дерева ADT. Таким образом, мы не можем предположить, что T осуществлен как вектор. Данный подсказка к току последний узел, v, описывают эффективный алгоритм для нахождения точки вставки (то есть, новый последний узел) использующий просто функции интерфейса двоичного дерева. Убедитесь и обращайтесь со всеми возможными случаями, как иллюстрировано в рисунке 8.12. Какова продолжительность этой функции?

(a) (b)

Рисунок 8.12: Обновление последнего узла в полном двоичном дереве после операции добавляет или удаляет. Узел w является последним узлом, прежде чем операция добавит или после того, как операция удаляет. Узел z является последним узлом после того, как операция добавляет или прежде чем операция удалит.

C-8.14 Учитывая кучу T и ключ k, дайте алгоритм, чтобы вычислить все записи в

T с ключом, меньше чем или равным k. Например, учитывая кучу Фиги - ure 8.12 (a) и запрос k = 7, алгоритм должен сообщить о записях с ключами 2, 4, 5, 6, и 7 (но не обязательно в этом заказе). Ваш алгоритм должен бежать вовремя пропорциональный числу возвращенных записей.