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

494 Глава 10. Деревья поиска

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

C-10.1 Опишите модификацию к структуре данных дерева двоичного поиска, которая была бы

позвольте Вам находить средний вход, который является входом с разрядомn/2 ⌋ в a

дерево двоичного поиска. Опишите и модификацию и алгоритм для

нахождение медианы, принимающей все ключи, отлично.

C-10.2 Проектируйте изменение алгоритма TreeSearch для выполнения операции

findAll (k) в заказанном словаре, осуществленном с деревом двоичного поиска T и шоу, которым это управляет вовремя O (h + s), где h - высота T и s, является размером возвращенной коллекции.

C-10.3 Опишите, как выполнить операцию eraseAll (k), который удаляет весь

записи, ключи которых равняются k в заказанном словаре, осуществленном с деревом двоичного поиска T, и показывают, что этот метод бежит вовремя O (h + s), где h - высота T и s, являются размером возвращенного iterator.

C-10.4 Потяните схематическое из дерева AVL, таким образом, что сингл стирает операцию, мог

потребуйтеW (зарегистрируйте n), trinode restructurings (или вращения) от листа до корня, чтобы восстановить собственность баланса высоты.

C-10.5 Покажите, как выполнить операцию, eraseAll (k), который удаляет все записи

с ключами, равными K, в заказанном словаре, осуществленном с деревом AVL вовремя O (s регистрируют n), то, где n - число записей в карте и s, является размером возвращенного iterator.

C-10.6 Опишите изменения, которые должны были бы быть внесены в двоичный поиск

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

C-10.7 Если мы поддерживаем ссылку на положение крайнего левого внутреннего узла

дерево AVL, затем операция, первая (Раздел 9.3), может быть выполнена в O (1) время. Опишите, как внедрение других функций карты должно быть изменено, чтобы поддержать ссылку на крайнее левое положение.

C-10.8 Покажите, что любое двоичное дерево n-узла может быть преобразовано в любой другой n-узел

двоичное дерево используя O (n) вращения.

C-10.9 Позвольте M быть заказанной картой с n записями, осуществленными посредством

Дерево AVL. Покажите, как осуществить следующую операцию на M вовремя O (зарегистрируйте n + s), где s - размер возвращенного iterator.

findAllInRange (k1, k2): Возвратите iterator из всех записей в M с

ключ k таким образом, что k1£ k£ k2.

C-10.10 Позвольте M быть заказанной картой с n записями. Покажите, как изменить AVL

дерево, чтобы осуществить следующую функцию для M вовремя O (регистрируют n). countAllInRange (k1, k2): Вычислите и возвратите число из записей в M

с ключом k таким образом, что k1£ k£ k2.

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

C-10.11 Потяните косое дерево, T1, вместе с последовательностью обновлений, которые произвели

это, и красно-черное дерево, T2, на том же самом наборе десяти записей, таких, что пересечение перед заказом T1 совпало бы с пересечением перед заказом T2.

C-10.12 Покажите, что узлы, которые становятся неуравновешенными в дереве AVL во время

операция по вставке может быть непоследовательной на пути от недавно в - serted узел к корню.

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

операция removeAboveExternal выполнена в рамках выполнения стереть операции по карте.

C-10.14 Покажите, что самое большее один trinode реструктуризация операции необходим, чтобы восстановить

баланс после любой вставки в дереве AVL. C-10.15 Позвольте T и U быть (2, 4) деревьями, хранящими n и m записями, соответственно, таким

у этого все записи в T есть ключи меньше, чем ключи всех записей в U. Опишите O (зарегистрируйтесь, n + регистрируют m), метод времени для присоединения T и U в единственное дерево, которое хранит все записи в T и U.

C-10.16 Повторите предыдущую проблему для красно-черных деревьев T и U. C-10.17 Оправдайте Суждение 10.7. Индикатор C-10.18 The Boolean раньше отмечал узлы в красно-черном дереве, как являющемся

«красный» или «черный» не строго необходим, когда у нас есть отличные ключи. De - писец схема осуществления красно-черного дерева, не добавляя дополнительного пространства к стандартным узлам дерева двоичного поиска.

C-10.19 Позвольте T быть красно-черным деревом, хранящим n записи и позволить k быть ключом входа

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

C-10.20 Покажите, что узлы любого дерева AVL T могут быть окрашены в «красный» и «черный» цвет

так, чтобы T стал красно-черным деревом. C-10.21 mergeable куча ADT состоит из операционной вставки (k, x), removeMin (),

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

C-10.22 Рассмотрите изменение косых деревьев, названных полукосыми деревьями, где вывих

узел на глубине d останавливается, как только узел достигает глубиныd/2 ⌋. Выступить

амортизируемый анализ полукосых деревьев.

C-10.23 Стандартный шаг вывиха требует двух проходов, одного нисходящего прохода в

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

496