Алгоритмика плетения из резинок. Глава 4

Мир Когнито
начало http://www.proza.ru/2015/07/31/1688
назад http://www.proza.ru/2015/08/02/593

Начнём теперь разговор именно о доказательной алгоритмике плетения на резинках.
(А не просто алгоритмикой, как в предыдущих главах.
Для ознакомления с темой см. мою работу «Доказательная алгоритмика» на этом сайте http://www.proza.ru/2015/07/16/1738 Но только в той работе разбирались привычные для программистов алгоритмы (а именно, для работы с базами данных) Тогда как в этой работе мы алгоритмируем (=создаём алгоритмы) для задач вполне материальных.)
И такая идея появляется, как только появляется идея изготовить из резинок нечто уже заранее заданное (а не то, что получится).(а значит, и алгоритм нужно будет делать от заданного, а не от балды) На 1-ый взгляд решение такой задачи кажется совершенно немыслимым. Но попробуем для её решения оттолкнуться от задач наиболее простых.(а потом постепенно пойдём на усложнение) Может, это приведёт нас к успеху? Ибо надежду на это даёт принцип обучения «от простого к сложному»

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

Итак, алгоритм простейшей цепочки на станке (назовём её «простая цепочка»), что он из себя представляет? По-видимому, такое:
1.н(р1,ст(7,1),ст(6,1))
2.н(р1,ст(6,1),ст(5,1))

Х.н(р1,ст(2,1),ст(1,1))
Кратко (шаги 1-Х) так:
1.повт(н(р1,ст(и,1),ст(и-1,1)),и=7..2)
(если нужна бОльшая длина цепочки, то вместо 7 поставим дл – длина цепочки (в резинках):
1.повт(н(р1,ст(и,1),ст(и-1,1)),и=дл..2)
2.н(р1,ст(1,1),в(пр),ст(1,1))
1,2 - ошибка, исправление (А1-)

-А1:
1.повт(н(р1,ст(и,1),ст(и+1,1)),и=1..дл-1)
2.н(р1,ст(дл,1),в(пр),ст(дл,1))
3.м(п(п),ст(дл,1),под(),ст(дл1-1,1))
4.м(п(п),ст(дл-1,1),под(),ст(дл-2,1))

Х.м(п(п),ст(2,1),под(),ст(1,1))
Шаги 3-Х кратко:
3.повт(м(п(п),ст(и,1),под(),ст(и-1,1)),и=дл..2)

Переписываем алгоритм:
1.повт(н(р1,ст(и,1),ст(и+1,1)),и=1..дл-1)
2.н(р1,ст(дл,1),в(пр),ст(дл,1))
3.повт(м(п(п),ст(и,1),под(),ст(и-1,1)),и=дл..2)
4.ц(з,п(1-2),ст(дл,1))
5.повт(с(п(),ст(и,1)),и=дл-1..2)
6.ц(з,п(),ст(1,1)) (зацепить застежку за узел0. Это резинки всех позиций на ст(1,1))
7.с(п(),ст(1,1))
8.конец

Алгоритм простейшей цепочки на рогатке:
1.н(р1,ст1,в(пр),ст2) (создаём узел0. А точнее, готовим его создание)
2.н(р1,ст1,ст2)
3.м(п(п),ст1,между(1,2))
4.м(п(п),ст2,между(1,2))
(всё, узел0 готов, он между столбиков)
Шаги 3,4 кратко:
3.м(п(п),ст[1,2],между(1,2))
Поскольку дальше будет опять:
н(р1,ст1,ст2)
м(п(п),ст1,между(1,2))
м(п(п),ст2,между(1,2))
(и многократно повторится),
то объединим это так:
[н(р1,ст1,ст2), м(п(п),ст[1,2],между(1,2))]
А цикл получается такой:
Повт([н(р1,ст1,ст2), м(п(п),ст[1,2],между(1,2))],и=1..дл),
Где дл – желаемая длина цепочки

Переписываем алгоритм:
1.н(р1,ст1,в(пр),ст2)
2.повт([н(р1,ст1,ст2), м(п(п),ст[1,2],между(1,2))],и=1..дл)

И продолжаем:
3.ц(з,п(),ст1)
4.с(п(),ст1)
5.ц(з,п(),ст2)
6.с(п(),ст2)
Шаги 3-6 кратко:
[ц(з,п(),ст[1,2]),с(п(),ст[1,2])]
Или так:
Повт([ц(з,п(),ст(и),с(п(),ст(и))],и=1,2)
(Пожалуй, лучше 2-ой вариант.)

Переписываем алгоритм:
1.н(р1,ст1,в(пр),ст2)
2.повт([н(р1,ст1,ст2), м(п(п),ст[1,2],между(1,2))],и=1..дл)
3.повт([ц(з,п(),ст(и),с(п(),ст(и))],и=1,2)

И продолжаем:
4.ц(з,у0)
5.конец

В итоге алгоритм таков:
1.н(р1,ст1,в(пр),ст2)
2.повт([н(р1,ст1,ст2), м(п(п),ст[1,2],между(1,2))],и=1..дл)
3.повт([ц(з,п(),ст(и),с(п(),ст(и))],и=1,2)
4.ц(з,у0)
5.конец

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

Это да, но это только в том случае, если оба компьютера – понимают этот алгоритм (а точнее, запись его) одинаково. А если по-разному?
Но что поможет им понимать данный алгоритм по-разному? Только транслятор, то есть переводчик алгоритма с псевдокода на машинный код. Но почему транслятор может давать разные результаты? Потому что это транслятор (а точнее, трансляторы) может быть разным. А именно с того же языка, но предназначенным для другого исполнителя (например, для другого процессора) В результате, как сейчас выясняется, исполнитель – это не только непосредственный исполнитель, но и используемое им приспособление в плюс (то есть как совокупность с непосредственным исполнителем)

Но самое главное, что заставляет нас задуматься тут – то, что из этих 2-х примеров ясен основной принцип плетения. А именно, создание (элементарной) структуры зацепления 2-х резинок.(см.рисунок в начале)
Которая:
1)(для резинок) не может быть иной
2)распадётся, при отсутствии фиксации
А отсюда - все дальнейшие выводы, по данной теме.

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

Но эти дефиниции опираются, конечно, на какие-то базовые понятия. А значит, на более абстрактные (-общие)
И что тут, шуметь тревогу? Типа а откуда они, эти общие, у индивида, коли мы не практикуем вообще периоды самообучения?
Ну и что? Ибо разве эти наиболее общие понятия (например, объект, процесс, действие) относятся к каким-то частным предметам? Нет, конечно. Ибо они относятся к другому, более общему предмету, а именно к метапредмету "когнитология" (а потом и "праксеология") Понятия которого ученик формирует сам, в процессе жизни.
И тут важно одно: всё многообразие понятий получается из ограниченного их множества, путём сочетаний.

-А2: Тогда как я начинаю … нет, не повторять (физику) с учениками … а изучать её с атомной и ядерной физики.
Но не видится ли тут некоей коллизии между моим пониманием простоты и школьным? Конечно, видится. Ибо я понимаю простоту
(предмета. Или темы. А предмет – это тоже тема, но только более широкая.)
с точки зрения простоты (или сложности) мат. аппарата
(набора его средств, и в том числе средств формализма),
необходимого для решения задач в этой теме.
А вот с точки зрения школы простота задачи измеряется количеством объектов в ней (и в особенности, если они одного типа) И я с этим, что интересно, согласен! (и тоже блюду этот принцип, в последовательности изучения (А3-)) Но только в пределах заданной темы. Что и буду делать также в рамках данной статьи.

-А3; А всё почему так? Да потому что для более простой задачи (с точки зрения количества в ней типов объектов, а также количества объектов одного типа.) построить алгоритм её решения проще, чем для сложной.

Изображение простейшей базовой единицы структуры изделия из резинок (рис.2. Основой которого является изображение одной (сложенной вдвое) резинки в разных проекциях) подводит нас к мысли, что, усложняя базовую единицу структуры изделия (например, 2 (резинки) за 1 (резинку)(рис.4), вместо 1 за 1 (рис.2), мы можем создавать всё бОльшее разнообразие видов изделий.
Зарисуем структуру чешуи дракона.(рис.5)
(Отсюда вопрос: а не слабо записать эту структуру формально?
Ведь в результате при создании алгоритма плетения мы могли бы отталкиваться не от внешнего вида изделия (что достаточно проблематично), а от формального опять-таки описания, но только структуры изделия.
Конечно, можно. Но отложим это пока на потом.)
Ибо рисунок структуры чешуи дракона даёт понимане того, что она основана как раз на следующей по сложности базовой единице структуры, 2 за 1. Но из базовой структуры данного типа можно сложить множество структур изделия. А структура чешуи дракона вовсе не простейшая, на базовой структуре 2 за 1.
Поэтому займемся сперва упрощением, структуры чешую дракона. И простейший случай здесь такой (тело цикла типа 2+1):

Рис.6

Хотя прообразом чешуи дракона является такая структура (тело цикла типа  2+2):

Рис.7

В результате сразу возникает идея алгоритма плетения структуры на рис.6:
1.н(ст1,ст2)
(цвет резинок не указываем, т.к. он не варьируется.
А также не указываем номер ряда, т.к. используется только 1 ряд)
2.н(ст3,ст4)
Вместо 1-2 кратко:
Повт(н(ст(и),ст(и+1)),и=1+2..3)
3.н(ст2,ст3)
4.м(п(п),ст2,л,ст2)
5.м(п(п),ст3,л,ст3)
Вместо 4-5 кратко: повт(м(п(п),ст(и),л,ст(и)),и=2..3)
6.н(ст1,ст2)
7.н(ст3,ст4)
Вместо 6-7 кратко:
Повт(н(ст(и),ст(и+1)),и=1+2..3)
8.повт(м(п(п),ст(и),л,ст(и)),и=1..4)
Короче, тело цикла понятно:
[повт(н(ст(и),ст(и+1)),и=1+2..3),
н(ст2,ст3),
повт(м(п(п),ст(и),л,ст(и)),и=2..3),
повт(н(ст(и),ст(и+1)),и=1+2..3),
повт(м(п(п),ст(и),л,ст(и)),и=1..4)]
А общее описание тела цикла таково:
[повт(н(ст(и),ст(и+1)),и=ин+2..3),
н(ст(ин+1),ст(ин+2)),
повт(м(п(п),ст(и),л,ст(и)),и=ин-1..3),
повт(н(ст(и),ст(и+1)),и=ин+2..3),
повт(м(п(п),ст(и),л,ст(и)),и=ин..4)],
где ин=1, а счётчик проходов цикла, к – не зависит от ин.
Короче, алгоритм таков:
Повт([повт(н(ст(и),ст(и+1)),и=ин+2..3),
н(ст(ин+1),ст(ин+2)),
повт(м(п(п),ст(и),л,ст(и)),и=ин-1..3),
повт(н(ст(и),ст(и+1)),и=ин+2..3),
повт(м(п(п),ст(и),л,ст(и)),и=ин..4)],
к=1..дл),
где дл – желаемая длина изделияв резинках.

Но выполнение данного алгоритма показывает, что да, структура получается желаемая, но при начале замыкания становится понятно: 1-ый шаг сделан неверно. Это конечно, не влияет на замыкаемость изделия, но несколько портит его внешний вид. Т.к.  по норме должны зацепляться за застежку (как минимум) по 2 резинки.
Отсюда понятно, что ошибка (а скорее, недочёт) была сделана в самом начале, а именно вместо
1.н(ст1,в(по),ст2)
2.н(ст3,в(по),ст4)(А1-)
Было сделано:
1.н(ст1,ст2)
2.н(ст3, ст4)

А, стало быть, исправленный алгоритм таков:
Повт([повт(н(ст(и),[в(по),],ст(и+1)),и=ин+2..3),
н(ст(ин+1),ст(ин+2)),
повт(м(п(п),ст(и),л,ст(и)),и=ин-1..3),
повт(н(ст(и),ст(и+1)),и=ин+2..3),
повт(м(п(п),ст(и),л,ст(и)),и=ин..4)],
к=1..дл)
(конструкция ),[в(по),] означает, что 1-ый проход этого цикла будет сделан с опцией в(по), а все остальные (что даже считать их количество не приходится) проходы – без данной опции)

Замыкание и снятие:
2.м(п(),ст1,ст2)
3.м(п(),ст4,ст3)
4.ц(з(1),п(),ст2)
5.ц(з(2),п(),ст3)
6.ц(з(1),у1)
7.ц(з(2),у2)
8.повт(с(п(),ст(и)),и=2..3)
9.конец

Примечания
-А1: Но в результате плетения выясняется, что правильно так:
1.н(ст1,в(по),ст2)
2.н(ст3,в(пр),ст4)
Именно в этом случае узел2 будет выполнен корректно.

Составление алгоритма для структуры 7 оставляю читателю.
(а мне, кажется, следует вплотную заняться формальной записью структуры изделий, что я и сделаю в следующей главе.
Уже настала пора, раз уж движок данного сайта не позволяет публиковать более 1 рисунка к одной работе. А это нужно!)

вперёд http://www.proza.ru/2015/08/05/1210