Научная статья на тему 'ВЫЧИСЛИТЕЛЬНЫЕ СРЕДСТВА C# ДЛЯ РЕШЕНИЯ ЗАДАЧИ ПЕРЕЧИСЛЕНИЯ РАЗБИЕНИЙ ПРЯМОУГОЛЬНИКА'

ВЫЧИСЛИТЕЛЬНЫЕ СРЕДСТВА C# ДЛЯ РЕШЕНИЯ ЗАДАЧИ ПЕРЕЧИСЛЕНИЯ РАЗБИЕНИЙ ПРЯМОУГОЛЬНИКА Текст научной статьи по специальности «Математика»

CC BY
228
16
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРЯМОУГОЛЬНИК / C# / ПАРОСОЧЕТАНИЕ ГРАФА / ПЕРЕЧИСЛЕНИЕ / ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ / RECTANGLE / MATCHING / ENUMERATION / SOFTWARE

Аннотация научной статьи по математике, автор научной работы — Магомедов А.М., Лавренченко С.А.

Рассматривается проблема перечисления всех разбиений прямоугольника заданных целочисленных размеров h×w на прямоугольники размеров 1×2, возникшая в 60-е годы XX в. при исследовании учеными-физиками вопросов термодинамики потоков жидкости. Выявление равносильности задаче перечисления всех совершенных паросочетаний в некотором планарном графе привлекло внимание к проблеме со стороны специалистов по дискретной математике. Несмотря на то, что исследованию задачи посвящены десятки работ, интерес к ней не ослабевает. Приведен краткий обзор известных подходов к решению задачи с анализом их недостатков, в частности «классическая» формула двойного произведения включает действия над числами с плавающей запятой (значения тригонометрических функций и др.), что существенно сужает диапазон значений h и w , для которых возможно точное вычисление искомого значения количества всех возможных разбиений. Указан способ вычисления коэффициентов рекуррентной формулы, использующей для нахождения ah QUOTE ah (количества разбиений при фиксированном значении параметра w ) лишь операции сложения и умножения целых чисел. Предложен двухшаговый подход к решению. На первом шаге с использованием классов BigInteger и BigFloat языка программирования C# выполняется трудоемкая работа по точному вычислению необходимого количества начальных членов последовательности a1 , a2 …, которые в свою очередь предоставляют возможность для вычисления целочисленных коэффициентов для формирования рекуррентной формулы. На втором шаге рекуррентная формула обеспечивает эффективное и точное вычисление последующих членов данной последовательности, используя лишь операции сложения и умножения целых чисел. В конце статьи сформулированы актуальные подзадачи рассматриваемой проблемы.

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

C# COMPUTING TOOLS FOR SOLVING THE PROBLEM OF ENUMERATING PARTITIONS OF A RECTANGLE

We consider the problem of enumerating all partitions of a rectangle with given integer sizes h×w into rectangles with sizes 1×2, which arose in the 60s of the 20th century in the study of thermodynamics of fluid flows by physicists. The identification of equivalence to the problem of enumerating all perfect matchings in a certain planar graph drew attention to the problem from specialists in discrete mathematics. Despite the fact that dozens of papers have been devoted to the study of the problem, interest in it does not weaken. The article provides a brief overview of common approaches to solving the problem with the analysis of their disadvantages; in particular, the “classical” double product formula involves operations on floating point numbers (values of trigonometric functions, etc.), which significantly narrows the range of values of h and w, for which it is possible to accurately calculate the desired value of the number of possible partitions. A method is given for calculating the coefficients of a recurrent formula that uses only integer addition and multiplication operations to find ah QUOTE ah (the number of partitions for a fixed value of the parameter w ). A two-step approach is proposed to the solution. At the first step, using the BigInteger and BigFloat classes of the C# programming language, a lot of laborious work is done to accurately calculate the required number of initial terms of the sequence a1 , a2, ..., which in turn provide an opportunity to calculate integer coefficients for building a recurrence formula. At the second step, the recurrence formula provides an efficient and accurate calculation of the subsequent terms of a given sequence, using only the operations of addition and multiplication of integers. At the end of the article, the relevant subtasks of the problem are formulated.

Текст научной работы на тему «ВЫЧИСЛИТЕЛЬНЫЕ СРЕДСТВА C# ДЛЯ РЕШЕНИЯ ЗАДАЧИ ПЕРЕЧИСЛЕНИЯ РАЗБИЕНИЙ ПРЯМОУГОЛЬНИКА»

УДК 519.175

DOI: 10.21779/2542-0321-2020-35-4-13-26 А.М. Магомедов1, С.А. Лавренченко2

Вычислительные средства C# для решения задачи перечисления разбиений

прямоугольника

1 Дагестанский государственный университет; Россия, 367000, г. Махачкала, ул. М. Гаджиева, 43а; magomedtagir1@yandex.ru, yakubovaz@mail.ru;

2 Российский государственный университет туризма и сервиса; Россия, 141221, Московская обл., Пушкинский р-н, д/п Черкизово, ул. Главная, 99; lawrencenko@hotmail.com

Рассматривается проблема перечисления всех разбиений прямоугольника заданных целочисленных размеров h*w на прямоугольники размеров 1^2, возникшая в 60-е годы XX в. при исследовании учеными-физиками вопросов термодинамики потоков жидкости. Выявление равносильности задаче перечисления всех совершенных паросочетаний в некотором планарном графе привлекло внимание к проблеме со стороны специалистов по дискретной математике. Несмотря на то, что исследованию задачи посвящены десятки работ, интерес к ней не ослабевает.

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

