2013-03-13 3 views
1

Мне было интересно, существует ли алгоритм выбора недетерминированных лидеров (в одно направленном кольце), который обеспечивает завершение. Я не могу думать ни о одном, и не могу найти тот, который не является детерминированным. Некоторые из которых я нашел:Существует ли недетерминированный алгоритм выбора лидера?

  • Выберите узел с наивысшим идентификатором процесса, который будет лидером (детерминированным) и завершается.

  • Случайно решайте, хочет ли узел быть лидером, если в кольце есть другой узел, который хочет быть листом, перезапустите весь процесс. Это не прекращается, но имеет вероятность прекращения.

Может ли кто-нибудь дать мне несколько советов о том, как создать распределенный алгоритм бездетемистического выбора лизинга? И, может быть, объясните это в непрофессиональных условиях.

Спасибо за все!

+2

Я не уверен, полностью ли я понимаю вопрос, но можете ли вы назначить случайное число узлам, наивысший/самый низкий - лидер? – vlad

+1

Рассматривайте каждого кандидата как карту в колоде игральных карт, затем перетасовывайте колоду и берете человека сверху как лидера? Перетасовка колоды карт может быть сделана как (распределенная, так и криптографически) (http://en.wikipedia.org/wiki/Mental_poker#Shuffling_cards_using_commutative_encryption). –

+0

Уважаемый Влад, это не имеет смысла, так как если бы я это сделал, тогда он будет делать то же самое, что «присваивать идентификаторы процессов» всем процессам. Дорогой Голубой Раджа, я не могу этого сделать, потому что нет «общей» власти «перетасовывать» карты. Все узлы запускаются в одно и то же время и знают друг о друге (поскольку они могут отправлять им сообщения), однако они должны сами решить, как выбрать лидера (все они имеют один и тот же код кстати). – Snowflake

ответ

1

Существует не вероятностный (анонимный) алгоритм выбора лидера с обоими, гарантированное прекращение и гарантированная правильность (только один лидер). Если я правильно помню, вы найдете доказательство в книге Н. Линча о распределенных системах.

Однако существуют алгоритмы с пределом вероятности нуля для не-завершения для достаточной продолжительной работы алгоритма. Кроме того, ожидаемое время выполнения довольно короткое (AFIR, в порядке ln (k) для k инициаторов).

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

EDIT 1-3:

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

Если вы хотите иметь другой результат для не-анонимных членов, вы можете, например, использовать алгоритм две фазы:

  1. Выполнение классического лидера выборов => а узлы А с самым высоким ID выигрывает
  2. Пусть рулон кубик, чтобы определить фактический лидер.

Элемент случайности также может быть распределен:

  1. Любых узлов знает множество идентичностей (S) (если нет, то использовать алгоритм затопления сказать)
  2. Всех узлов выбрать случайно идентификатор ouf S и отправить его на любой другой узел
  3. Идентификатор, который называется чаще всего, выигрывает. Если имеется более одного такого идентификатора, выберите один из них детерминированным способом, например, медиана.

Прекращение и неопределенный результат предоставляются для обоих алоритов. Тем не менее, первый имеет более низкую среднюю сложность сообщения (пжурналап против , в худшем случае сложность такой же) и более справедливой (то есть вероятность того, что ID выигрывает в equaly распределяется , что не соответствует второму алгоритму). Я уверен, что по крайней мере последний недостаток можно устранить с помощью более сложного алгоритма, но вопрос здесь заключался в общем существовании такого алгоритма.

+0

Дорогой Маттиас, я не прошу об анонимном алгоритме выбора лидера, так как мы можем использовать информацию о идентификаторе процесса. Возможно, я должен уточнить, что я имею в виду с недетерминированной программой. Недетерминированная программа - это программа, которая каждый раз дает один и тот же ввод, может показывать разные исполнения и, следовательно, давать разные результаты. Кроме того, я думаю, что вы описываете здесь вероятностный алгоритм, и мне интересно, как это может гарантировать прекращение ... Спасибо за ваш ответ, хотя! – Snowflake

+0

@Snowflake: Пожалуйста, см. Мое (дополнительное) редактирование. – Matthias

+0

Дорогой Маттиас, я действительно думал о двухфазном алгоритме. Однако, похоже, это кажется бессмысленным выбором «фактического лидера» снова, на мой взгляд. Есть ли альтернативы? – Snowflake

0

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

Это на самом деле довольно легко. Относитесь к каждому клиенту в виде карточки в колоде карт, затем используйте алгоритм mental poker(который является распределенным алгоритмом для случайного и случайного перетасовки колоды карт), чтобы перетасовать его. Затем просто возьмите первую карту в качестве лидера.