Мега-Слияние
Мега-слияние — это распределенный алгоритм, направленный на решение задачи выборов в обобщенном связном неориентированном графе . [1] [2]
Введение
[ редактировать ]Mega-Merger был разработан Робертом Греем Галлагером из Массачусетского технологического института в 1983 году. Он применяет распределенный подход «разделяй и властвуй» , смешанный со стратегией завоевания на основе рангов. Алгоритм обычно представляется по аналогии село-город. Каждый узел графа обозначает деревню, соединяющие их ребра — это дороги, а корневое связующее дерево в подграфе — это город. Тогда весь граф представляет собой мегаполис. Мега-слияние заставляет деревни объединяться и образовывать города в соответствии с рангом и границами друг друга. Затем города формируются в результате союзов или путем завоевания/поглощения.
Предварительные условия
[ редактировать ]Mega-Merger строит минимальное связующее дерево на основе связанных графов при условии:
- Полная надежность: ни одно сообщение не теряется при передаче.
- Пользовательский интерфейс (уникальный инициатор): протокол запускает один узел.
- Двунаправленные каналы связи: каждое ребро является двунаправленным, связь может передаваться в обоих направлениях.
Никаких дополнительных ограничений не требуется.
Алгоритм
[ редактировать ]Алгоритм присваивает каждой деревне имя и ранг, первый из которых обычно уникален. В последнем указывается количество дружественных слияний, через которые прошел город, и чем оно больше, тем более могущественным считается город. При этом каждому ребру присвоен вес: каждое село/город имеет ребро минимального веса также называется ссылкой слияния , то есть ребром, обход которого имеет минимальную стоимость.
Алгоритм выполняется последовательными этапами до тех пор, пока не будет сформирован мегаполис. Каждый город C вычисляет свою собственную ссылку на слияние и отправляет запрос на слияние по всем городам. . Запрос обрабатывается следующими способами:
- Дружеское слияние: : Если города имеют одну и ту же ссылку слияния и имеют одинаковый ранг, происходит дружественное слияние , и два города сливаются в один. Для вновь созданного города выбирается новое имя, выбирается правящая деревня, а путь от предыдущего правителя к узлу в соединении слияния переориентируется так, что он ведет к новому лидеру. Ранг нового города также повышен на единицу. Обратите внимание, что это единственный способ, которым два города могут повысить ранг друг друга.
- Поглощение: : Если запрашивающий город имеет более низкий ранг, город-получатель запускает процесс поглощения : поглощается как при дружеском слиянии, но теряет свое название и образовавшийся город имеет ранг .
- Приостановка: : В таких случаях замораживает запрос: он ожидает либо поглощения по правилу 2 , либо слияния и повышения своего ранга выше ранга из для того, чтобы иметь возможность ввести в действие правило 1 и усвоить .
Внешние сообщения
[ редактировать ]Ни один из узлов графа не имеет списка деревень, принадлежащих их деревне, поэтому каждый раз, когда город хочет найти ребра, ведущие за его пределы, ему приходится применять протокол запроса-ответа . Правитель города отправляет широковещательное сообщение через свое связующее дерево, и каждый узел получив его, он отправляет запросы своим соседям, исключая ребра его дочернему(детям) и родительскому элементу. Протокол ответа следующий:
- : очевидно, что ребро является внутренним ребром в . и обменяйтесь негативными ответами.
- : просится в город более высокого ранга. По правилу 2 можно утверждать, что никакого поглощения не происходит и действительно принадлежит другому городу.
- : в этом случае задержит ответ, как указано в правиле 3 .
Характеристики
[ редактировать ]Mega-Merger владеет несколькими объектами недвижимости:
- Монотонный ранг : Каждый город , за исключением мегаполисов, в конечном итоге поднимется в рейтинге. По правилу 1 мог бы дружески слиться, повысив свой ранг на ; по правилу 2 и 3 будет иметь ссылку слияния (по гипотезе это не мегаполис) он либо попросит город более высокого ранга , поглощаясь и повышая свой ранг, или дождаться, пока достигает своего уровня и осуществляет дружественное слияние .
- : у нас уровень повышается каждый раз, когда дружественное слияние происходит . Вычисляем по индукции: в базовом случае , ровно одна деревня находится в . В индуктивном случае два города выполнить дружественное слияние, следовательно по индуктивному предположению.
- : по предыдущему правилу города застраиваются по экспоненте , следовательно, обратное .
- Предотвращение тупиковой ситуации : Мега-слияние не приводит к тупиковой ситуации. Как показано правилом 3, город можно подождать, пока город более низкого ранга ответит на ссылку слияния : чтобы завести в тупик такой город придется подождать , и на и так далее, пока не будет обнаружен цикл жду по ссылке слияния . Но по гипотезе это ссылка слияния , следовательно, такая цепочка не может существовать. Другая ситуация, вызывающая тупик, — это запрос от к где имеет другую ссылку слияния, чем . Тем не менее, как показывает монотонный ранг, либо будет повышать свой ранг, чтобы поглотить , или будет использовать все свои ссылки слияния, чтобы стать единственным городом на графике с . Тривиально в таком случае два звена слияния совпадут и будет вынуждено поглощено правилом 2 .
Прекращение действия
[ редактировать ]Завершение обеспечивается предотвращением взаимоблокировок и полной надежностью .
Расходы
[ редактировать ]Анализ затрат состоит из двух компонентов: стоимости этапа и верхней границы этапа. Город запускает этап, запрашивая ссылку слияния из своих деревень и применяя одно из вышеуказанных правил в соответствии с желаемой ситуацией. Мы можем разделить этот этап на пять этапов:
- Трансляция запроса на ссылку на слияние в узлы в дереве.
- Каждый узел пересылает сообщение своему соседей и ждет своих ответы.
- Затем узлы отправляют ответы обратно правителю города посредством конвергентной передачи на общую сумму сообщения.
- Затем корень выбирает ссылку слияния и отправляет сообщение выбранному узлу. Тривиально этому сообщению придется путешествовать узлы.
Эти пять этапов запроса, внешнего обнаружения, коммуникации и доставки имеют общую стоимость . Что касается напрасных сообщений в между внутренними узлами, каждый узел имеет не более внутренние края или если это лист, всего напрасные внутренние сообщения.
Теперь о количестве этапов. По ранее представленному свойству по размеру городов каждый город уровня имеет , следовательно, наибольший достижимый ранг равен . Поскольку города могут сливаться/поглощаться только один раз за этап, в общей сложности у нас есть общее количество сообщений.
Корректность
[ редактировать ]Мега-слияние создает минимальное связующее дерево путем объединения поддеревьев по пути с минимальной стоимостью, то есть по ссылке слияния. По определению минимального связующего дерева, минимальное связующее дерево — это набор минимальных связующих деревьев, соединенных путями с минимальной стоимостью. По своей конструкции Mega-Merger пересылает запрос через свою ссылку слияния, и рано или поздно это ребро станет частью дерева благодаря предотвращению взаимоблокировок .
Ссылки
[ редактировать ]- ^ Галлагер, Роберт (1983). «Распределенный алгоритм минимального остовного дерева» (PDF) . Массачусетский технологический институт .
- ^ Авербух, Барух (1987). «Оптимальный распределенный алгоритм для остовного дерева минимального веса, подсчета, выбора лидера и других задач» (PDF) . SIAM Journal по вычислительной технике .