Pull to refresh

Comments 65

Вы же элементарно и надежно договариваетесь по телефону, а это тоже обмен сообщениями. Значит определенно достаточно определенного k сообщений и наиболее вероятно в сообщении просто нужно указывать специальную информацию и передав её обратно — подтверждаем что получили её изначально
Это не 100% надежно. Жена может сказать «хорошо, так и сделаем», но на самом деле она не услышала или услышала что то другое. Просто для бытовых дел этой надежности обычно хватает
Это обычно мужья так делают: )
Моя жена в этом просто уверена: )
Мне жалко детей математиков, что же у них в доме то творится, если они без заморочек не могут договориться кому детей из школы забирать…
Лучше спросить об этом самого Вассермана, ну или Перельмана, как они своих детей из школы забирают.
Теперь понятно, почему Вассерман решил не заводить детей.
Каждая следующая итерация повышает уверенность в принятии информации.
Можно договориться, что итераций не будет больше, эм, десяти -)))
Вопрос в том, сколько итераций потребуется на то, чтобы договориться о количестве итераций.
-Я заберу дочь. Ок?
-Ок.
-Что значит «Ок»?
Как уже говорили выше, при таком раскладе жена не узнает, дошла ли СМС со словом ОК до мужа.
Это все понятно. Как понятно и то, что в условиях, когда на любом шаге нет информации о актуальности информации у партнера, её не будет при любом количестве итераций.

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

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

За исключением детей, к каждому из которых периодически будут приезжать либо оба родителя, либо ни одного, но это не головняк родителей, которые не могут договориться потому что у них говно оператор.
Отчет о прочтении/прослушивании/просмотре сообщения?
Не поможет, нужно быть уверенным, что отчет увиден. Плюс к этому, есть вероятность, что отчет и не дойдет.
Можно с любой, заранее заданной, точностью приблизиться к полной уверенности, если у обоих нет амнезии и они могут считать последовательные подтверждения. Чем больше подтверждений, тем больше уверенность.
Я думаю, что с возрастанием итераций должно приходить осознание, что договориться не получается…
С возрастанием итераций передается больше информации. Если этого не происходит, нужно менять или протокол или канал.
Испекла мать вишневый пирог и хотела его дать детям после обеда. Он лежал на тарелке. Гитлер никогда не ел пирога и все нюхал его. И очень он ему нравился. Очень хотелось съесть. Он все ходил мимо пирога. Когда никого не было в горнице, он не удержался, схватил один кусок и съел. Перед обедом мать посмотрела на пирог и видит, одного куска нет. Она сказала отцу.

За обедом отец и говорит: «А что, дети, не съел ли кто–нибудь один кусок пирога?» Все сказали: «Нет». Гитлер покраснел, как рак, и тоже сказал: «Нет, я не ел».

Тогда отец сказал: «Что съел кто–нибудь из вас, это не хорошо; но не в том беда. Беда в том, что с нами за одним столом сидит ГИТЛЕР!

И все заплакали, а Гитлер рассмеялся…
Они не знают, что мы знаем, что они знают, что мы знаем! Джо, ничего им не говори!
Погодите, а как решается эта проблема на различных уровнях сетевых протоколов? Оба клиента знают, что данные дошли от клиента к клиенту, но один из них точно не знает, что другой об этом знает?
Можно передать ключ в месте с сообщением 2й стороне, а 2я сторона должна отправить подтверждение о получении, прикрепив к нему этот ключ. Если отправитель не получил подтверждения, он отсылает сообщение с тем же ключом повторно. Но такой вариант больше IM касается.
Это какой протокол? Только одна итерация?
Ниже уже ответили: habrahabr.ru/post/197034/#comment_6833620
В TCP это делается при трехэтапном рукопожатии и просто при подтсверждении приема пакетов (ACK).
Очень просто, протоколы не дают 100% гарантии доставки. Плюс большинство протоколов односторонние в плане необходимости подтверждения доставки: один узел отправляет пакет и ждёт подтверждения, если не получил, то отправляет его заново пока не получит подтверждения или не решит вывалиться с ошибкой. Получатель же игнорирует повторно присылаемые пакеты.
Более того, если мы на секундочку представим, что n-ое сообщение не требует подтверждения, то отсюда сразу же следует, что совершенно неважно оно будет прочитано или нет.

