Задачка о распределённом поиске максимума

Тема в разделе "WASM.A&O", создана пользователем Black_mirror, 17 июн 2008.

  1. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Есть N вычислителей. От каждого вычислителя идут каналы связи к соседним вычислителям. Количество вычислителей и топология сети неизвестны. Но известно что граф связный. Вычислители работают по тактам. За один такт вычислитель принимает сообщения от всех своих соседей которые они ему отправили на предыдущем такте, производит некоторые вычисления и может отправить своим соседям сообщения, которые они получат на следующем такте. Размер сообщения фиксированный. У каждого вычислителя в 0й такт времени есть некоторое число Xi и они хотят вычислить максимум. Алгорит считает завершённым когда обладатель максимума узнает о том, что все вычислители знают максимум. Пока считаем что все числа X различны. Потом можно будет порешать задачку когда некоторые числа Xi совпадают, но максимум только у одного вычислителя. Или даже когда максимум может быть у нескольких вычислителей, правда мне кажется что в этом случае решение задачки не гарантируется.
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Возможен ли такой вариант: в собщении есть битовое поле, число бит = числу вычислителей. Если на вычислитель приходит число, большее, чем в нем хранится, то установить бит соответствующего вычислителя в 1. Когда все биты установятся - максимум найден.
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    KeSqueer
    Невозможен, размер сообщения фиксированный, а сколько вычислителей неизвестно.

    Кстати определить какому вычислителю какой бит соответствует они тоже не могут, единственное отличие между вычислителями это как раз число X (есть еще конечно связи с соседями, но для решения этой задачи топология сети несущественна).
     
  4. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    самое простое (что сразу приходит в голову), так это вот что:
    такт0: отправить свое число соседним вычислителям
    такт1:
    принять от соседей их числа и сравнить со своим; запомнить наибольшее и отправить соседям
    ...
    тактN: независимо от топологии, все вычислители имеют максимальное число.
     
  5. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Nero_n
    Только как они определят что все из них уже знают максимальное число?
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Black_mirror
    Топология, блин... Возьмем, к примеру, два одинаковых связных графа и соединим их одним ребром. Тогда за некоторое количество тактов эти два графа могут выяснить значение своего "локального" максимума (т.е. максимума по значению "своих" чисел), а затем обменяться значениями этих максимумов по одиночному соединяющему их ребру и получить глобальный максимум на основе этих двух значений.
     
  7. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    crypto
    Алгоритм "когда-то все об этом узнают" не годится, нужно чтобы хотя бы один вычислитель определил что максимум уже знают все.
     
  8. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Black_mirror
    "Момент истины" наступит, когда после определенного количества тактов найденное вычислителем значение не будет увеличиваться. Это число тактов связано с максимальным (по всем парам различных вершин графа) значением d(u,v), где d - минимальное расстояние между вершиами u и v (как-то эта характеристика графа называется, не помню). Т.е. грубо говоря, когда кажое исходное число будет обработано каждым вычислителем.
     
  9. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    crypto
    Эта характеристика диаметром графа называется, но он нам не известен, у нас может быть цепочка, дерево или вообще полносвязный граф, вот всех этих случаях алгорит должен опреределить момент когда максимум знают все. Но возможно, что это будет определено позже чем все узнают максимум.
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Black_mirror
    Мне кажется, надо хотя бы с деревьев начать, все-таки самые простые связные графы.
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Black_mirror
    Кстати, поскольку на сообщения вроде никаких ограничений не накладывалось, то при каждой пересылке можно передавать номера узлов, от которых были получены сообщения и результат вычисления. При получении сообщения вычислитель анализирует список узлов и при необходимости выполняет вычисления и добавляет новый узел в список.
    При формировании хотя бы на одном вычислителе полного списка узлов (думаю, что несмотря ни на какие ограничения со стороны ТС, количество узлов сети известно :)) вычисления заканчиваются.
    Оффтоп
    В качестве пояснения к количеству узлов.
    Первая фраза:
    Третья фраза:
     
  12. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Black_mirror
    врятли можно придумать что-то лучшее, чем разбивка на подмножества, нахождение локальных экстремумов и затем вычисление глобального. хотя подобная система может работать медленей одиночной машины, ибо есть накладные расходы распределения задания. короче, выигрыш будет только для больших массивов.
     
  14. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    crypto
    Номеров у узлов нет, количество узлов неизвестно.

    [add]Их ровно N, но N неизвестно :)[/add]

    Stiver
    Насколько я понял, там рассматриваются асинхронные алгоритмы, а у нас тут всё работает синхронно.
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Хочется спросить, а почему номеров нет? Так не бывает.
     
  16. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Black_mirror
    То есть стандартные алгоритмы не будут работать в синхронном случае? Интересно.. надо проверить.
     
  17. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    crypto
    Можно числа считать номерами, по крайней мере в первом варианте, когда все числа различны. Но это не значит что они имеют значения от 1 до N. Чему равно N мы вообще не знаем.

    Stiver
    Думаю что будут, только что-то мне подсказывает что они могут быть менее эффективны. Для первого варианта задачи есть решение за время не превышающее удвоенного диаметра графа.
     
  18. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    Black_mirror
    а, так ещё и N неизвестно...

    если бы можно было сначала пересчитаться)...
     
  19. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    такт0: каждый узел отправляет соседям свое число.

    тактХ: максимум из всех доступных (присланные+свое) значений запоминаем (но свое число сохраняем). посылаем максимум всем узлам, кроме тех, от которых пришел максимум (или всем узлам, если текущим максимумом является наше число). НО: если на предыдущем такте от _всех_ соседей пришло одинаковое число, которое больше нашего, то отправляем максимум _всем_ соседям.

    (не вместилось)->
     
  20. Nero_n

    Nero_n New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2008
    Сообщения:
    33
    обладатель абсолютного максимума узнает, что все узлы узнали max, когда к нему от _всех_ соседей прийдет его же собственное число.