Jump to content

м -арное дерево

Пример m-арного дерева с m=5

В теории графов m - арное дерево (для неотрицательных целых чисел m ) (также известное как n -арное , k -арное или k -образное дерево) является древовидным деревом (или, по мнению некоторых авторов, упорядоченным деревом ). [1] [2] в котором каждый узел имеет не более m детей. Бинарное дерево — важный случай, когда m = 2; аналогично троичным деревом является дерево, в котором m = 3.

Виды м -арных деревьев

[ редактировать ]
  • Полное m m -арное дерево — это m -арное дерево, в котором на каждом уровне каждый узел имеет 0 или дочерних элементов.
  • Полное м - арное дерево [3] [4] (или, реже, совершенное м -арное дерево [5] ) — полное m -арное дерево, в котором все листовые узлы находятся на одной глубине.

Свойства м -арных деревьев

[ редактировать ]
  • Для m -арного дерева высотой h верхняя граница максимального количества листьев равна .
  • Высота h - арного m дерева не включает корневой узел, при этом дерево содержит только корневой узел, имеющий высоту 0.
  • Высота дерева равна максимальной глубине D любого узла дерева.
  • Общее количество узлов в полном m -арном дереве есть , а высота h равна

По определению Big-Ω максимальная глубина

  • Высота полного m -арного дерева с n узлами равна .
  • Общее количество возможных m -арных деревьев с n узлами равно (это каталонский номер ). [6]

Методы обхода m- арных деревьев

[ редактировать ]

Обход m -арного дерева очень похож на обход бинарного дерева. Обход в предварительном порядке идет к родительскому, левому поддереву и правому поддереву, а для обхода после порядка он идет через левое поддерево, правое поддерево и родительский узел. Для обхода по порядку, поскольку на узел приходится более двух потомков при m > 2 , необходимо определить понятие левого и правого поддеревьев. Один из распространенных методов создания левых/правых поддеревьев — разделить список дочерних узлов на две группы. Определив порядок для m дочерних узлов узла, первый узлы будут составлять левое поддерево и узлы будут составлять правильное поддерево.

Преобразование m -арного дерева в двоичное дерево

[ редактировать ]
Пример преобразования m-арного дерева в бинарное дерево. м=6

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

Сначала мы связываем все непосредственные дочерние узлы данного родительского узла вместе, чтобы сформировать список связей. Затем мы сохраняем ссылку от родителя на первого (т. е. самого левого) дочернего элемента и удаляем все остальные ссылки на остальных дочерних элементов. Мы повторяем этот процесс для всех детей (если у них есть дети), пока не обработаем все внутренние узлы и не повернём дерево на 45 градусов по часовой стрелке. Полученное дерево является искомым бинарным деревом, полученным из заданного m -арного дерева.

Методы хранения м -арных деревьев

[ редактировать ]
Пример хранения m-арного дерева с m=3 в массиве

m -арные деревья также могут храниться в порядке ширины как неявная структура данных в массивах , и если дерево является полным m -арным деревом, этот метод не теряет места. В этом компактном расположении, если узел имеет индекс i , его c -й дочерний элемент в диапазоне {1,…, m } находится по индексу , а его родительский элемент (если есть) находится по индексу (при условии, что корень имеет нулевой индекс, что означает массив, отсчитываемый от 0). Этот метод выигрывает от более компактного хранения и лучшей локальности ссылок , особенно во время обхода предварительного заказа. Пространственная сложность этого метода .

На основе указателя

[ редактировать ]

Каждый узел будет иметь внутренний массив для хранения указателей на каждый из его узлов. дети:

Реализация m-арного дерева на основе указателей, где m =4.

По сравнению с реализацией на основе массива, этот метод реализации имеет более высокую пространственную сложность: .

Перечень м- рых деревьев

[ редактировать ]

Перечисление всех возможных m -арных деревьев полезно во многих дисциплинах как способ проверки гипотез и теорий. Правильное представление объектов mary- дерева может значительно упростить процесс генерации. Можно построить представление битовой последовательности, используя поиск в глубину m -арного дерева с n узлами, указывающими наличие узла по заданному индексу с использованием двоичных значений. Например, битовая последовательность x=1110000100010001000 представляет собой трехмерное дерево с n=6 узлами, как показано ниже.

Трехмерное дерево с битовой последовательностью 1110000100010001000 и простой нулевой последовательностью 004433.
3-ary tree with bit sequence of 1110000100010001000 and Simple Zero Sequence of 004433

