Научная статья на тему 'Задача о складывании марок'

Задача о складывании марок Текст научной статьи по специальности «Математика»

CC BY
78
14
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по математике, автор научной работы — Костин Владимир Андреевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Задача о складывании марок»

шшш

МА'СТЕРСКАЯ

Костин Владимир Андреевич

ЗАДАЧА О СКЛАДЫВАНИИ МАРОК

Данная статья посвящена разбору одной задачи, предлагавшейся несколько лет назад на городском туре олимпиады по информатике. Ее возникновение связано с одним из сюжетов популярной математики - складыванием полосок марок. Эта тема рассмотрена, например, в книгах Мартина Гарднера [1] и Генри Э. Дьюдени [2].

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

Рассмотрим вначале задачу о складывании единичной полоски марок. Пусть задана прямоугольная полоска бумаги формы 1 *п, разбитая на п единичных клеток (марок). Все клетки последовательно пронумерованы натуральными числами 1,...,п. Предположим, что полоска складывается (сгибанием по линиям разбивки на клетки) таким образом, что все клетки находятся под одной единственной. Тогда каждому такому складыванию соответствует некоторая перестановка f=<a1,a2...,an>, где а] - номер клетки, расположенной сверху, а^ - номер клетки, расположенной непосредственно под а[ и т. д.

Определение. Перестановка называется складываемой, если ей соответствует некоторое складывание полоски, и не-складываемой в противном случае.

Например, перестановка <3 4 2 1> -складываемая, <3 2 4 1> - нескладываемая.

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

Например, перестановка <3 4 2 1> перестает быть складываемой для замкнутых единичных полосок четвертого порядка, а перестановка <3 4 1 2> остается складываемой и в этом случае.

Рассмотрим свойства складываемых перестановок, соответствующих замкнутым единичным полоскам:

1.Порядок складываемых перестановок. соответствующих замкнутым полоскам. четен.

Для доказательства этого свойства введем на полоске ориентацию. Сторону некоторой клетки полоски с номером 1<1<п, будем

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

Заметим, что в этом случае начальные (конечные) стороны клеток с нечетным номером расположены слева (справа), а клеток с четными - наоборот. Поэтому отождествление начальной стороны первой клетки с конечной стороной п-й клетки для сложенной полоски возможно только при четном п.

Упражнение. Используя введенное понятие ориентации, докажите, что у складываемых перестановок четные элементы находятся либо все на четных, либо все на нечетных местах.

Рассмотрим пары смежных клеток полоски, общая сторона которых расположена справа. Сюда относятся пары (1,2), (3,4),...,(п-1,п). При этом клетки с меньшим номером могут как предшествовать, так и следовать за клетками с большим номером, если рассматривать элементы складывае-

мой перестановки от ее начала к концу. Эти пары смежных клеток образуют некоторую структуру вложенности друг в друга.

Например, п=10, 1Г=<5 491036721 8>

Естественно, что всегда существует хотя бы одна пара, в которую не вложены никакие другие. В приведенном примере это пары (9,10) и (2,1). Заметим, что элементы такой пары в перестановке расположены на двух соседних местах. Таким образом, можно сформулировать следующее свойство.

2.Для любой складываемой перестановки существует хотя бы одно такое к что на 1 и ¿-1-1 местах расположены номера двух последовательных клеток полоски. Эти номера принадлежат множеству неупорядоченных__и ар

{(1-2Ш.4).....(n-l.nl!.

Замечание. Наряду с выбором пар смежных клеток полоски, общая сторона которых расположена справа, можно рассмотреть пары смежных клеток, общая сторона которых расположена слева. В этом случае пары образуют множество {(2,3),...,(п,1)), а приведенный пример выглядит так: f=<5 4 9 10 3_6_7_2 1 8>.

3.Перестановка четного порядка складываема тогда и только тогда, когда и справа и слева смежные пары ее элементов образуют вложенную структуру. Проверка вложенности справа (слева) может быть осуществлена последовательным удалением пар ("свойство 2). Например, п=10, £=<549 103672 1 8>:

К.3241У -Неаслл^и&лемлЯ'

<342?>

71е.р.ес1кАНо(иса

удаление справа

<5 4

<5 <

< <

3 6 7 2 1 8>

6 7 2 1 8> 7 2 1 8>

7 8> >

удаляемая пара

(9,10) (4,3) (5,6) (2.1) (7,8)

удаление слева

<9 10 3 6 7 2 1 8> <9 10 3 2 1 8> <9 10 1 8>

<9 <

Упражнение. Складываема ли перестановка <1 2 7 6 5 8 9 4 3 10> ?

4.Пусть f=<at.....ац> - складываемая

перестановка, тогда также складываемая пе-

.....п. m - любое целое число, a mod -

операция нахождения остатка от деления целых чисел.

Данное преобразование фактически соответствует перенумерации клеток замкнутой полоски, при которой значение "единица" сопоставляется клетке с номером m mod n +1.

Замечание. Для нечетных m меняется ориентация полоски, то есть левые стороны клеток становятся правыми, а правые - левыми.

На основе свойств 3 и 4 можно построить алгоритм вычисления булевской функции, истинной для складываемых перестановок замкнутых полосок и ложной в противном случае. const п=...; {порядок перестановок} type permit =array [l..n] of l..n; function sk (var f:permit):boolean; var i,a,b : integer;

c:boolean; procedure skr;

function pair(x,y:integer):boolean;

var z:integer;

begin if x>y then begin z:=x; x:=y; y:=z end; pair:=odd(y) or (y-xol)

end; procedure step;

begin c:=c and (i<n);

if с then begin i:=i+l; b:=f[i] end

end;

procedure be (a:integer);

begin step;

while pair(a,b) and с do bc(b); step

end;

8>

>

удаляемая пара

(5,4)

(6.7) (3,2) (10,1)

(9.8)

begin {skr} a:=f[l]; Ь:=Ц2]; i:=2; while i<n do

begin if pair(a,b) and с then bc(b)

{1}

{2}

else begin i:=i+2;

a:=f[i-l]; b:=f[i]

end

end;

c:=c and not pair(a,b) end;{skr} begin {sk} c:=true; skr;

for i:=l to n do f[i]:=f[i] mod n +1; skr; sk:=c end;

Комментарий. Переменная i служит для перебора элементов перестановки f; a,b определяют значения номеров клеток полоски, обрабатываемых в данный момент; с - булевская переменная, которая принимает значение false, если уже определено, что перестановка нескладываемая.

Функция pair принимает значение false, если клетки с номером х и у образуют пару клеток полоски, смежную справа. При этом, если х, у - смежные справа клетки, эта пара исключается из перестановки.

Поиск пар смежных справа клеток (процедура skr) основан на последовательном просмотре элементов перестановки от меньших индексов к большим (процедура step, оператор {1} ). При этом хранение элементов, для которых еще не найдены парные, организовано в виде стека. Формирование этого стека осуществляется за счет рекурсивного вызова процедуры be. Перестановка признается складываемой справа в том и только в том случае, если при просмотре элемента с наи-

большим индексом стек полностью разгружается (оператор {2} ).

В разделе операторов функции sk вначале проверяется складываемость f справа, затем происходят переориентация f с помощью перенумерации ее элементов и проверка складываемости справа измененной перестановки.

Замечание. Нетрудно видеть, что функция sk имеет временную вычислительную сложность О(п).

Упражнение. Разработайте реализацию функции skr без использования рекурсии в процедуре Ьс.

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

Прежде всего об ориентации. Будем по-прежнему считать, что полоска ориентирована таким образом, что начальная сторона первой клетки находится слева, а конечная - справа. Естественно, что для таких полосок нет никаких ограничений на порядок, то есть порядок складываемых незамкнутых полосок может быть как четным, так и нечетным. Здесь сохраняется только свойство, что при четном порядке конечная сторона n-й клетки расположена слева, а при нечетном справа.

Свойство, сформулированное в упражнении и связанное с месторасположением четных элементов, для складываемых перестановок, соответствующих незамк-н\тым полоскам, может не выполняться.

Например, п=10, <10 8 7 4 2 1 3 5 6 8>, <7 1652893410>- складываемые перестановки.

С точки зрения построения алгоритма распознавания складываемости перестановок наиболее интересными были свойства 2-4. Остановимся вначале на 4 свойстве. Для незамкнутых полосок возможна только перенумерация клеток в обратном порядке, когда n-й клетке сопоставляется 1, (п-1)-й—2 и т.д. Такое преобразование изменяет перестановку <а,,...,ап> на <п+1-а1,...,п+1-ап>. Заметим,

что это преобразование меняет ориентацию перестановки только при нечетном п.

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

Например, п=10, проверка складываемости слева

^<1 3874 10 569 2>

Причиной этого являются концевые клетки полоски (первая или последняя). Фактически в таких ситуациях концевая клетка может быть интерпретирована как "неполная пара" смежных клеток и должна быть удалена на этом шаге. В данном примере такой концевой клеткой является клетка с номером 10. Ее заключительная сторона располагается справа, но для нее отсутствует смежная клетка, которая переводила бы "продолжение" полоски на левую сторону.

Обработка таких "неполных" пар возникает: при четном п в случае проверки складываемости справа - для первой и последней клетки; при нечетном п - для первой клетки при проверке складываемости справа и для последней при проверке складываемости слева.

Упражнение. Разработайте алгоритм вычисления функции sk], принимающей истинное значение для складываемых перестановок, соответствующих незамкнутым единичным полоскам, и ложное в противном случае.

Замечание 1. Алгоритм проверки вложенности справа смежных пар клеток полоски основан на использовании автоматов с магазинной памятью для разбора правильных структур арифметических выражений. Более подробно можно познакомиться с идеями компиляции арифметических выражений, например, в [3]. В этой мастерски написанной книге, не устаревшей и в настоящее время, также рассмотрены многочисленные примеры решения "чисто математических" задач при помощи ЭВМ.

Замечание 2. Со складываемыми перестановками связана одна из интересных задач перечислительной комбинаторики, получившая в свое время название "Проблема С. Улама". Ее можно сформулировать следующим образом:

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

Другими словами, эту проблему можно сформулировать так. Хватает ли "изоб-

разительной мощности" элементарных операций для того, чтобы выразить данное число складываемых перестановок. Здесь даже неважно, какие операции мы включаем в число элементарных. Более существенным является разработка математического аппарата для исследования подобных задач. Решение этой задачи можно сравнить с решением Десятой проблемы Гильберта о неразрешимости диофан-товых множеств, окончательный ответ в решении которой был дан Ю. В. Матиясевичем [4]. Разработка подобного аппарата выводит нас на самые современные методы математической логики, связанные с разрешимостью множеств. Проблема Улама актуальна с точки зрения компьютерной алгебры - в какой форме можно представить ответ на решение тех или иных достаточно сложных математических задач.

Упражнение. Обобщите изложенный в статье материал для прямоугольных карт формы п*т.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Литература.

1. М. Гарднер. Крестики - нолики: Пер. с англ. - М.: Мир, 1988.

2. Г. Э. Дьюдени. 520 головоломок: Пер. с. англ. - М.: Мир, 1975.

3. Ю. Нивергельт, Дж. Фаррар, Э. Рейнгольд. Машинный подход к решению математических задач: Пер. с англ. М.: Мир, 1977.

4. Ю. В. Матиясевич. Десятая проблема Гильберта. М.: Физматлит, 1993.

Костин Владимир Андреевич, доцент кафедры информатики математико-механического факультета Санкт-Петербургского государственного университета.

И Л IIIII АВТОРЫ

i Надоели баннеры? Вы всегда можете отключить рекламу.