Указан способ вычисления коэффициентов рекуррентной формулы, использующей для нахождения ah (количества разбиений при фиксированном значении параметра w) лишь операции сложения и умножения целых чисел.

Предложен двухшаговый подход к решению. На первом шаге с использованием классов Biglnteger и BigFloat языка программирования C# выполняется трудоемкая работа по точному вычислению необходимого количества начальных членов последовательности a1, a2 ..., которые в свою очередь предоставляют возможность для вычисления целочисленных коэффициентов для формирования рекуррентной формулы. На втором шаге рекуррентная формула обеспечивает эффективное и точное вычисление последующих членов данной последовательности, используя лишь операции сложения и умножения целых чисел.

В конце статьи сформулированы актуальные подзадачи рассматриваемой проблемы.

Ключевые слова: прямоугольник, C#, паросочетание графа, перечисление, программное обеспечение.

Введение

Димерным числом hx-прямоугольника M (прямоугольника с шириной w и высотой h) будем называть количество способов f(h, w) разбиения прямоугольника M на «костяшки домино» - 1*2-прямоугольники, расположенные вертикально или горизонтально. Исследования по проблеме вычисления димерных чисел были начаты в связи с вопросами термодинамики потоков жидкости. Первые результаты опубликованы в 1961 г.

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

произведения, согласованная система взаимно-рекуррентных формул, динамическое программирование.

Раздел 3 посвящен двухшаговому подходу к решению задачи о димерном числе; предложены вычислительные средства С#, позволяющие получить по классической формуле точные значения димерных чисел при фиксированных (и относительно небольших) значениях параметра w; показано, как с помощью вычисленных значений формируется рекуррентная формула для вычисления димерных чисел с использованием операций сложения и умножения целых чисел.

Задача вычисления димерных чисел Димерные числа и перечисление совершенных паросочетаний

Покажем на примере связь с задачей перечисления совершенных паросочетаний. Задача перечисления разбиений 4*3 - прямоугольника М, приведенного на рис. 1а, эквивалентна задаче перечисления совершенных паросочетаний в двудольном графе С = С(М), полученном следующим образом: вершины графа - центры клеток исходного прямоугольника, ребра графа соединяют каждую пару вершин, соседних по вертикали или по горизонтали (рис. 16). Очевидно, что каждому разбиению прямоугольника М (рис. 1А) взаимно-однозначно соответствует некоторое совершенное паросочетание графа G (рис. 1Б).

Рис. 1. Разбиению прямоугольника М (рис. 1А) взаимно-однозначно соответствует некоторое совершенное паросочетание (рис. 1Б) в плоском графе О(М)

Замечание 1. В общем случае задача перечисления совершенных паросочетаний графа #Р-полна [1], однако в случае планарного графа - а граф G(M) , очевидно, пла-нарный - задача разрешима за полиномиальное время.

В [2, с. 406-418] приведено систематическое изложение вопросов использования пфаффианов и определителей в задаче перечисления совершенных паросочетаний, в частности, для доказательства классического результата [4]: «Всякий планарный граф имеет пфаффову ориентацию и такую ориентацию можно построить за полиномиальное время». См. также [3].

Формула для вычисления димерных чисел

В [4] утверждается, что формула

w h , . . ч 1/4 --f 2 К] а ТГк \ 1

- + 1 /г + 1/

получена в [5] и [6], в [7] сообщается, что ее независимо получил и Д. Кнут; в [8] формула приведена в виде:

[f] III

ДМ = ППМ-^т + 4-crf

rfc

В качестве недостатка этой классической формулы укажем на вычисления с числами, представленными в форме с плавающей запятой, с неизбежным накоплением ошибок округления при больших значениях № и/или Н (см. примеры в начале статьи [9]).

Системы взаимно-рекуррентных формул Системы взаимно-рекуррентных формул (в. р. ф.), полученные в [9] с привлечением программного обеспечения, содержат лишь операции сложения и умножения целых чисел и свободны от отмеченного недостатка формулы (1). Однако системы в. р. ф., сгенерированные в [9], весьма громоздки: если при н = 3 система в. р. ф. содержит всего две формулы

{Ъг_1 = аг_2 + ЬГ_3, (2)

(аг - сокращенное обозначение димерного числа гх-прямоугольника, Ьг - димерное число фигуры, полученной из гх ш-прямоугольника удалением угловой клетки), то при н = 6 - уже 10, а при н = 13 - 3050 формул.

Пусть н = 6 . При обозначениях: = (0,0,0,0,0,0), = (0,0,0,0,1,1),д(2) = (0,0,1,1,1,1), ^ = (1,0,0,1,0,0),

= (2,2,1,1,0,0), ^ = (2,1,1,0,0,0) V6) = (0,0,1,1,0,0), = (1,0,0,0,0,1), = (2,1,0,0,1,0), ^ = (1,1,1,0,0,1)

и F[n, Л] - димерное число фигуры, полученной удалением из ]-того столбца Лх -прямоугольника верхних Л — ц^ клеток ( ] = 0,..,ш — 1 ); п = 0,1, ...,9, система в. р. ф. 8, сгенерированная изложенным в [9] методом, первоначально выглядит так:

9, Л] = Р[ 0,Л-1] +£"[ 3,Л-2] + £"[ 7,Н-2]+Р[ 9, Л-2], ^[6,Л] = ^[2,Л] + ^[4,Л],

4,Л] =£"[ 1,Л-1] +£"[ 0,Л-2] + £"[ 6, Л-2], 7, Л] = £"[ 9, Л] + £■[ 8, Л - 1] 5, Л - 1] 7, Л-2], ^[3,Л] = *"[9,Л] + 1] + ^[3,Л-2],