Проблема с этим представлением заключается в том, что перечисление всех битовых строк в лексикографическом порядке будет означать, что две последовательные строки могут представлять два дерева, которые лексикографически сильно различаются. Следовательно, перечисление двоичных строк не обязательно приведет к упорядоченной генерации всех m- мерных деревьев. [7] Лучшее представление основано на целочисленной строке, которая указывает количество нулей между последовательными единицами, известной как Простая Нулевая Последовательность . — это простая нулевая последовательность, соответствующая битовой последовательности где j — количество нулей, необходимое в конце последовательности, чтобы строка имела подходящую длину. Например, — это простое представление нулевой последовательности, представленное на рисунке выше. Более компактное представление 00433 : , которая называется нулевой последовательностью , в которой повторяющиеся основания не могут быть соседними. Это новое представление позволяет построить следующую действительную последовательность в . Простая нулевая последовательность действительна, если То есть количество нулей в битовой последовательности m -арного дерева не может превышать общее количество нулевых указателей (т. е. указателей без прикрепленных к ним дочерних узлов). Это суммирование накладывает ограничение на узлов, чтобы было место для добавления без создания недопустимой структуры (т. е. наличия доступного нулевого указателя для прикрепления к ней последнего узла).

В таблице ниже показан список всех допустимых простых нулевых последовательностей всех 3 -арных деревьев с 4 узлами:

222 200 111 033 013
221 132 110 032 012
220 131 105 031 011
213 130 104 030 010
212 123 103 024 006
211 122 102 023 005
210 121 101 022 004
204 120 100 021 003
203 114 042 020 002
202 113 041 015 001
201 112 040 014 000

Начиная с нижнего правого угла таблицы (т. е. «000»), существует базовый шаблон , который управляет генерацией возможных упорядоченных деревьев, начиная с «000» до «006». Шаблон магистрали для этой группы («00X») изображен ниже, где дополнительный узел добавляется в позиции, помеченные «x».

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

Возвращаясь к таблице перечисления всех m -арных деревьев, где и , мы можем легко наблюдать очевидный скачок с «006» на «010», который можно объяснить тривиально алгоритмически, как показано ниже:

Псевдокод этого перечисления приведен ниже: [7]

Procedure NEXT(s1, s2, …, sn−1)
    if si = 0 for all i then
        finished
    else
        i ← max {i | si > 0}
        sisi − 1
        if i < n − 1 then
            si ← (i + 1) ⋅ (m − 1) − sum(sj)
        end if
        for ji + 2, i + 3, …, n − 1
            sjk − 1
    end if
end

Бесцикловое перечисление

[ редактировать ]

Алгоритм генерации, который принимает время в худшем случае называется безцикловым, поскольку временная сложность не может включать цикл или рекурсию. Бесцикловый перебор m- арных деревьев называется бесцикловым, если после инициализации он генерирует последовательные объекты дерева в . Для данного m- арного дерева T с являясь одним из его узлов и его -й ребенок, поворот влево на делается путем создания корневой узел и создание и все его поддеревья являются потомками , дополнительно мы присваиваем оставил большинство детей к и самый правый ребенок остается привязанным к нему, пока получает root-права, как показано ниже:

Convert an m-ary tree to left-tree
    for i = 1...n:
         for t = 2...m:
             while t child of node at depth i ≠ 1:
                L-t rotation at nodes at depth i
              end while
          end for
     end for

Поворот вправо в точке d является обратной этой операции. Левая цепочка T представляет собой последовательность узлы такие, что является корнем и всеми узлами, кроме иметь одного ребенка, подключенного к самому левому краю (т. е. ) указатель. Любое m- арное дерево можно преобразовать в дерево левой цепи , используя последовательность конечных вращений влево-t для t от 2 до m . В частности, это можно сделать, выполняя повороты влево на каждом узле. пока все это поддерево становится нулевым на каждой глубине. Затем последовательность количества поворотов влево-t, выполненных на глубине i, обозначается определяет кодовое слово m - арного дерева, которое можно восстановить, выполнив ту же последовательность поворотов вправо-t.

Пусть кортеж из представляют количество вращений L-2 , вращений L-3 , ..., вращений Lm , произошедших в корне (т. е. i = 1). Затем — количество вращений Lt, необходимое на глубине i .

Регистрация количества поворотов влево на каждой глубине — это способ кодирования m -арного дерева. Таким образом, перечисление всех возможных допустимых кодировок поможет нам сгенерировать все m -арные деревья для заданных m и n . Но не все последовательности m неотрицательных целых чисел представляют собой допустимое m-арное дерево. Последовательность неотрицательные целые числа являются допустимым представлением m- арного дерева тогда и только тогда, когда [8]

