Сокращение деревьев - Википедия - Tree contraction
В Информатика, сокращение параллельного дерева широко применимый метод параллельного решения большого количества дерево задач и используется в качестве метода разработки алгоритмов для разработки большого количества параллельных график алгоритмы. Параллельное сжатие деревьев было введено Гэри Л. Миллер и Джон Х. Рейф,[1] и впоследствии был изменен для повышения эффективности X. Он и Y. Yesha,[2] Хиллель Газит, Гэри Л. Миллер и Шан-Хуа Тенг[3] и много других.[4]
Сокращение деревьев использовалось при проектировании многих эффективных параллельные алгоритмы, включая выражение оценка, нахождение самые низкие общие предки, изоморфизм деревьев, изоморфизм графов, изоморфизм максимального поддерева, исключение общего подвыражения, вычисляя 3-связные компоненты графа и находя явное плоское вложение планарный граф[5]
На основе исследований и работы по сокращению параллельных деревьев были предложены различные алгоритмы, направленные на повышение эффективности или простоты этой темы. Настоящая статья фокусируется на конкретном решении, которое является вариантом алгоритма Миллера и Рейфа, и его применением.
Вступление
За последние несколько десятилетий были проведены значительные исследования по созданию новых параллельных алгоритмов для решения множества задач с целью разработки высокопараллельных (полилогарифмическая глубина ), эффективные (линейные по времени последовательной работы) алгоритмы.[1] Для некоторых задач дерево оказывается хорошим решением. Обращаясь к этим проблемам, мы иногда можем добиться большего параллелизма, просто представив нашу проблему в виде дерева.
Рассматривая общее определение дерева, есть корневая вершина и несколько дочерних вершин, прикрепленных к корню.[6] А дочерние вершины могут сами иметь потомков и так далее. В конце концов, пути сводятся к листьям, которые считаются конечными точками дерева. Затем, основываясь на этом общем дереве, мы можем придумать некоторые частные случаи: (1) сбалансированное двоичное дерево; (2) связанный список.[7] Сбалансированное бинарное дерево имеет ровно две ветви для каждой вершины, за исключением листьев. Это дает оценку O (log n) глубины дерева.[8] Связанный список - это также дерево, в котором каждая вершина имеет только одного ребенка. Мы также можем достичь глубины O (log n), используя нарушение симметрии.[9]
Учитывая общий случай дерева, мы хотели бы сохранить границу в O (log n), независимо от того, является ли оно несбалансированным, списковым или сочетанием того и другого. Чтобы решить эту проблему, мы используем алгоритм, называемый сумма префикса используя Техника тура Эйлера.[10] С помощью техники обхода Эйлера дерево может быть представлено в плоском стиле, и, таким образом, сумма префикса может быть применена к произвольному дереву в этом формате. Фактически, префиксная сумма может использоваться для любого набора значений и двоичной операции, которые образуют группу: двоичная операция должна быть ассоциативной, каждое значение должно иметь обратное, и существует значение идентичности.
Немного подумав, мы можем найти некоторые исключительные случаи, когда префиксная сумма становится неэффективной или неэффективной. Рассмотрим пример умножения, когда набор значений включает 0. Или есть некоторые часто требуемые операции max () и min (), которые не имеют обратное. Цель состоит в том, чтобы найти алгоритм, который работает на всех деревьях с ожидаемой работой O (n) и глубиной O (log n). В следующих разделах будет предложен алгоритм Rake / Compress для достижения этой цели.[11]
Определения
Прежде чем перейти к самому алгоритму, мы сначала рассмотрим несколько терминов, которые будут использоваться позже.
- Грабли[12] - Шаг грабли соединяет каждый левый лист двоичных узлов с родительским. Под соединением мы подразумеваем, что он подвергается функциональному процессу, который выполняет операцию, которую мы хотим выполнить. Пример рейка приведен на рисунке 1.
- Компресс[12] - Шаг сжатия на самом деле представляет собой последовательность нескольких событий: (1) Найдите независимый набор унарных узлов. (Независимость здесь определяется так, что нет двух соседей, что означает отсутствие отношения родитель-потомок) (2) Присоедините каждый узел в независимом наборе со своим дочерним (обратите внимание, что независимый набор не уникален). Пример компресса приведен на рисунке 2.
А для решения актуальных задач с помощью сжатия дерева алгоритм имеет структуру:
Повторяйте, пока дерево не станет унарным узлом {Rake; Компресс;}
Анализ
На данный момент предположим, что все узлы имеют менее трех дочерних узлов, а именно двоичных. Вообще говоря, пока степень ограничена, оценки сохраняются.[13] Но для простоты разберем двоичный случай. В двух «вырожденных» случаях, перечисленных выше, rake - лучший инструмент для работы со сбалансированными бинарными деревьями, а сжатие - лучший инструмент для связанных списков. Однако для произвольных деревьев потребуется комбинация этих операций. Используя эту комбинацию, мы утверждаем теорему о том, что
- Теорема: После O (log n) ожидаемых шагов сгребания и сжатия дерево сокращается до одного узла.
Теперь перефразируйте алгоритм сокращения дерева следующим образом:
- Вход: двоичное дерево с корнем r
- Выход: один узел
- Операция: последовательность шагов сжатия, каждый из которых состоит из операции сгребания и операции сжатия (в любом порядке). Операция rake удаляет все листовые узлы параллельно. Операция сжатия находит независимый набор унарных узлов и разделить выбранные узлы.
Чтобы приблизиться к теореме, сначала рассмотрим свойство двоичного дерева. Учитывая двоичное дерево T, мы можем разделить узлы T на 3 группы: содержит все листовые узлы, содержит все узлы с 1 дочерним элементом, и содержит все узлы с 2 дочерними элементами. Легко заметить, что: . Теперь мы предлагаем:
- Требовать:
Это утверждение можно доказать с помощью сильной индукции по количеству узлов. Легко видеть, что базовый случай n = 1 выполняется тривиально. Кроме того, мы предполагаем, что это утверждение также верно для любого дерева с не более чем n узлами. Тогда, учитывая дерево с n + 1 узлами с корнем в r, возможны два случая:
- Если у r есть только одно поддерево, рассмотрим поддерево r. Мы знаем, что в поддереве такое же количество двоичных узлов и такое же количество листовых узлов, как и у всего дерева. Это верно, поскольку корень - это унарный узел. И, исходя из предыдущего предположения, унарный узел тоже не меняется. или же .
- Если r имеет два поддерева, мы определяем быть листовыми узлами и двоичными узлами в левом поддереве соответственно. Аналогично определяем тот же для правого поддерева. Из предыдущего есть и . Также мы знаем, что T имеет листовые узлы и бинарные узлы. Таким образом, мы можем вывести:
что доказывает утверждение.
Следуя утверждению, мы затем докажем лемму, которая приводит нас к теореме.
- Лемма: количество узлов после шага сжатия уменьшается на постоянный коэффициент ожидания.
Предположим, что количество узлов до сжатия равно m, а после сжатия - m '. По определению операция rake удаляет все и операция сжатия удаляет не менее 1/4 части в ожидании. Все останки. Таким образом, мы видим:
Наконец, основываясь на этой лемме, мы можем заключить, что если узлы уменьшаются на постоянный коэффициент на каждой итерации, после , останется только один узел.[14]
Приложения
Оценка выражения
Чтобы оценить выражение в виде двоичного дерева (эта проблема также известна как дерево двоичных выражений ),[15] Учтите, что: арифметическое выражение - это дерево, в котором листья имеют значения из некоторого домена, а каждая внутренняя вершина имеет двух дочерних элементов и метку из {+, x,%}. И далее предположим, что эти двоичные операции могут выполняться за постоянное время.
Теперь мы покажем, что оценку можно выполнить с помощью параллельного сжатия дерева.[16]
- Шаг 1. Назначьте выражения каждому узлу. Выражение листа - это просто значение, которое он содержит. Напишите L + R, L - R или L × R для операторов, где L и R - значения выражений в левом и правом поддеревьях соответственно.
- Шаг 2. Когда левый (правый) дочерний элемент с 0 дочерними элементами объединяется в оператор, замените L (R) значением дочернего элемента.
- Шаг 3. Когда узел имеет 1 дочерний элемент, он имеет выражение, которое является функцией одной переменной. Когда левый (правый) дочерний элемент с 1 дочерним элементом объединяется в оператор, замените L (R) выражением и при необходимости измените переменную в выражении на L (R).
В узле с 2 дочерними элементами операндами в выражении являются f (L) и g (R), где f и g - линейные функции, а в узле с 1 дочерним элементом выражение имеет вид h (x), где h - линейная функция и x либо L, либо R. Докажем этот инвариант по индукции. Вначале явно выполняется инвариант. Есть три типа слияний, которые приводят к не полностью вычисленному выражению. (1) 1-дочерний узел объединяется с 2-дочерним узлом. (2) Лист объединяется в узел с двумя дочерними элементами. (3) 1-дочерний узел объединяется с 1-дочерним узлом. Все три типа слияний не меняют инвариант. Следовательно, каждое слияние просто оценивает или составляет линейные функции, что занимает постоянное время. [17]
Рекомендации
- ^ а б Гэри Л. Миллер и Джон Х. Рейф, Сокращение параллельных деревьев - Часть I: Основы., 1989
- ^ X. Он и Y. Йеша, "Алгебраические вычисления двоичных деревьев и параллельные алгоритмы для простых графов. ", Журнал алгоритмов, 1988, стр 92-113.
- ^ Хиллель Газит, Гэри Л. Миллер и Шан-Хуа Тенг, Оптимальное сжатие дерева в модели EREW, Спрингер, 1988
- ^ Карл Абрахамсон и др. "Простой алгоритм сжатия параллельного дерева. ", Журнал алгоритмов, 1989, стр 287-302.
- ^ Джон Х. Рейф и Стивен Р. Тейт, Динамическое сжатие параллельного дерева, Труды шестого ежегодного симпозиума ACM по параллельным алгоритмам и архитектурам (ACM), 1994 г.
- ^ Томас Х. Кормен, Чарльз Э. Лейзерсон, Рональд Л. Ривест, и Клиффорд Штайн. Введение в алгоритмы, Второе издание. MIT Press и McGraw-Hill, 2001. ISBN 0-262-03293-7 . Раздел 10.4: Представление корневых деревьев, стр. 214–217. Главы 12–14 (Деревья двоичного поиска, красно-черные деревья, дополнительные структуры данных), стр. 253–320.
- ^ Дональд Кнут. Искусство программирования: Фундаментальные алгоритмы, Третье издание. Аддисон-Уэсли, 1997. ISBN 0-201-89683-4 . Раздел 2.3: Деревья, стр. 308–423.
- ^ Нешетржил, Ярослав; Оссона де Мендес, Патрис (2012), «Глава 6. Деревья с ограниченной высотой и глубиной дерева», Разреженность: графики, структуры и алгоритмы, Алгоритмы и комбинаторика, 28, Heidelberg: Springer, стр. 115–144, Дои:10.1007/978-3-642-27875-4, ISBN 978-3-642-27874-7, МИСТЕР 2920058.
- ^ Эндрю Голдберг, Серж Плоткин и Грегори Шеннон, Параллельное нарушение симметрии в разреженных графах, Материалы девятнадцатого ежегодного симпозиума ACM по теории вычислений (ACM), 1987 г.
- ^ Деревья Эйлера-тура - в конспектах лекций в расширенных структурах данных. Профессор Эрик Демейн; Писец: Кэтрин Лай.
- ^ Гэри Л. Миллер и Джон Х. Рейф, Параллельное сжатие дерева и его применение, Центр оборонной технической информации, 1985 г.
- ^ а б Параллельные алгоритмы: операции с деревом, Гай Блеллох, Университет Карнеги-Меллона, 2009 г.
- ^ МОРИХАТА, Акимаса и Киминори МАЦУЗАКИ, Алгоритм параллельного сокращения деревьев на недвоичных деревьях, МАТЕМАТИЧЕСКАЯ ИНЖЕНЕРИЯТЕХНИЧЕСКИЕ ОТЧЕТЫ, 2008
- ^ Параллельные алгоритмы: анализ параллельного сжатия дерева, Гай Блеллох, 2007
- ^ S Buss, Алгоритмы вычисления логических формул и сокращения дерева, Арифметика, теория доказательств и вычислительная сложность, 1993, стр. 96-115.
- ^ Бадер, Дэвид А., Суканья Срешта и Нина Р. Вайсе-Бернштейн, Оценка арифметических выражений с использованием сжатия дерева: быстрая и масштабируемая параллельная реализация для симметричных мультипроцессоров (SMP), Высокопроизводительные вычисления - HiPC 2002. Springer Berlin Heidelberg, 2002, стр. 63-75.
- ^ Приложения параллельного сокращения дерева, Самуэль Йом, 2015
внешняя ссылка
- 6.851: Расширенные структуры данных проф. Эрик Демейн