Р[ 5, Л] = £"[ 7, Л - 1] 3,Л- 1] +£"[ 9, Л - 1], *"[2,Л] = 1] 1],

1,Л] = Р[ 2,Л] + £"[ 3,Л- 1] + £"[ 6, Л - 1] 2, Л - 1],

0,Л] = Р[ 1,Л] + £"[ 5,Л] + £"[ 4,Л] +£"[ 9, Л - 1] + 2, Л - 1] 0,Л-2].

Если в системе в. р. ф. найдется формула с левой частью F[/, Л] и слагаемым F[i, Л] в правой части, то будем говорить, что формула F[i, Л] = ••• предшествует формуле F[/, Л] = • • •. Для организации вычисления димерного числа F[ 0, Л] по системе в. р. ф. требуется:

1) для каждого / = 0,1,... вычислить Б[1, И] для нескольких начальных значений И;

2) упорядочить систему в. р. ф. таким образом, чтобы соблюдалось условие: если формула Б[1, И] =... предшествует формуле И] = ..., то в упорядочении системы в. р. ф. формула Б[1, И] =. встречается раньше, нежели формула И] = ... (такое упорядочение назовем согласованием системы в. р. ф.).

Пусть в общем случае система в. р. ф. содержит п формул. Рассмотрим ациклический орграф С(5) = (У,Е), вершины р0,р1,.,рК-1 которого соответствуют формулам системы в. р. ф. £, дуги - отношениям предшествования формул: дуга из вершины ^ в вершину V] проведена тогда и только тогда, когда /-тая формула предшествует у'-той формуле. Вершины графа G можно таким образом пометить числами из множества 0,1, ...,М — 1, что если у) ЕЕ, то /< } (топологическая сортировка [10, с. 95]). Индуцированное упорядочение системы в. р. ф. и будет искомым согласованием этой системы.

Алгоритм топологической сортировки [10, с. 96]: сначала произвольная вершина с нулевой полустепенью исхода помечается числом N - 1 и удаляется из графа вместе с инцидентными дугами, затем в оставшемся графе произвольная вершина с нулевой полустепенью исхода помечается числом N - 2; описанная процедура повторяется, пока не пометим все вершины.

Приведенная выше система £ в. р. ф. не согласована. Укажем один из вариантов согласования (ограничиваясь краткой записью левых частей формул): F[ 8, Л] = • ••, Я9,И] = --, 2,Л] = - , 4Л] = - , Я 5Л] = - , 1,Л] = --, 3,Л] = --, 7, И] = ■■■, 6, Л] = ■■•, 0,Л] = •••.

Замечание 2. Задача топологической сортировки текстуально близка к задаче поиска ориентированного гамильтонова пути в каждой компоненте ориентированного графа. В общем случае задача о гамильтоновом пути №-полна [11, с. 249], но для ациклических ориентированных графов задача разрешима за полиномиальное время.

Замечание 3. На первый взгляд, примененный в [9] подход имеет сходство с предложенным в [12], но при ближайшем рассмотрении принципиальное различие подходов становится очевидным.

Метод динамического программирования

При малых w и И димерные числа Лх-прямоугольника могут быть найдены методом динамического программирования [13, с. 52-54] (см. также [14]). Опишем вкратце этот метод.

Пусть Q - фигура, полученная из прямоугольника с шириной w удалением из каждого столбца некоторого количества верхних клеток, ёп - высота п-ного столбца,0 < йп,п = 1 ,...,№; Q будем называть диаграммой, если |т— /| < 1, где /= тах (й-р...,^), т = тт ( й!,...^^ ; верхнюю границу диаграммы будем называть ломаной и обозначать (/, к), где / - высота диаграммы Q, а к (дескриптор) -число, записанное в двоичной системе цифрами: —т,..., ^ — т.

Замечание 4. Там, где это не вызывает недоразумений, диаграмму с верхней границей (/, к) также будем обозначать (/, к)/

Дескриптор горизонтальной ломаной равен 0. Если число способов разбиения диаграммы (/, к) обозначить через Т(/, к), то задача о димерном числе Лх -прямоугольника заключается в вычислении Г(Л, 0).

и

О

Рис. 2. Диаграмма Q с шириной 7 и высотой 5

На рис. 2 приведена диаграмма Q с шириной 7 и высотой 5. Выделены: 1) верхняя граница (¿1,^1), где ^ = 5 - высота, к1 = 00100102 = 18 - дескриптор; 2) ломаная (¿2Д2), /2 = 3, к2 = 11000002 = 192.

Если рассмотреть рис. 2 в общем случае и число способов разбиения фигур и и Б обозначить через Ти(12,к2) и Та(12,к2) соответственно (и при этом Ти{}2,к2) > 0, Та(12,к2) > 0), то число способов разбиения диаграммы Q на костяшки домино, каждая из которых находится целиком по одну сторону (выше или ниже) от ломаной (¿2Д2), равно произведению Ти{\.2,к2) • Та(12,к2) . В случае, если фигура и допускает разбиение в точности одним способом, произведение равно Тй{\.2,к2).

Для каждой диаграммы (/, к) рассмотрим все диаграммы (/ — 1,/). Дескрипторы к и } назовем дружественными, если существует разбиение диаграммы (¿, сужение которого над диаграммой (1 - 1, _]) представляет собой разбиение диаграммы (1 - 1, _]), и недружественными - в противном случае. Дополняя диаграмму (1 - 1, ]) сверху до диаграмм с высотой / различными наборами костяшек домино, допускающих в точности одно разбиение, мы найдем все дескрипторы к, дружественныеМножество дескрипторов, дружественных к, будем обозначать 0(к).