Это почему? Отсюда следует, что совершенно неважно, знаем ли мы, прочитано оно или нет.
Можно ведь вместо подтверждения (или вместе с ним) передавать активный план (то есть тот которого собираешься придерживаться). Если получаемый в сообщении план совпадает с твоим собственным — прекращаешь синхронизацию, иначе меняешь свой активный план на полученный и проводишь ещё один шаг синхронизации. Если в линии передачи нет помех, то 2-х передач будет достаточно, иначе после фиксированного числа шагов прекращаешь эту бесперспективную процедуру и откатываешься к предыдущему плану, который был достоверно синхронизирован.
Такое решение конечно не годится, если изменения в плане возникают быстрее чем мы успеваем их синхронизировать.
так ты не можешь быть уверен что план дошел )
Постулируем, что
1) Обе стороны могут передавать информацию друг другу только посредством обмена сообщениями.
2) Обе стороны на 100% усваивают переданную им информацию, интерпретируют её однозначно и за приемлемое время.
3) Если переданное сообщение содержит инструкции, требующие выполнения определённых действий, то получившей сообщение стороной они исполняются детерменированно, единственно возможным образом.

Алиса: [Некоторая важная информация]. Передаю тебе x. Пришли мне x+1 в течение timeout.
Боб: x+1. Пришли мне x+2 в течение timeout.

После получения x+1 от Боба в течение timeout Алиса уверена, что Боб получил важную информацию. Если в течение timeout Алиса не получила от Боба x+1, то она повторяет передачу важной информации (с новым x).

Алиса: x+2.

После получения x+2 от Алисы в течение timeout Боб уверен, что Алиса уверена в том, что он получил важную информацию. Если в течение timeout Боб не получил от Алисы x+2, то он повторяет своё последнее сообщение.

Вот пусть Алиса послала x+2 и Боб это получил. По вашей стратегии, Бобу и Алисе нужно обрадоваться и ничего больше друг другу не посылать.

Но, судите сами, Алиса же не может быть уверена, что Боб получил x+2. Алиса может заключить, что Боб не получил x+2, и пытается посылать свое последнее сообщение x+1. Но они все не доходят.
Насколько я понял, цель в достижении следующего состояния.
1) Боб получил важную информацию.
2) Алиса уверена, что Боб получил важную информацию.
3) Боб уверен, что Алиса уверена в том, что он получил важную информацию.

Но, судите сами, Алиса же не может быть уверена, что Боб получил x+2. Алиса может заключить, что Боб не получил x+2, и пытается посылать свое последнее сообщение x+1. Но они все не доходят.
Нет, Алиса не будет постоянно посылать x+2. Алиса повторно пошлёт x+2 только в случае, если Боб повторит сообщение «x+1. Пришли мне x+2 в течение timeout.»
А я и не писал, что Алиса будет постоянно посылать x+2. Напротив, Алиса, по вашей стратегии должна замолкнуть. Но Алиса не может быть уверена, что Боб получил это x+2. Алиса может предположить, что Боб нихрена не получил x+2 и Боб уже миллионый раз пытается посылать x+1, который все никак не доходит.
уже миллионый раз пытается послать x+1

Алиса в моей схеме не посылает x+1. Второе — у Алисы нет цели быть уверенной в том, что x+2 дошло до Боба. Алиса уже уверена (когла посылает x+2), что важная информация дошла до Боба. Остается только достигнуть выполнения пункта «Боб уверен, что Алиса уверена в том, что он получил важную информацию». Для этого Алиса посылает x+2, а Боб, если не получает x+2, «запрашивает его повторно» так сказать.

— Я заберу детей из школы. Пришли мне 1 в течение 1 минуты.
(не дошло)
— Я заберу детей из школы. Пришли мне 1 в течение 1 минуты.
(дошло)
— 1. Пришли мне 2 в течение 1 минуты.
— 2.
(не дошло)
— 1. Пришли мне 2 в течение 1 минуты.
— 2
(не дошло)
— 1. Пришли мне 2 в течение 1 минуты.
— 2
(дошло)

Как-то так.
Естественно, какие-то ограничения на количество попыток придётся установить.
Алиса: Я заберу детей из школы. Вот те x. Пришли мне x+1 в течение 1 минуты.
(потеряно)

Алиса: Я заберу детей из школы. Вот те x. Пришли мне x+1 в течение 1 минуты.
(доставлено)

Боб: x+1. Пришли мне x+2 в течение 1 минуты.
(потеряно)

