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

10.4. (2,4) Деревья 463

Есть ли у внутренних узлов многоканального дерева два ребенка или многие, однако,

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

Суждение 10.7: у n-входа многоканальное дерево поиска есть n + 1 внешний узел.

Мы оставляем оправдание этого суждения как осуществление (Упражнение C-10.17).

Поиск в многоканальном дереве

Учитывая многоканальное дерево поиска T, мы отмечаем, что, ища вход с ключом k прост. Мы выполняем такой поиск, прослеживая путь в T, начинающемся в корне. (См. рисунок 10.1 (b) и (c).), Когда мы в d-узле v во время этого поиска, мы сравниваем ключ k с ключами k1..., kd-1 сохраненный в v. Если k = ki для некоторых я, поиск успешно закончен. Иначе, мы продолжаем поиск в ребенке vi v такой

это ki-1 <k <ki. (Вспомните, что мы традиционно определяем k0 =- ¥ и kd = + ¥.)

Если мы достигаем внешнего узла, то мы знаем, что нет никакого входа с ключом k в T,

и поиск заканчивается неудачно.

Структуры данных для представления многоканальных деревьев поиска

В Разделе 7.1.4 мы обсуждаем связанную структуру данных для представления общего дерева. Это представление может также использоваться для многоканального дерева поиска. Фактически, в использовании общего дерева, чтобы осуществить многоканальное дерево поиска, единственной дополнительной информацией, которую мы должны хранить в каждом узле, является набор записей (включая ключи) связанный с тем узлом. Таким образом, мы должны снабдить v ссылку на некоторую коллекцию, которая хранит записи для v.

Вспомните, что, когда мы используем дерево двоичного поиска, чтобы представлять заказанную карту M, мы просто храним ссылку на единственный вход в каждом внутреннем узле. В использовании мульти - путь дерево поиска T, чтобы представлять M, мы должны сохранить ссылку на заказанный набор записей, связанных с v в каждом внутреннем узле v T. Это рассуждение может сначала походить на круглый аргумент, так как нам нужно представление заказанной карты, чтобы представлять заказанную карту. Мы можем избежать любых круглых аргументов, однако, при помощи метода самонастройки, где мы используем предыдущее (менее продвинутое) решение проблемы создать новое (более продвинутое) решение. В этом случае самонастройка состоит из представления заказанного набора, связанного с каждым внутренним узлом, используя структуру данных карты, которую мы ранее построили (например, стол поиска, основанный на сортированном множестве, как показано в Разделе 9.3.1). В частности у принятия нас уже есть способ осуществить заказанный карты, мы можем понять многоканальное дерево поиска, беря дерево T и храня такую карту в каждом узле T.

464

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

Карта, которую мы храним в каждом узле v, известна как вторичная структура данных, быть - причина, мы используем его, чтобы поддержать большую, основную структуру данных. Мы обозначаем карту, сохраненную в узле v T как M (v). Записи, которые мы храним в M (v), позволяют нам находить который детский узел двинуться в затем во время операции по поиску. Определенно, для каждого узла v T, с детьми v1..., vd и записи (k1, x1)..., (kd-1, xd-1), мы храним, в карте M (v), записях

(k1, (x1, v1)), (k2, (x2, v2))..., (kd-1, (xd-1, vd-1)), (+ ¥, (∅, vd)).

Таким образом, у входа (ki, (xi, vi)) карты M (v) есть ключ ki и стоимость (xi, vi). Отметьте что

последний вход хранит специальный ключ + ¥.

С реализацией многоканального дерева поиска T выше, обрабатывая d-узел

v, ища вход T с ключом k может быть сделан, выполнив операцию по поиску, чтобы счесть вход (ki, (xi, vi)) в M (v) с самым маленьким ключом больше, чем или равный k. Мы отличаем два случая:

• Если k <ki, то мы продолжаем поиск, обрабатывая ребенка vi. (Отмечают это если

специальный ключ kd = + ¥ возвращен, тогда k больше, чем все ключи, сохраненные в

узел v, и мы продолжаем ребенка обработки поиска vd.)

• Иначе (k = ki), тогда поиск заканчивается успешно. Рассмотрите космическое требование для вышеупомянутой реализации многоканального поиска

дерево T хранящий n записи. Суждением 10.7, используя любую общую реализацию заказанной карты (Глава 9) для вторичных структур узлов T, полное космическое требование для T - O (n).

Полагайте затем, что время потратило ответ на поиск в T. Время, проведенное в d-узле v T во время поиска, зависит от того, как мы понимаем вторичную структуру данных M (v). Если M (v) понят с сортированным множеством (то есть, заказанный стол поиска), то мы можем обработать v в O (зарегистрируйте d), время. Если M (v) понят, используя несортированный список вместо этого, то обработка v берет O (d) время. Позвольте dmax обозначить максимальное количество детей любого узла T и позволить h обозначить высоту T. Время поиска в многоканальном дереве поиска - или O (hdmax) или O (h, регистрируют dmax), в зависимости от определенного внедрения вторичных структур в узлах T (карта M (v)). Если dmax - константа, продолжительность для выполнения поиска является O (h), независимо от внедрения вторичных структур.

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