= (3)

Сформулируем алгоритм:

1. Для каждого к = 0,1,..., 2W — 1 вычислить множество Б(к).

2. Г(0,0): = 1, т. к. прямоугольник нулевой высоты имеет единственное разбиение (не использующее ни одной костяшки домино!); для ] = 1,2,... ,2™— 1 выполнить Г(0,у): = 0, т. к. соответствующих диаграмм не существует.

3. Для / = 1,..., Л — 1; для к = 0,1,..., 2W — 1 выполнить

4. ПЛ,0): = ЕуеО(0)Щ-1,Д

Двухшаговый подход к вычислению димерных чисел Средства многоразрядных вычислений в языке С#

Вернемся к классической формуле (1), полученной рядом авторов еще в 60-е годы XX в., и заметим, что с тех пор не только возросли возможности аппаратного обеспечения компьютеров, но и расширились средства языков программирования. Классы BгgInteger и BigFloat языка С# позволяют значительно увеличить диапазон значений И и w, для которых удается выполнить точные вычисления по формуле (1).

Класс BigInteger из библиотеки System.Numerics обеспечивает выполнение вычислений с целыми числами практически неограниченной величины.

Класс BigFloat реализован в библиотеке Extreme.Mathematics и позволяет выполнять вычисления над вещественными числами с громадным количеством десятичных знаков после запятой. Библиотеку можно подключить через NuGet пакеты: https://www.nuget.org/packages/Extreme.Numerics/.

Примеры вычислений, выполненных с использованием этих классов, приведены в Приложениях 1, 2 и 3.

Задача нормализации системы в. р. ф.

В ряде источников показано, что при = 2 (здесь аг - то же, что в разделе 2.3):

— "Ь 2, т^^ 2, Й0 -О,-^ = 1;

другими словами, при w = 2 димерные числа - суть числа Фибоначчи, и система в. р. ф. вырождается в одну-единственную рекуррентную формулу с порядком рекурсии, равным 2.

Приведение системы в. р. ф. к эквивалентной рекуррентной формуле будем называть нормализацией. Легко показать, что при w = 3 система в. р. ф. допускает нормализацию с порядком рекурсии, равным 4. В самом деле, заменив Ьг_1 в первой формуле системы (2) на выражение - (аг — аг_2), полученное из второй формулы «непосредственно», а Ьг_з - на выражение ^ (аг_2 — аг-4), полученное из второй формулы после

понижения индексов на 2, получим:

1 1

- (аг — аг_2) = аг_2+ ~ (аг-2 _яг_4)

или после упрощения:

аг = 4- аг_2 — аг_4 (4)

(ср. с [12], где для получения формулы (4) привлечен аппарат производящих функций). К формуле (4) мы еще вернемся в следующем разделе.

Замечание 5. Изучению возможностей метода производящих функций для вычисления димерных чисел посвящен ряд работ, например, [15, 16, 17]. В [17] с использованием модификации метода матрицы переноса (подробно об этом методе см. в [18, с. 500-523]) показано также, что при заданном w числа аг удовлетворяют линейным рекуррентным соотношениям с постоянными целочисленными коэффициентами (см. также [19]).

Сформулируем задачу нормализации при некотором заданном w: найти натуральное R (порядокрекурсии) и целочисленные коэффициенты х1,х2,..-,хЕ, такие, что

= +Х2Я7—2 —з "Ь^ •' (5)

для каждого г = И + 1, й + 2, ...

Пусть выбрано некоторое № и известны димерные числа а1,.,а2д, где по поводу R можно утверждать лишь, что это - «достаточно большое» число. Для определения R и коэффициентов хх,х2,. хк рекуррентной формулы (5) используем следующее рабочее правило: вначале положим И = м/; если система линейных алгебраических уравнений (с. л. а. у.)

или в матричной записи:

aR ... аг \ /хг\ /aR+1\

