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

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

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

Некоторые структуры данных, которые мы обсуждаем в этой главе, включая (2, 4) деревья, мульти - путь деревья поиска, то есть, деревья с внутренними узлами, у которых есть два или больше ребенка. Таким образом, прежде чем мы определяем (2, 4) деревья, давайте обсудим многоканальные деревья поиска.

10.4.1 Многоканальные деревья поиска

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

дети. В этой секции мы обсуждаем, как многоканальные деревья могут использоваться в качестве деревьев поиска. Вспомните, что записи, которые мы храним в дереве поиска, являются парами формы (k, x), где k - ключ, и x - стоимость, связанная с ключом. Однако мы не обсуждаем, как выполнить обновления в многоканальных деревьях поиска теперь, так как детали для методов обновления зависят от дополнительных свойств, которые мы хотим поддержать для многоканальных деревьев, которые мы обсуждаем в Разделе 14.3.1.

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

Позвольте v быть узлом заказанного дерева. Мы говорим, что v - d-узел, если у v есть d дети. Мы определяем многоканальное дерево поиска, чтобы быть заказанным деревом T, у которого есть следующие свойства, которые иллюстрированы в рисунке 10.1 (a):

• У каждого внутреннего узла T есть по крайней мере два ребенка. Таким образом, каждый внутренний узел

d-узел, таким образом что d³ 2.

• Каждый внутренний d-узел v T с детьми v1..., vd хранит заказанный набор

d -1 записи значения ключа (k1, x1)..., (kd-1, xd-1), где k1££ kd-1.

• Давайте традиционно определим k0 =- ¥ и kd = + ¥. Для каждого входа (k, x)

сохраненный в узле в поддереве v укоренился в vi, я = 1..., d, у нас есть это

£ ki-1 k£ ki.

Таким образом, если мы думаем о наборе ключей, сохраненных в v как включая фиктивное специальное предложение

ключи k0 =- ¥ и kd = + ¥, затем ключ k сохраненный в поддереве T укоренились в a

детский узел vi должен быть «промежуточным» два ключа, сохраненные в v. Эта простая точка зрения

дает начало правилу, что d-узел хранит d- 1 регулярный ключ, и это также формируется

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

По вышеупомянутому определению внешние узлы многоканального поиска не хранят записей и служат только «заполнителями», как было наше соглашение с деревьями двоичного поиска (Раздел 10.1); следовательно, дерево двоичного поиска может быть рассмотрено как особый случай многоканального дерева поиска, где каждый внутренний узел хранит один вход и имеет двух детей. Кроме того, в то время как внешние узлы могли быть пустыми, мы делаем предположение упрощения здесь, что они - фактические узлы, которые ничего не хранят.

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

(a)

(b)

(c)

Рисунок 10.20: (a) многоканальное дерево поиска T; (b) путь поиска в T для ключевых 12 (не-успешный поиск); (c) путь поиска в T для ключевых 24 (успешный поиск).