Лексикографически наименьшее представление кодового слова m-арного числа с n узлами представляет собой все нули, а наибольшее - это n -1 единиц, за следует m которыми справа -1 нуль.

Initialization
    c[i] to zero for all i from 1 to n⋅(k − 1)
    p[i] set to n − 1 for i from 1 to n
    sum ← 0
    jm − 1

Termination Condition
    Terminate when c[1] = n − 1

Procedure NEXT[8]
    sumsum + 1 − c[j + 1]
    c[j] ← c[j] + 1
    if p[q[j]] > p[q[j + 1]] + 1 then
        p[q[j]] ← p[q[j + 1]] + 1
    end if
    p[q[j + c[j]]] ← p[q[j]]
    c[j + 1] ← 0
    if sum = p[q[j]] then
        jj − 1
    else
        p[n] ← sum
        jm − 1
    end if
end

Приложение

[ редактировать ]

Одним из применений m -арного дерева является создание словаря для проверки допустимых строк. Для этого пусть m будет равно количеству допустимых алфавитов (например, количеству букв английского алфавита ) с корнем дерева, представляющим начальную точку. Аналогично, каждый из дочерних элементов может иметь до m дочерних элементов, представляющих следующий возможный символ в строке. Таким образом, символы вдоль путей могут представлять действительные ключи, отмечая конечный символ ключей как «конечный узел». Например, в примере ниже «at» и «and» являются допустимыми ключевыми строками, где «t» и «d» отмечены как конечные узлы. Терминальные узлы могут хранить дополнительную информацию, которая будет связана с данным ключом. Существуют аналогичные способы создания такого словаря с использованием B-tree , Octree и/или trie .

См. также

[ редактировать ]
  1. ^ Ли, Лиу (1998). Java: структуры данных и программирование . Раздел 8.1.2.1, Многоаричные деревья : Springer. дои : 10.1007/978-3-642-95851-9 . ISBN  978-3-642-95853-3 . S2CID   708416 . Проверено 20 июля 2023 г. {{cite book}}: CS1 maint: местоположение ( ссылка )
  2. ^ Стэнли, Ричард П. (2011). Перечислительная комбинаторика, том I. Приложение: Терминология теории графов: Издательство Кембриджского университета. п. 573. ИСБН  978-1-107-60262-5 . Проверено 20 июля 2023 г.
  3. ^ Гросс, Джонатан Л.; Йеллен, Джей; Андерсон, Марк (2018). Теория графов и ее приложения (3-е изд.). Раздел 3.2, Деревья с корнем, упорядоченные деревья и бинарные деревья : CRC Press. п. 132. ИСБН  978-1-4822-4948-4 . {{cite book}}: CS1 maint: местоположение ( ссылка )
  4. ^ Кормен, Томас Х.; Лейзерсон, Чарльз Э.; Ривест, Рональд Л.; Штейн, Клиффорд (2022). Введение в алгоритмы (4-е изд.). Раздел B.5.3, Бинарные и позиционные деревья : MIT Press. п. 1174. ИСБН  9780262046305 . Проверено 20 июля 2023 г. {{cite book}}: CS1 maint: местоположение ( ссылка )
  5. ^ Шумахер, Патрик (2012). «Экскурсия: Теория сетей». Аутопоэзис архитектуры: новая повестка дня для архитектуры, Том. II . Уайли. п. 103. ИСБН  978-0-470-66616-6 .
  6. ^ Грэм, Рональд Л.; Кнут, Дональд Э.; Паташник, Орен (1994). Конкретная математика: фонд информатики (2-е изд.). АИП.
  7. ^ Перейти обратно: а б Baronaigien, Доминик Руланц ван (2000). «Генерация K-арных деревьев без петель». Журнал алгоритмов . 35 (1): 100–107. дои : 10.1006/jagm.1999.1073 .
  8. ^ Перейти обратно: а б Корш, Джеймс Ф. (1994). «Безцикловая генерация последовательностей k-арных деревьев». Письма об обработке информации . 52 (5). Эльзевир: 243–247. дои : 10.1016/0020-0190(94)00149-9 .
  • Сторер, Джеймс А. (2001). Введение в структуры данных и алгоритмы . Биркхойзер Бостон. ISBN  3-7643-4253-6 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b82ef1f01daa064637f112b2a5e44a54__1717474800
URL1:https://arc.ask3.ru/arc/aa/b8/54/b82ef1f01daa064637f112b2a5e44a54.html
Заголовок, (Title) документа по адресу, URL1:
m-ary tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)