Сокращение дерева
В информатике , сжатие параллельного дерева является широко применимым методом параллельного решения большого количества задач, связанных с деревьями и используется в качестве метода разработки алгоритмов для разработки большого количества алгоритмов на параллельных графах . Параллельное сокращение дерева было предложено Гэри Л. Миллером и Джоном Х. Рейфом . [1] и впоследствии был модифицирован для повышения эффективности X. He и 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] – Шаг Rake соединяет каждый левый лист двоичных узлов с родительским. Под объединением мы подразумеваем, что он подвергается функциональному процессу, который выполняет операцию, которую мы хотим выполнить. Пример рейка приведен на рисунке 1.
- Компресс [12] – Шаг сжатия на самом деле представляет собой последовательность нескольких событий: (1) Найти независимый набор унарных узлов. (Независимость здесь определяется таким образом, что никакие два узла не являются соседями, что означает отсутствие отношения родитель-потомок) (2) Соедините каждый узел в независимом наборе с его дочерним элементом (обратите внимание, что независимый набор не уникален). Пример сжатия приведен на рисунке 2.
А для решения актуальных задач с использованием сжатия дерева алгоритм имеет структуру:
Repeat until tree becomes a unary node{ Rake; Compress;}
Анализ
[ редактировать ]На данный момент предположим, что все узлы имеют менее трех дочерних узлов, а именно двоичных. Вообще говоря, пока степень ограничена, границы будут сохраняться. [13] Но мы для простоты разберем бинарный случай. В двух «вырожденных» случаях, перечисленных выше, грабли — лучший инструмент для работы со сбалансированными двоичными деревьями, а сжатие — лучший инструмент для связанных списков. Однако для произвольных деревьев потребуется комбинация этих операций. Используя эту комбинацию, мы утверждаем теорему о том, что
- Теорема : После ожидаемых шагов очистки и сжатия O(log n) дерево сводится к одному узлу.
Теперь перефразируем алгоритм сжатия дерева следующим образом:
- Входные данные: бинарное дерево с корнем в r.
- Выход: один узел
- Операция: последовательность этапов сжатия, каждый из которых состоит из операции наклона и операции сжатия (в любом порядке). Операция rake удаляет все листовые узлы параллельно. Операция сжатия находит независимый набор унарных узлов и объединяет выбранные узлы.
Чтобы приблизиться к теореме, мы сначала взглянем на свойство двоичного дерева. Учитывая двоичное дерево T, мы можем разделить узлы T на 3 группы: содержит все листовые узлы, содержит все узлы с 1 дочерним элементом, а содержит все узлы с двумя дочерними узлами. Это легко увидеть: . Теперь мы предлагаем:
- Требовать:
Это утверждение можно доказать сильной индукцией по числу узлов. Легко видеть, что базовый случай 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]
Ссылки
[ редактировать ]- ^ Jump up to: а б Гэри Л. Миллер и Джон Х. Рейф , Сокращение параллельного дерева. Часть I: Основы., 1989 г.
- ^ X. Он и Ю. Йеша, « Алгебраические вычисления на бинарном дереве и параллельные алгоритмы для простых графов », Журнал алгоритмов, 1988, стр. 92–113.
- ^ Хиллель Газит, Гэри Л. Миллер и Шан-Хуа Тенг, Оптимальное сокращение дерева в модели EREW , Springer, 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, Гейдельберг: Springer, стр. 115–144, номер документа : 10.1007/978-3-642-27875-4 , ISBN. 978-3-642-27874-7 , МР 2920058 .
- ^ Эндрю Голдберг, Серж Плоткин и Грегори Шеннон, Параллельное нарушение симметрии в разреженных графах , Труды девятнадцатого ежегодного симпозиума ACM по теории вычислений (ACM), 1987
- ^ Деревья туров Эйлера - в конспектах лекций по расширенным структурам данных. профессор Эрик Демейн; Писец: Кэтрин Лай.
- ^ Гэри Л. Миллер и Джон Х. Рейф, Параллельное сокращение деревьев и его применение , Центр технической информации Министерства обороны, 1985 г.
- ^ Jump up to: а б Параллельные алгоритмы: операции с деревьями , Гай Блеллок, Университет Карнеги-Меллон, 2009 г.
- ^ МОРИХАТА, Акимаса и Киминори МАЦУЗАКИ, Алгоритм сжатия параллельного дерева на небинарных деревьях , МАТЕМАТИЧЕСКАЯ ИНЖЕНЕРИЯТЕХНИЧЕСКИЕ ОТЧЕТЫ, 2008 г.
- ^ Параллельные алгоритмы: анализ сокращения параллельного дерева , Гай Блеллох, 2007 г.
- ^ С. Басс, Алгоритмы вычисления логических формул и сжатия дерева , Арифметика, теория доказательств и сложность вычислений, 1993, стр. 96-115
- ^ Бадер, Дэвид А., Суканья Срешта и Нина Р. Вайс-Бернштейн, Оценка арифметических выражений с использованием сжатия дерева: быстрая и масштабируемая параллельная реализация для симметричных мультипроцессоров (SMP) [ мертвая ссылка ] , Высокопроизводительные вычисления — HiPC 2002. Springer Berlin Heidelberg, 2002, стр. 63–75.
- ^ Применение сокращения параллельного дерева , Сэмюэл Йеом, 2015 г.
Внешние ссылки
[ редактировать ]- 6.851: Расширенные структуры данных , профессор Эрик Демейн