Капитан Приём, штурман м-р Доза и 1-й помощник м-р Перебор (Аэроплан 2)

Oct 25, 2020 17:07


Я не знал, что наши переводчики придумали совершенной свой текст для этого отрывка из Аэроплана-2 (имена команды видны в субтитрах):

image Click to view



Капитан Over (Over - над), штурман Unger (Under - под), помощник Dunn (Dunno - не знаю)

У нас:

- Господа, познакомьтесь, это ваш капитан - Капитан Прием. - Господа, добро пожаловать на борт нашего лайнера. - Это ваш штурман мистер Доза и ваш старший помощник мистер Перебор.

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

В принципе ничего особо сложного (если не считать, что я уже Бог знает какой протокол передачи данных придумываю - улучшая прежние), но мне хочется добиться линейности времени работы от i, j при извлечении подстроки размера j символов из строки s, начиная с позиции i:

str(s, i, j)

И раз канал имеет ограниченную пропускную способность - приходится пускать адрес к нужной ячейке, разбив его на разряды. И количество символов - так же. При движении этих пакетов данных, состоящих из «цифр», от них (пакетов) каждая ячейка отнимает 1. И в нужной ячейке значение из i становится равным 1, затем можно передавать символы и уменьшать j, пока он не станет равным 1.



Но тут есть техническая сложность - когда от разряда 1 отнимаешь 1, то не понятно - делать из 1 ноль, или вообще ничего? Ведь следующая по старшинству  цифра после данной цифры (а у меня цифры в пакете данных идут от младшей в числе к самой старшей) может быть, а может и не быть. Если более старшей нет - то это (-1) от самого старшего разряда, который равен 1 и превращение его в 0. А это не правильно - мы же не пишем нули в числе 10 так: 00010.

А если число 1, то отнимать 1 вообще поздно - мы уже достигли нужной ячейки. А если число 1 превратить в 0, то дальше (при движении пакета данных через следующую ячейку) вычитание даст 9 и необходимость уменьшить следующий (старший) разряд на 1, а старшего разряда нет.

Получается, что получив разряд, где цифра 1 или 0, надо не вычитать, а дождаться следующего разряда. Из-за этого не получается обеспечить синхронное движение всех цифр - что обеспечило бы линейность времени работы от i и j.

Но! Ведь никто не мешает мне тупо отнимать единицу, даже если это нельзя делать. Просто в таком случае я дойду до конца (где старшие разряды кончаются) и увижу, что мне надо отнять 1, а отнимать не от чего! Ну и прекрасно - ставлю в сообщении отметку «перебор» и отправляю сообщение дальше. И оно уже идет в конце пакета данных, в бесконечность, и ничего не меняет там.

То есть - каждое сообщение в пакете делает какие-то изменения в ячейке, но конец пакета сообщает «Перебор» и приводит всё в исходное состояние.

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

И тогда всё упрощается и удаётся добиться линейности. Вот на какой математический «финт» - не думать об остановке пакета данных, а лишь менять его «хвост» на «перебор» - навёл меня русский перевод фрагмента Приём-Доза-Перебор фильма Аэроплан-2. :)

Ячейка - это Приём (капитан Приём) сообщения (цифры) пакета данных (числа) и отнимает 1 от числа. Пока отнимание укладывается в рамки передаваемого числа - это ячейки в состоянии Дозы. Но когда сообщение доходит до слишком дальних ячеек - начинается состояние Перебор. И думать, как остановить передачу пакета данных - нужды нет )

Юмор, NP≠P дискуссии, ЖЖвЖЖ _обычное_, Кино, ЖЖвЖЖ математика

Previous post Next post
Up