LINUX.ORG.RU
ФорумTalks

[Brainstorm] Задача двух генералов.

 


0

1

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

Для тех, кто не в теме, суть™:

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

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

«Да, мы оба атакуем в указанное время.»

Отметим, что достичь такого соглашения очень просто — достаточно одного сообщения с временем начала штурма и одного сообщения, подтверждающего получение первого. Сложность задачи заключается в невозможности разработать алгоритм гарантированного обмена этими сообщениями.

Для тех, кто еще не понял:

Есть долина, на дне долины - враг. По разные стороны - два дурака-генерала. Необходимо, чтобы оба генерала договорились о времени атаки, а именно: Первый генерал получил от второго следующее сообщение: «Мужиг, мы отакуем в 15:05». Второй генерал получил от первого следующее сообщение: «Ога! В 15:05 Чмоки чмоки!» Проблема в том, что любой посыльный может быть перехвачен с вероятностью N.

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

К слову, эта задача идеально иллюстрирует протокол TCP.

Ну что, где тут аналитики?

сигнальные костры еще никто не отменял

XVilka ★★★★★
()
Ответ на: комментарий от Yareg

А кого это останавливало? Мы же не философы, мы тут в большинстве администраторы и программисты, у нас мозги другие.

AlexCones ★★★
() автор топика

Напомню:

Единственным способом связи между генералами является отправка посыльных с сообщениями через долину.

AlexCones ★★★
() автор топика
Ответ на: комментарий от different_thing

>пусть светом общаются

А какая разница? Тогда вместо не дошедших гонцов будут не увиденные светосигналы.

akinator ★★
()
Ответ на: комментарий от AlexCones

Искусственные ограничения - не для творческих умов! Часто ведь получается так, что задачу «в лоб» не решить (даже и в математике), и мы придумываем «обходной» путь, вплоть до создания необходимых инструментов и нового математического аппарата.

XVilka ★★★★★
()

отправить посыльного в обратную сторону - земля круглая, а для ускорения дать волшебного пенделя

visual ★★★
()

Чо они как лохи?! Взяли бы и созвонились по мобильному.

r_asian ★☆☆
()
Ответ на: комментарий от XVilka

По сути сия задача иллюстрирует проблемы TCP-связи. То, что вы предлагаете сводится примерно к этому:

- Так, начальник дал приказ: «сделать надежный канал связи с помощью TCP» - Но он же может терять пакеты! - Окей, пустим параллельно с TCP UDP, который будет нести индекс и хеш каждого пакета и просить передать пакет повторно, если не дойдет.

Чувствуете, что это не Ъ?

AlexCones ★★★
() автор топика

Надо искривить пространство каким-нибудь массивным телом, например телом одного из генералов.

r_asian ★☆☆
()
Ответ на: комментарий от Yareg

Хотя я не прав. Ну пусть преграда будет бесконечно вниз. У нас же как бы две разные армии, а тут они встретились.

Yareg ★★★
()
Ответ на: комментарий от AlexCones

Того, который будет нести «индекс» схватят, и пакеты не склеют.

И вообще, если время 23:40 и 4 гонцам раздать цифры 2,3,4,0, то сообщения будут не равноценны. На 10 минут опоздать ещё можно, а на 10 часов - нет.

different_thing
()
Ответ на: комментарий от akinator

Посылаем пакет, ждём n времени ответа, если ответа нет, повторяем, опять ждём, повторяем весь цикл m раз, если ничего не вышло, то говорим, что связи нет. Вроде бы так.

Yareg ★★★
()

А можно я тоже повыё...

А генералы-то равноправные? Если да, то расмотрим такие два сценария:

1. Оба генерала шлют посыльных. Генерал Аговорит: атакуем в 15:05. Генерал Б: атакуем в 13:44. Каждый получает сообщение и шлет ответ: А: «ты чо чувак, 15:05 и ниибет» Б: «какого пуя? 13:44 и ни минутой позже». И т.д и т.п

2. Оба генерала шлют посыльных. Генерал Аговорит: атакуем в 15:05. Генерал Б: атакуем в 13:44. Каждый получает сообщение и шлет ответ: А: «точно, 13:44 лучше, так и быть». Б: «бляха-муха, я тебя уважаю: бъём в 15:05»

В обоих случаях они будут спорить до посинения. Так что, для полноты задания нужно указать что один из генералов имеет приоритет над другим

phrm ★★
()

Не нужно никакого TCP, нужно какому-то лоху дать табличку «гонец» (-100 sneaking, +100 CH, -100 DEX) и послать с группой, а гонцу дать табличку лох (+100 sneaking, -100 CH, +100 DEX). Пока все будут ловить лоха, гонец спокойно доставит сообщение

different_thing
()
Ответ на: комментарий от Yareg

> если ничего не вышло, то говорим, что связи нет

Генерал A шлёт генералу B: «атакуем в 6:05».
Генерал B шлёт генералу A: «вас понял, подтверждаю, в 6:05».

Вопрос теперь в том, как генералу B выяснить, получил ли A его подтверждение? Ведь если до A подтверждение не дошло, то A на атаку не решится, и войско генерала B раскрошат в фарш...

Manhunt ★★★★★
()

Астральный воин телепортируется к соседней армии, в которой дежурит гадалка-медиум. Он вселяется в ее тело и передает сообщение.

vurdalak ★★★★★
()
Ответ на: комментарий от Manhunt

Похоже, что вы нашли еще одну проблему - сколько бы таких итераций «рукопожатия» не было бы проведено, не существует 100% гарантии получить подтверждение, что последняя не была перехвачена.

AlexCones ★★★
() автор топика

>Ну что, где тут аналитики?
Пусть каждый генерал атакует прямо сейчас!

Anonymous ★★★★★
()

Напалмом.

Deleted
()

Эта задача без решения, т.к. противник подменит гонца и дезинформирует обоих генералов.

TGZ ★★★★
()
Ответ на: комментарий от Manhunt

В TCP ACK на ACK же не делается. Но, наверное, без дополнительных проверок с TCP как раз можно на такую фигню наткнуться.

В любом случае, отсутствие решения доказано, поэтому ничего кроме элитных боевых почтовых мышей или высвечивания времени лазером на поверхности луны, что противоречит условию, мы не сделаем.

Yareg ★★★
()
Ответ на: комментарий от TGZ

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

Yareg ★★★
()

направить пушки на расположение противника и трупиками выложить время начала атаки

Skeletal ★★★
()
Ответ на: комментарий от ptah_alexs

не подойдет. Когда они дойдут до цели - все армии уже будут разгромлены

Хотя да, тактика подождать, пока противник сдохнет от старости, тоже имеет место быть.

XVilka ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.