2010-05-15 6 views
2

Я столкнулся с некоторой проблемой, когда мне нужно разработать алгоритм выбора лидеров для ориентированного гиперкуба. Это нужно сделать, используя турнир с числом раундов, равным размеру D гиперкуба. На каждом этапе d с 1 < = d < D два кандидата-кандидата соседних d-мерных гиперкубов должны конкурировать, чтобы стать единственным кандидатом-лидером (d + 1) -мерного гиперкуба, который является объединением их соответствующих гиперкубов.Алгоритм выбора лидера для ориентированного гиперкуба

+1

Предположим, нам нужна дополнительная информация. Примерный случай может помочь делу в большой степени. – Guru

+0

Дополнительная информация Вам нужна дополнительная информация? – john

+2

Пример ввода, ожидаемый выход и то, что именно вы застряли. –

ответ

4

Это было долгое время, так как я изучал распределенные системы, но я надеюсь, что это помогает немного :)

Проблема:Leader election в сети с hypercube tolopogy. В этой топологии каждый узел имеет ровно D соседей (где D - размер гиперкуба). Так как гиперкуб ориентирован, узлы знают, какая из их ссылок соответствует каждому измерению. Кроме того, я предполагаю, что все узлы отмечены каким-то уникальным идентификатором, типичным для подобных проблем.

Если я хорошо понимаю ваши рекомендации по решению, алгоритм кажется простым: узел имеет ровно D состояний. В каждом состоянии 1 < = d < = D он связывается со своим соседом по оси d. Это сообщение состоит из отправки ему идентификатора лучшего кандидата, которого он знает (когда d = 1 это просто его собственный идентификатор) и сравнения его с идентификатором, полученным одноранговым узлом. Теперь узел знает лучший идентификатор субкуба порядка d (определяемый осями 1,2 ..., d), которому он принадлежит. Таким образом, на этапе D все узлы знают о глобальном лучшем, и алгоритм завершается консенсусом.

Например, предположим следующую топологию (D = 2) и значения ID:

(1) (2) 
    1-----2 
    |  | 
    |  | 
    4-----3 
    (4) (3) 

Идентификаторы в скобках указывают лучшие идентификаторы, известные каждым узлом до сих пор.

В первой итерации (d = 1) работает вдоль горизонтальной оси, и заканчивается следующим образом:

(2) (2) 
    1-----2 
    |  | 
    |  | 
    4-----3 
    (4) (4) 

второй (и последней) итерации (D = 2) работает по вертикальной оси, и заканчивается следующим образом:

(4) (4) 
    1-----2 
    |  | 
    |  | 
    4-----3 
    (4) (4) 

Узел номер 4 был выбран, если требуется (самый высокий идентификатор).

Количество сообщений сложность

Для каждого ребра в гиперкубе мы имеем ровно 2 сообщений (по одному на каждой стороне). Так как формула для числа ребер в гиперкубе размерности D есть E = D * 2^(D-1), мы имеем точно сообщения M = D * 2^D. Чтобы вычислить сложность как функцию N (количество узлов), напомним, что N = 2^D, поэтому M = N * log N.

+1

Да, это было очень полезно, и это помогло понять основную идею, но я также хотел знать, как создать для нее алгоритм, поскольку есть несколько способов сделать эти выборы (которые я выяснил позже) ,Благодаря вашей помощи и немного моего собственного мышления мне удалось разработать алгоритм. Я отправлю свое решение через несколько недель. Большое спасибо за беспокойство и ваше время! – john