Боб: x+1. Пришли мне x+2 в течение 1 минуты.
(доставлено)

Алиса: x+2.
(потеряно)

Боб: x+1. Пришли мне x+2 в течение 1 минуты.
(доставлено)

Алиса: x+2.
(потеряно)

Боб: x+1. Пришли мне x+2 в течение 1 минуты.
(доставлено)

Алиса: x+2.
(доставлено)
Я понял загвоздку. Вы пишете:
Насколько я понял, цель в достижении следующего состояния.
1) Боб получил важную информацию.
2) Алиса уверена, что Боб получил важную информацию.
3) Боб уверен, что Алиса уверена в том, что он получил важную информацию.

Как показывается в статье, что нет. Надо, чтобы еще и Алиса была бы уверена, что Боб уверен, что Алиса уверена, что он получил важную инфу. И еще бесконечно таких усложняющихся предложений.

Из статьи:
… если мы на секундочку представим, что n-ое сообщение не требует подтверждения, то отсюда сразу же следует, что совершенно неважно оно будет прочитано или нет. Значит его и не надо посылать.
Ага, я тоже кажется разобрался. Значится так. Если взять мои первые постулаты
1) Обе стороны могут передавать информацию друг другу только посредством обмена сообщениями.
2) Обе стороны на 100% усваивают переданную им информацию, интерпретируют её однозначно и за приемлемое время.
3) Если переданное сообщение содержит инструкции, требующие выполнения определённых действий, то получившей сообщение стороной они исполняются детерменированно, единственно возможным образом.

и достичь состояния
1) Боб получил важную информацию.
2) Алиса уверена, что Боб получил важную информацию.

то это приведёт к согласованным действиям обеих сторон (Алиса заберёт детей из школы, Боб останется дома). Иными словами, для согласования действий Бобу не нужно быть уверенным, что Алиса уверена в том, что он получил важную информацию (и дальше по рекурсии).
Иначе говоря, автор статьи как-бы ненароком подменяет цель подобного обмена сообщениями. Цель — в согласовании будущих действий обеих сторон, а не в полной уверенности обеих сторон в том, что собеседник получил все сообщения и собеседник уверен в том, что все его сообщения получены.

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

1) Боб получил важную информацию.
2) Алиса уверена, что Боб получил важную информацию.

то это не приведет к согласованным действиям. Алиса обязательно должна Бобу подтвердить, что она уверена, что Боб получил информацию. Иначе будет противоречие, изложенное в статье:
… если мы на секундочку представим, что n-ое сообщение не требует подтверждения, то отсюда сразу же следует, что совершенно неважно оно будет прочитано или нет. Значит его и не надо посылать.
Нет, не должна, т. к.
Если переданное сообщение содержит инструкции, требующие выполнения определённых действий, то получившей сообщение стороной они исполняются детерменированно, единственно возможным образом.