- )(...) = ( - I (6)

\a2R-l ■■■ aR/ \XR/ \ a2R /

имеет целочисленное решение, то искомые коэффициенты найдены, в противном случае увеличим R на единицу и повторим попытку найти целочисленное решение системы (6).

В результате численных экспериментов получена следующая Гипотеза. Порядок рекурсии R в (5) можно выбрать равным

Двухшаговый подход к вычислению димерных чисел

Суть предлагаемого нами двухшагового подхода к вычислению димерных чисел такова. Пусть выбрано некоторое небольшое значение w.

На первом шаге средствами языка C# с применением классов Biglnteger и BigFloat вычислить по формуле (1) значения

a1,a2,0-2,—,a2R (7)

(где R = 2^/21) и для формирования рекуррентной формулы (5) решить с. л. а. у. (6).

Замечание 6. Разумеется, для вычисления значений (7) можно применить и любой другой из описанных выше способов. Для решения системы (6) рекомендуется применить систему компьютерной математики (с. к. м.) Wolfram Mathematica, нетрудно также реализовать на языке C# метод Гаусса последовательного исключения переменных (сложность метода O(R3)), когда с помощью элементарных преобразований система уравнений приводится к равносильной системе треугольного вида, из которой последовательно, начиная с последних (по номеру), находятся все переменные системы.

На втором шаге вычислить димерные числа аг для произвольного r = 2R + 1, 2R + 2, ... по полученной рекуррентной формуле, используя только операции сложения и умножения.

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

Применим наш подход к рассмотренному выше случаю w = 3.

R= 2iw/21 = 2i151 = 22 =4; далее по формуле (1): a1 = 0, a2 = 3, a3 = 0, a4 = 11, a5 = 0, a6 = 41, a7 = 0, a8 = 153. (w1) Дополним (w1) значениями a9 = 0, a10 = 571, избыточными для целей нормализации. Мы планируем использовать ниже значение a10 в качестве «проверочного значения».

Для экономии места выпишем матрицу коэффициентов M в левой части системы (6) и вектор коэффициентов в правой части (6) построчно:

M = {{a4, a3, a2, a1}, {a5, a4, a3, a2}, {a6, a5, a4, a3}, {a7, a6, a5, a4}}, (w2)

B = {a5, a6, a7, a8}. (w3)

В действительности мы применили способ записи команд, принятый в с. к. м. Wolfram Mathematica. Записи (w1), (w2), (w3), дополненные командой LinearSolve [M, B], будем называть сценарием с. к. м. Wolfram Mathematica для решения с. л. а. у. (6) или просто сценарием. Если наш сценарий поместить в окно с. к. м. Wolfram Mathematica и инспирировать командой Shift+Enter его выполнение, то увидим результат: {0,4,0,-1}, т. е. х1 = 0, х2 = 4, х3 = 0, х4 = —1, что соответствует формуле (4). Первый шаг завершен.

Замечание 7. Непривычное для математического текста написание переменной с индексом (al0 вместо привычного a10 и т. п.) объясняется стремлением придерживаться в данной части статьи написания символов, «как в с. к. м. Wolfram Mathematica», поскольку приведенные в Приложениях 1, 2, 3 фрагменты значительных размеров пред-

ставляют практически точные копии текстов из окна данной с. к. м. - как сконструированных авторской программой, написанной на C# для передачи в окно с. к. м. (сценарий), так и сгенерированных самой с. к. м. (вектор коэффициентов х).

На втором шаге последовательно вычислим по формуле (5) значения a9, a10, all и т. д., используя только операции умножения и сложения целых чисел. Например, а10 = x1 -а9 + х2 ■ а8 + х3 ■ а7 — х4 ■ а6 = 0-а9 + 4-а8 + 0-а7 — 1-а6 = = 4 ■ 153 - 1 ■ 41 = 612 - 41 = 571. Таким образом, результат совпал с «проверочным значением».

Для w = 4 и w = 8 в Приложении 1 приведены как сценарии, так и вычисленные по ним векторы коэффициентов соответствующих рекуррентных формул вида (5). Ввиду громоздкости записи сценария при w = 13 в Приложении 2 сценарий изложен в урезанном виде, однако вычисленный по ним вектор коэффициентов рекуррентной формулы (5) приведен полностью. Запись сценария для случая w = 14 заняла бы много страниц, поэтому в Приложении 3 мы ограничились вычисленным вектором коэффициентов х.

Замечание 8. Из численных экспериментов по вычислению вектора коэффициентов х для различных w видно, что последний ненулевой элемент вектора х равен -1; если обозначить его позицию в векторе х через N, то |Xj|= | xw_j|, i = 1,2,... В Приложениях 1, 2 и 3 в записи вектора х элемент xN/2 («центр симметрии») для наглядности выделен полужирным шрифтом. Мы не ставили целью в рамках данной статьи изложить исчерпывающее объяснение этих и других особенностей структуры вектора х (или даже рассмотрение их связи со спецификой системы (6) и с делимостью значения w на 2 или 4).

Заключение

В данной статье мы не уделили достаточного внимания некоторым важным аспектам проблемы вычисления димерных чисел: применению производящих функций (см. например, [15], [16], [18]), исследованию верхних оценок (см., например, [20], [21]) и др.

На наш взгляд, было бы интересно получить непосредственное доказательство существования нормализации (скажем, базирующееся на формуле (1)), а также уточнить или доказать гипотезу п. 3.2 о порядке рекурсии. Из Приложения 2 видно, что при w = 13 последние 16 из = 128 коэффициентов рекуррентной формулы (5) равны

нулю; следовательно, для этого случая порядок рекурсии меньше 128.

Интерес представляет также поиск исчерпывающего объяснения особенностей вектора коэффициентов х формулы (5), которые упоминаются в Замечании 8.

Авторы благодарят Т. С. Лугуева за ценные консультации по использованию класса BigFloаt.

Работа подготовлена при поддержке отдела математики и информатики ДФИЦ РАН.

Литература

1. Valiant L.G. The complexity of computing the permanent // Theoretical Computer Science. - 1979. - Vol. 8 (2). - P. 189-201.

2. Ловас Л., Пламмер М. Прикладные задачи теории графов. Теория паросочета-ний в математике, физике, химии. - М.: Мир, 1998. - 653 с.

3. Вялый М.Н. Пфаффианы или искусство расставлять знаки // Математическое просвещение. Сер. 3. - 2005. - Вып. 9. - С. 129-142.

4. Matouvsek J. Thirty-three Miniatures: Mathematical and Algorithmic Applications of Linear Algebra // Amer. Math. Soc. - 2010. - № 182.

5. Kasteleyn P.W. The statistic of dimers on a lattice I: The number of dimer arrangements on quadratic lattice // Physica. - 1961. - Vol. 27. - P. 1209-1225.

6. Temperley H.N.V. and Fisher M.E. Dimer problem in statistical mechanics - an exact result // Phil. Mag. - 1961. - Vol. 6. - P. 1061-1063.

7. Klarner D. and Pollack J. Domino tilings of rectangles with fixed width // Discrete Mathematics. - 1980. - Vol. 32. - P. 45-52.

8. Нурлигареев Х. Полоски из домино // Режим доступа: https://elementy.ru/problems/1612/Poloski_iz_domino, режим доступа свободный (дата обращения: 25.06.2020).

9. Магомедов А.М., Магомедов Т.А., Лавренченко С.А. Взаимно-рекуррентные формулы для перечисления разбиений прямоугольника // Прикладная дискретная математика. - 2019. - № 46. - С. 108-121.

10. Swamy M.N., Thulasiraman K. Graphs, Networks and Algorithms. - New York, Wiley-Inter-science, 1981. - 590 p.

11. Garey Michael R. and Jonson David S. Computers and Intractability. - San Francisco: W.H., Freeman and Company, 1979. - 347 p.

12. Read Ronald C. A note on tiling rectangles with dominoes // Fib. Q. - 1980. -Vol. 18 (1). - P. 24-27.

13. Волченков С.Г. Задача «Паркет» // Информатика и образование. - 1994. - № 3.

- С. 52-54.

14. Караваев А.М. Метод динамического программирования для подсчета замощений домино на прямоугольной решетке и цилиндре // Актуальные проблемы гуманитарных и естественных наук. - 2013. - № 6 (53). - С. 13-18.

15. Грэхем Р., Кнут Д., Паташник О. Конкретная математика. Основание информатики. - М.: Мир, 1998. - 703 с. (Пер. с анг.).

16. Караваев А.М., Перепечко С.Н. Задача о димерах на цилиндрах: рекуррентные соотношения и производящие функции // Математическое моделирование. - 2014. -Т. 26, № 11. - С. 18-22.

17. Faase F.J. On the number of specific spanning subgraphs of the graphs G*Pn // Ars Combinatoria. - 1998. - Vol. 49. - P. 129-154.

18. Stanley R.P. Enumerative Combinatorics. Vol. 1, Wadsworth & Brooks. - Cole, Monterey, CA, 1986. - 626 p.

19. Караваев А.М. Вывод линейного рекуррентного соотношения с постоянными целыми коэффициентами по заданной целочисленной последовательности // Естественные и технические науки. - 2012. - № 5 (61). - С. 22-27.

20. Perepechko S.N. Estimation of molecular freedom in the dimer model by the EFM method // Proceedings of the VI international conference "Mathematics, its applications and mathematical education" (MAME-2017). - Ulan-Ude, 2017. - P. 289-294.

21. Перепечко С.Н. Простые выражения для оценки параметра молекулярная свобода в задаче о димерах // Вестник ТвГУ. Сер.: Прикладная математика. - 2018. - № 2.

- С. 27-47.

Приложение 1. Сценарий и коэффициенты х1,...,хд.для w = 4■ (Я = 4) и w = 8

(Я = 16).

w = 4

а1 = 1; а2 = 5; а3 = 11; а4 = 36; а5 = 95; а6 = 281; а7 = 781; а8 = 2245; М = { {а4, а3, а2, а1}, {а5, а4, а3, а2}, {а6, а5, а4, а3}, {а7, а6, а5, а4} } В = {а5, а6, а7, а8} LinearSolve[M, В] х = {1, 5, 1, -1} ш = 8

а1 = 1; а2 = 34; а3 = 153; а4 = 2245; а5 = 14824; а6 = 167089; а7 = 1292697; а8 = 12988816;

а9= 108435745; а10 = 1031151241; а11 = 8940739824; а12 = 82741005829; а13 = 731164253833;

а14 = 6675498237130;а15 = 59554200469113; а16 = 540061286536921; а17 = 4841110033666048;

а18 = 43752732573098281; а19 = 393139145126822985; а20 = 3547073578562247994;

а21 = 31910388243436817641; а22 = 287665106926232833093; а23 = 2589464895903294456096;

а24 = 23333526083922816720025; а25 = 210103825878043857266833;

а26= 1892830605678515060701072; а27= 17046328120997609883612969;

а28 = 153554399246902845860302369; а29 = 1382974514097522648618420280;

а30= 12457255314954679645007780869; а31 = 112199448394764215277422176953;

а32= 1010618564986361239515088848178

М = {

{а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5, а4, а3, а2, а1}, {а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5, а4, а3, а2}, {а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5, а4, а3}, {а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5, а4}, {а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5}, {а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6}, {а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7}, {а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8}, {а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9}, {а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10}, {а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11}, {а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12}, {а28, а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13}, {а29, а28, а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14}, {а30, а29, а28, а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15},

{а31, а30, а29, а28, а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16} }

В = {а17, а18, а19, а20, а21, а22, а23, а24, а25, а26, а27, а28, а29, а30, а31, а32} LinearSolve[M, В]

х = {1, 76, 69, -921, -584, 4019, 829, -7012, 829, 4019, -584, -921, 69, 76, 1, -1}

Приложение 2. W = 13. Сокращенный сценарий и коэффициенты

а1 = 0; а2 = 377; а3 = 0; а4 = 413351; ...; а253 = 0; а254 =

7305693595153973690310283653133094441938747820611022210856749023879239354329799906

7558887689953495392593879883033994953984721953043917163072714592395196336854932268

6109890167429756027300799048204554323059827998337417815952916331934487608323169766

1701451916308696907163773536967119306163200042407732151090599297927047829658680974

49681340392093515537136146360612130448841814992199346868110935256598617;

а255 = 0;

а256 =

1023452656678192887419044731529754122608711445041335134993430716746394392013021703

4639087595752266918377922189839945649578035369081784975173901270358313447652851959 9963987194023721545765243851720659237972580263121829748109216281045452913171482933 2696579717230500263420138525572857652706799821412375832576692563485613095178462366 957427605659609089718416729010708239867977279547618836940818936648770788359; М = {

{а128, а127, а126, а125, а124, а123, а122, а121, а120, а119, а118, а117, а116, а115, а114, а113, а112, а111, а110, а109, а108, а107, а106, а105, а104, а103, а102, а101, а100, а99, а98, а97, а96,

а95, а94, а93, а92, а91, а90, а89, а88, а87, а86, а85, а84, а83, а82, а81, а80, а79, а78, а77, а76, а75, а74, а73,

а72, а71, а70, а69, а68, а67, а66, а65, а64, а63, а62, а61, а60, а59, а58, а57, а56, а55, а54, а53, а52, а51,

а50, а49, а48, а47, а46, а45, а44, а43, а42, а41, а40, а39, а38, а37, а36, а35, а34, а33, а32, а31, а30, а29, а28,

а27, а26, а25, а24, а23, а22, а21, а20, а19, а18, а17, а16, а15, а14, а13, а12, а11, а10, а9, а8, а7, а6, а5, а4, а3, а2, а1},

{а255, а254, а253, а252, а251, а250, а249, а248, а247, а246, а245, а244, а243, а242, а241, а240, а239, а238, а237, а236, а235, а234, а233, а232, а231, а230, а229, а228, а227, а226, а225, а224, а223, а222, а221, а220, а219, а218, а217, а216, а215, а214, а213, а212, а211, а210, а209, а208, а207, а206, а205, а204, а203, а202, а201, а200, а199, а198, а197, а196, а195, а194, а193, а192, а191, а190, а189, а188, а187, а186, а185, а184, а183, а182, а181, а180, а179, а178, а177, а176, а175, а174, а173, а172, а171, а170, а169, а168, а167, а166, а165, а164, а163, а162, а161, а160, а159, а158, а157, а156, а155, а154, а153, а152, а151, а150, а149, а148, а147, а146, а145, а144, а143, а142, а141, а140, а139, а138, а137, а136,

а135, а134,а133, а132, а131, а130, а129, а128} }

В = {а129, а130, а131, а132, а133, а134, а135, а136, а137, а138, а139, а140, а141, а142, а143, а144, а145, а146, а147, а148, а149, а150, а151, а152, а153, а154, а155, а156, а157, а158, а159, а160, а161, а162, а163, а164, а165, а166, а167, а168, а169, а170, а171, а172, а173, а174, а175, а176, а177, а178, а179, а180, а181, а182, а183, а184, а185, а186, а187, а188, а189, а190, а191, а192, а193, а194, а195, а196, а197, а198, а199, а200, а201, а202, а203, а204, а205, а206, а207, а208, а209, а210, а211, а212, а213, а214, а215, а216, а217, а218, а219, а220, а221, а222, а223, а224, а225, а226, а227, а228, а229, а230, а231, а232, а233, а234, а235, а236, а237, а238, а239, а240, а241, а242, а243, а244, а245, а246, а247, а248, а249, а250, а251, а252, а253, а254, а255, а256} Ыпеагёо1уе[М, В] х = {0,

2840, 0,

-2828192, 0, 1385198072, 0, -393409070536, 0, 71425933414496, 0, -8826967508184488,0,775361571207342328, 0, -49961396216383420696, 0, 2419007435403764589728, 0, -89687981753820737983992, 0, 2585716854171716078207816, 0, -58706342460872843841090400, 0, 1060935936193104692810763048, 0, -15401517790394590430563306012, 0, 181023492991112763644723736184, 0, -1734494741861771455510557873696, 0, 13628520386969092274723183939288, 0, -88262827537391823259502704776936, 0, 473212371740507993587340423565792, 0, -2108097731057783042707603165048904, 0, 7827629872094876528125317595080392, 0, -24288048318162885901181116742277880, 0, 63109012027345109110603425574826272, 0, -137549703344845524606501294284703576, 0,251808501351411792958777266718605800, 0, -387572456569235087302795754614134496, 0, 501886395818387359641520504781621576, 0, -547020486605109005346891180622597190, 0, 501886395818387359641520504781621576, 0,

-387572456569235087302795754614134496, 0, 251808501351411792958777266718605800, 0, -137549703344845524606501294284703576, 0, 63109012027345109110603425574826272, 0, -24288048318162885901181116742277880, 0, 7827629872094876528125317595080392, 0, -2108097731057783042707603165048904, 0, 473212371740507993587340423565792, 0, -88262827537391823259502704776936, 0, 13628520386969092274723183939288, 0, -1734494741861771455510557873696, 0, 181023492991112763644723736184, 0, -15401517790394590430563306012, 0, 1060935936193104692810763048, 0, -58706342460872843841090400, 0, 2585716854171716078207816, 0, -89687981753820737983992, 0, 2419007435403764589728, 0, -49961396216383420696,0, 775361571207342328, 0, -8826967508184488, 0, 71425933414496, 0, -393409070536, 0, 1385198072, 0, -2828192, 0, 2840, 0, -1,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}.

Приложение 3. XV = 14. Коэффициенты

х = {1,

3976, 12009,

-5087249, -14309061,

3218923168,5920466231,

-1199408867773, -1007320922928,

289407682932732, 507923996712,

-48012540718366992, 30816562497605028,

5709147070432020240, -6294773468412320948,

-501991838564883720952, 704522446202167612448,

33458286010067039115852, -52498885480919742717352,

-1725447885810366005731788, 2800822703844803987286464,

70040884413731774539712728, -111252726682895788674571124,

-2270189089267256457025729104, 3372711198661483929240680484,

59447059712960616190595476848, -79338279935086463136560036664,

-1269661912206436523379344541948, 1463817239355604228949683456272,

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

22287586381360349352725191618048, -21302306429711074665146579025004,

-323553871978255494692399358911128, 244450921111034343920517656158464,

3904355298130429284420594322373444, -2191707252878391597263861761730376,

-39330834839605559116002017214304456, 14933171288429002851458106239033596,

331982339379699016067437602889044856, -71204153167019966670493916849814960,

-2355821652464206023843359713444228596, 159809325250731385851581390597840616,

14097638038759652757851889162574816656, 838980762418138538038533055740721044,

-71347016583404790651062399021509813104,

-11964052704303446228209040158420040996, 306210312634405342957794643621440208328,

78795368016603651743500579542690100736,

-1117428376046765856304342800049682590308,

-367974871703932329869043247341503156488,3475949532021878984117830307060155824612,

1336889567433902380926955345968946681952,

-9239158361897271394811337114482511559592,

-3919662292967541033773309690431983703652,

21032453403595066556316192629527560861360,

9448053915161831738912727096420340092180,

-41092487000052829019854917067706813303280,

-18925637450502534400975022774111959567800,

69034025581433022057820194879566750353140,

31716004693870812338369460080254271481360,

-99878445571596386271084636933567137730490,

-44654126950410235171052949891497195273570,

124595491568723382346496304315750319050040,

52953613299334006059407707007236670343690,

-134114604283996242654522198595628392683110,

-52953613299334006059407707007236670343690,

124595491568723382346496304315750319050040,

44654126950410235171052949891497195273570,

-99878445571596386271084636933567137730490,

-31716004693870812338369460080254271481360,

69034025581433022057820194879566750353140,

18925637450502534400975022774111959567800,

-41092487000052829019854917067706813303280,

-9448053915161831738912727096420340092180,

21032453403595066556316192629527560861360,

3919662292967541033773309690431983703652,

-9239158361897271394811337114482511559592,

-1336889567433902380926955345968946681952,

3475949532021878984117830307060155824612, 367974871703932329869043247341503156488, -1117428376046765856304342800049682590308,

-78795368016603651743500579542690100736, 306210312634405342957794643621440208328,

11964052704303446228209040158420040996,

-71347016583404790651062399021509813104,

-838980762418138538038533055740721044, 14097638038759652757851889162574816656, -159809325250731385851581390597840616,

-2355821652464206023843359713444228596, 71204153167019966670493916849814960,

331982339379699016067437602889044856,

-14933171288429002851458106239033596,

-39330834839605559116002017214304456, 2191707252878391597263861761730376,

3904355298130429284420594322373444,

-244450921111034343920517656158464,

-323553871978255494692399358911128, 21302306429711074665146579025004,

22287586381360349352725191618048,

-1463817239355604228949683456272,

-1269661912206436523379344541948, 79338279935086463136560036664,

59447059712960616190595476848,

-3372711198661483929240680484,

-2270189089267256457025729104, 111252726682895788674571124,

70040884413731774539712728,

-2800822703844803987286464,

-1725447885810366005731788, 52498885480919742717352,

33458286010067039115852,

-704522446202167612448,

-501991838564883720952, 6294773468412320948,

5709147070432020240,

-30816562497605028,

-48012540718366992,

-507923996712,

289407682932732,1007320922928, -1199408867773,

-5920466231,_

3218923168,14309061, -5087249, -12009, 3976, -1, -1}.

Поступила в редакцию 25 августа 2020 г.

UDC 519.175

DOI: 10.21779/2542-0321-2020-35-4-13-26

C# Computing Tools for Solving the Problem of Enumerating Partitions of a Rectangle

A.M. Magomedov1, S..А. Lawrencenko2

1 Dagestan State University; Russia, 367000, Makhachkala, M. Gadzhiev st., 43a; ma-gomedtagirl@yandex.ru, yakubovaz@mail.ru;

2 Russian State University of Tourism and Service; Russia, Moscow region, 141221, Pushkino district, Cherkizovo, Glavnaya st., 99; lawrencenko@hotmail.com

We consider the problem of enumerating all partitions of a rectangle with given integer sizes h*w into rectangles with sizes 1*2, which arose in the 60s of the 20th century in the study of thermodynamics of fluid flows by physicists. The identification of equivalence to the problem of enumerating all perfect matchings in a certain planar graph drew attention to the problem from specialists in discrete mathematics. Despite the fact that dozens of papers have been devoted to the study of the problem, interest in it does not weaken.

The article provides a brief overview of common approaches to solving the problem with the analysis of their disadvantages; in particular, the "classical" double product formula involves operations on floating point numbers (values of trigonometric functions, etc.), which significantly narrows the range of values of h and w, for which it is possible to accurately calculate the desired value of the number of possible partitions.

A method is given for calculating the coefficients of a recurrent formula that uses only integer addition and multiplication operations to find ah (the number of partitions for a fixed value of the parameter w).

A two-step approach is proposed to the solution. At the first step, using the Biglnteger and BigFloat classes of the C# programming language, a lot of laborious work is done to accurately calculate the required number of initial terms of the sequence a1, a2, ..., which in turn provide an opportunity to calculate integer coefficients for building a recurrence formula. At the second step, the recurrence formula provides an efficient and accurate calculation of the subsequent terms of a given sequence, using only the operations of addition and multiplication of integers.

At the end of the article, the relevant subtasks of the problem are formulated.

Keywords: rectangle, C#, matching, enumeration, software.

Received 25 August 2020

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