Задача двух генералов

Сейчас я объясню, почему невозможно доставить сообщение получателю с абсолютной гарантией получения. Описанную ниже проблему называют "задачей двух генералов".

Две армии, которыми руководят два генерала, приготовились штурмовать город. Армии расположены так, что единственная связь между ними - путём отправки гонца с письмом. Вокруг полно вражеских патрулей, поэтому гонца могут перехватить и он не доберётся до получателя. Штурм должны начать обе армии одновременно, иначе операция обречена на провал. Оба генерала собираются штурмовать город, но время штурма ещё не согласовано.

Проблема заключается в том, чтобы надёжно обменяться сообщениями о "времени Ч" с целью утвердить время начала штурма.

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

Однако, теперь Б не знает, получил ли А подтверждение о том, что Б получил первое послание, ведь гонца могли поймать враги. Поэтому, как только гонец от Б к А доставит подтверждение, А должен теперь отослать ещё одного гонца к Б, который сообщил бы, что письмо с подтверждением от Б к А получено. Казалось бы, этого достаточно, но нет! Теперь А, отослав гонца с сообщением о подтверждении о получении сообщения, полученного от Б, должен как-то удостовериться, что гонец этот добрался до Б.Следовательно, Б теперь должен отправить очередного гонца к А.

Эту цепочку можно продолжать как угодно долго. На каждом этапе либо генерал А, либо Б не уверены в том, что адресат получил подтверждение, поэтому гонцами придётся обмениваться вечно. Это означает, что не существует надёжного способа передать сообщение от А к Б.

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


Средняя оценка: 3.8 (34 голосов)

Познавательно

Человеческая рука есть одна из первых счетных машин!

Движением пальца. Положите обе руки рядом на стол и протяните пальцы. Каждый палец слева направо будет означать соответствующее порядковое число: первый слева — 1, второй — 2, третий — 3, четвертый — 4 и т. д. до десятого, который будет обозначать число 10. Например, Нам необходимо умножить 7 на 9. Теперь поднимите седьмой палец. Число пальцев, лежащих налево от поднятого пальца, будет числом десятков произведения, а число пальцев направо — числом единиц. Налево от поднятого пальца лежат 6 пальцев, а направо — 3. Значит, результат умножения 7 на 9 равен 63.

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