Если Боб получил сообщение и Алиса уверена в том, что Боб получил сообщение, то Алиса уверена в том, что Боб точно исполнит инструкции (останется дома), содержащиеся в сообщении (а Алиса заберёт детей).
Ну а для достижения состояния
1) Боб получил важную информацию.
2) Алиса уверена, что Боб получил важную информацию.
всё же понадобится трёхэтапное согласование (наподобие handshake'а, который в TCP).
На самом деле тут можно даже упростить немного:
Алиса: [Некоторая важная информация]. Передаю тебе x. Пришли мне x+1 в течение timeout.
Боб: x+1.

После получения x+1 от Боба в течение timeout Алиса уверена, что Боб получил важную информацию.
Далее если по истечении timeout от Алисы не приходит повторного запроса прислать ей x+1, то Боб становится уверен, что Алиса уверена в том, что он получил важную информацию.
Далее если по истечении timeout от Алисы не приходит повторного запроса прислать ей x+1, то Боб становится уверен, что Алиса уверена в том, что он получил важную информацию.
А если повторный запрос до Боба просто не дошёл?
Абсолютно не в тему, но вспомнилась старая задача. Не ищите решение, попробуйте решить сами, это не так сложно и достаточно интересно.
У некоторого султана было два мудреца: Али-ибн-Вали и Вали-ибн-Али. Желая убедиться в их мудрости, султан призвал мудрецов к себе и сказал: «Я задумал два числа. Оба они целые, каждое больше единицы, но меньше ста. Я перемножил эти числа и результат сообщу Али и при этом Вали я скажу сумму этих чисел. Если вы и вправду так мудры, как о вас говорят, то сможете узнать исходные числа».

Мудрецы задумались. Первым нарушил молчание Али.
— Я не знаю этих чисел, — сказал он, опуская голову.
— Я это знал, — подал голос Вали.
— Тогда я знаю эти числа, — обрадовался Али.
— Тогда и я знаю! — воскликнул Вали.
И мудрецы сообщили пораженному царю задуманные им числа.

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

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

и ещё:
Есть три мудреца — А, В и С.
Есть 4 зелёные и 4 красные марки.
Мудрецам завязывают глаза и каждому наклеивают на лоб по две марки, а две оставшиеся прячут.
После этого мудрецы открывают глаза (каждый видит лбы двух других, но свой, естественно, не видит) и между ними происходит следующий разговор:
А: я не знаю, какие марки у меня на лбу.
В: я не знаю, какие марки у меня на лбу.
С: я не знаю, какие марки у меня на лбу.
А: я не знаю, какие марки у меня на лбу.
В: теперь я знаю, какие марки у меня на лбу.

Какие марки на лбу у мудреца В?

Я одно время собирал подобные задачи, эти две — только несколько из вспомнившихся.

А по вопросу кого забирать из садика… )) Уважаемые родители — не пишите СМСки друг другу, просто позвоните друг другу — договоритесь за 10 секунд. ))
Так как третья задача симметрична относительно цветов марок, то, предположив, что «задача имеет решение и оно единственное» — это решение может быть только: 1 зеленая и 1 красная марка :)
Второй задаче не хватает условия, что ленты обоих цветов прикреплены, а не просто «могут быть».
У это задачи более чем 1 решение. Либо условие некорректо.
корректно, и решение только одно.
Что подумал Али
произведение имеет больше двух простых множителей — то есть однозначно на два множителя не разлагается
Что подумал Вали
Ну да, я так и знал. Как эту мою сумму не дели на два слагаемых, никогда два простых не получится.

тут мне надоело держать это в голове, и я быстренько сделал однострочник на перле, что выдает все числа, которые невозможно разбить на два простых слагаемых меньше ста
Что подумал Али
Ага! То есть у Вали число, которое невозможно разбить на два простых слагаемых! Тогда я знаю ответ!

и я дописал еще пару циклов, чтобы для всех чисел, которое невозможно разбить на два простых слагаемых, считать все возможные разбиения на два слагаемых, перемножать их, и выбирать такие произведения, которые встречаются только по одному разу (так как зная произведение, Али однозначно вычислил сумму)
Что подумал Вали
Ага, то есть у него такое произведение, которое встречается в списке только один раз! Ну конечно же, тогда это…

и я добавил еще одну проверку, в списке произведений, что встречаются по одному разу, порождающая их сумма тоже должна встречаться только один раз — то есть, например, 11, можно записать как 2 + 9, 3 + 8, 4 + 7, 5 + 6. Произведения, соответственно, будут 18, 24, 28, 30. Но еще есть 17, можно записать как 2 + 15, тоже произведение 30. То есть, если бы султан загадал 5 и 6, то Али бы знал только 30, а его можно записать как 2*15 или как 5*6. Остальные три произведения встречаются только по разу, и если бы Али знал, что произведение равно, скажем, 28, он бы тут же догадался, что задуманы были 4 и 7. Но Вали бы это не помогло, зная сумму 11, он понимает, что Али мог бы догадаться, если бы ему сказали 28, но также и при 14, и при 18. Чтобы Вали угадал число, оно должно иметь только одно разбиение на пару слагаемых, которые дают однозначное произведение.
ответ
Таких числа только два — 17 и 197. Но 197 быть не может, его в принипе можно единственным способом разложить на слагаемые меньшие 100. Услышав 197 Вали бы сразу сказал, «98 и 99, вы что, султан, меня за идиота держите?». Так что правильный ответ — 17.
Критика
Мне кажется, что вы зря сделали вот это: и я дописал еще пару циклов, чтобы для всех чисел, которое невозможно разбить на два простых слагаемых, считать все возможные разбиения на два слагаемых, перемножать их, и выбирать такие произведения, которые встречаются только по одному разу.
Вали не надо это делать для всех пар чисел, у него перед глазами есть его конкретная сумма, которая не раскладывается на 2 простых слагаемых. Существуют и другие числа, по которым мудрецы могут дать ответ. Например, 4 и 37.
Мой вариант решения
1. Раз Али не знал ответ сразу, то произведение раскладывается минимум на 3 простых множителя.
2. Раз Вали знал это, значит сумма непредставима в виде двух простых слагаемых. Это означает, что сумма нечётная, так как любоё чётное число кроме 2 представимо в виде суммы двух простых чисел. Вообще-то в общем виде это ещё не доказано (проблема Гольдбаха), но в нашем случае это так.
3. Нечётное число можно получить только суммой чётного и нечетного слагаемых, значит одно из искомых чисел чётное, другое нечетное.
4. Рассмотрим простые делители нашего искомого нечётного числа. Очевидно, что среди них нет ни одного чётного делителя, иначе бы число бы чётным.
5. Али взглянул на простые множители своего произведения и понял, что все чётные делители должны принадлежать только одному числу. То есть искомое нечётное число состоит только из простых нечётных множителей, а чётное число из простых чётных множителей количеством минимум 1 и нечётных множителей количеством минимум 0. То есть в искомом чётном числе также может быть несколько нечётных простых множителей.
6. Раз Али, получив информацию из пункта 3, сразу понял ответ, значит у него был только один нечётный множитель. Ведь если бы их было два, то искомое нечётное число могло бы быть как любым из них, так и их произведением, то есть у Али было минимум два варианта нечётного числа и он бы не дать ответ. Значит искомое нечётное число — это единственный простой нечётный множитель. Раз нечётных множителей не осталось, значит чётному числу остались только чётные простые множители. Есть только одно чётное простое число, это 2. Из пункта 1 следует, что этих двоек в произведении минимум 2. То есть возможные варианты 4, 8, 16, 32, 64.
7. Итак, загаданные числа это какое-то нечётное простое число и одно из чисел {4, 8, 16, 32, 64}.
8. Если до пункта 7 додумался, значит додумался бы и Вали, он же мудрец. Раз ему хватило этой информации для ответа, значит его сумма представима в виде [нечётное простое число + {4, 8, 16, 32, 64}] одним единственным способом. Вот почему не подходит, например, 11:
11 = 4 + 7
или
11 = 8 + 3.

Ну а дальше перебор, который дал несколько решений:
4 13
4 37
4 61
8 89
16 13
16 37
16 43
16 73
16 97
32 89
64 43
64 53
64 59
64 61
64 67
64 71
64 73
64 79
64 83
64 97

Похоже, что в условии задачи пропущено, что, числа, которые были сказаны мудрецам, меньше 100. С этим условием получается только одно решение:
4 13

Не читала все комменты. может повторюсь.
Ошибка отца этих детей в фразе «если не прочитала — все остается как было». Ведь если она не прочитала — оно и так останется, как было.
А если прочитала — зачем дописывать? чтобы рождать цепочку «я подтверждаю что ты подтверждаешь»?

Ведь если бы он просто написал «давай сделаем так, согласна?», она бы написала «да» и вопрос был бы исчерпан.

Хотя вопрос в другом. я понимаю. В математике, да.
Ведь если бы он просто написал «давай сделаем так, согласна?», она бы написала «да» и вопрос был бы исчерпан.

Нет, жена должна быть уверена, что муж получил ее ответ «да».
В авиации есть та же проблема при передаче управления между первым и вторым пилотом, и стандартный протокол — три сообщения.

Первый пилот: «You have control»
Второй пилот: «I have control»
Первый пилот: «You have control»

Наихудший вариант — потеряется последнее сообщение, но даже в этом случае самолёт без управления не останется.
На самом деле это актуальная проблема коммуникации. Именно потому в смс и предусмотрен отчёт о доставке. Или в e-mail — ответное письмо об ошибке при неудаче доставки.

А ещё следствия этого в виде значка о доставке можно видеть во всех современных мессенджерах — skype, whatsapp, и т.д.

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

Телефон тоже не идеален, но, во-первых, при ошибках канала явно теряется взаимная связность разговора. Всем известная побуквенная передача Женя Олег Павел Анна — разновидность избыточности и по сути аналог контрольной суммы. Ещё есть достаточно надёжный бит — вешание трубки, такое EOF.
На самом деле каждому достаточно было отправить по два сообщения. Потому что тогда уже точно каждому уже дошло хотя бы одно.
Sign up to leave a comment.

Articles