2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение24.10.2019, 19:58 
Аватара пользователя


22/11/13
02/04/25
549
По доске $n\times3$ ходит ладья (по стандартным правилам) посещая каждую клетку не более одного раза. Её задача - посетить все клетки. Суммируя различные способы сделать это для каждой из возможных стартовых клеток мы получаем общее число Гамильтоновых путей, которое равно
$$a(n)=6n!\left(1+[n>1]\cdot\sum\limits_{j=2}^{n}\sum\limits_{k=1}^{2^{j-1}-1}\sum\limits_{p=0}^{2^j-1}\frac{1}{(n-j)!}\prod\limits_{i=0}^{2}A!R(A,f(i,j,k)-1)\right)$$
где
$$A=n-2f(i,j,k)+[i=0]+[i=h(j,k)]-\sum\limits_{q=0}^{j-1}[i=g(j-q,\left\lfloor\frac{k}{2^q}\right\rfloor)]\cdot L(p,q)$$$$h(n,k)=[n=1]\cdot[k=0]+[n>1]\cdot[0\leqslant k<2^{n-1}]\cdot\left(1+k \operatorname{mod} 2 + \left\lfloor\frac{k \operatorname{mod} 2 - h(n-1,\left\lfloor\frac{k}{2}\right\rfloor)}{2}\right\rfloor\right)$$$$g(n,k)=[n=1]\cdot[k=0]\cdot2+[n>1]\cdot[0\leqslant k<2^{n-1}]\cdot h(n,k+(-1)^k)$$$$f(i,n,k)=[0\leqslant i<2]\cdot[n=1]\cdot[k=0]+[0\leqslant i<3]\cdot[n>1]\cdot[0\leqslant k<2^{n-1}]\cdot\left(f(i,n-1,\left\lfloor\frac{k}{2}\right\rfloor)+[i=h(n,k)]\right)$$$$L(n,k)=\left\lfloor\frac{n}{2^k}\right\rfloor \operatorname{mod} 2, R(n,k)=\binom{n+k}{k}$$
На первый взгляд вся эта конструкция может показаться устрашающей (например для тех, кто не пытался рассматривать случай $n\times4$ и выше).

Вопрос, собственно, очевиден - что и как можно упростить в плане подсчета, например, на PARI?

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 10:15 


23/11/09
173
Можно попробовать считать рекуррентно, хотя я не проверял насколько получится (потратил на эту задачу пару секунд). Любое короткое сечение доски имеет одно и то же, определенное число конфигураций кромки. В некоторых из этих конфигураций мы можем рассечь исходный путь на два в других на четыре пути (возможно в конфигурации кромки придется еще учесть сколько концов пути -0,1,2 имеются в левой части сечения). Обозначив $L_1(m),L_2(m),..., L_{10}(m)$ как число путей с типовой конфигурацией кромок (предположим их десять) можно получить линейную систему рекуррентных уравнений. Такие системы легко решаются .

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 12:52 
Аватара пользователя


22/11/13
02/04/25
549
deep blue в сообщении #1422322 писал(а):
Можно попробовать считать рекуррентно, хотя я не проверял насколько получится (потратил на эту задачу пару секунд).

Рекурсия для вспомогательных функций, которые я привёл выше или для самой $a(n)$?

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

В предыдущем случае $n\times2$
$$a_2(n)=2n!\sum\limits_{k=1}^{n}(n-k)!R(n-k,\left\lfloor\frac{k}{2}\right\rfloor)R(n-k,\left\lfloor\frac{k-1}{2}\right\rfloor)$$
где все так же
$$R(n,k)=\binom{n+k}{k}$$
существует нелинейная рекурсия
$$a_2(n)=[n=1]\cdot2+[n=2]\cdot8+[n>2]\cdot n(n-1)(a_2(n-1)+a_2(n-2))$$
Как она выводится, если заранее известно представление в виде суммы - для меня до сих пор загадка. Это как-то связано с функциями Бесселя, а там уравнения с производными, сложно. Все это наводит на мысль, что для $n\times3$ рекурсия ещё хитрее и помимо бинома там могут быть $2^n$.

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 13:15 
Заслуженный участник


20/08/14
11778
Россия, Москва
kthxbye в сообщении #1422344 писал(а):
на всякий случай отмечу, что число возможных путей одинаково для любой стартовой клетки.
А это утверждение доказано? Что-то для доски $1\times3$ для центральной стартовой клетки решений вообще нет, а для крайних по одному пути.
Для доски $2\times3$ аналогично, для всех 4-х угловых по 3 пути, для двух центральных лишь по два пути - тоже разное количество.
Думаю не равенство сохранится и для любого другого размера.

Ну или я не понял условие задачи.
UPD. Да, не понял. Вопрос снимаю.

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 13:40 


05/09/16
12061
kthxbye в сообщении #1422264 писал(а):
Вопрос, собственно, очевиден - что и как можно упростить в плане подсчета, например, на PARI?

Считаться все будет в лучшем виде, а в чём затруднения?
Давайте начнём, что ли, с этого:
kthxbye в сообщении #1422264 писал(а):
$$f(i,n,k)=[0\leqslant i<2]\cdot[n=1]\cdot[k=0]+[0\leqslant i<3]\cdot[n>1]\cdot[0\leqslant k<2^{n-1}]\cdot\left(f(i,n-1,\left\lfloor\frac{k}{2}\right\rfloor)+[i=h(n,k)]\right)$$

Например, вот это $[0\leqslant i<2]\cdot[n=1]\cdot[k=0]$ значит, что если все условия в квадратных скобках выполнены, то выражение равно единице, иначе нулю?

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 13:55 


14/01/11
3039
Dmitriy40 в сообщении #1422349 писал(а):
Ну или я не понял условие задачи.

Ладья может перепрыгивать через клетки, на которых она уже бывала раньше, т.е. граф, обход которого производится, имеет вид $K_3 \square K_n$, как я понимаю.

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 14:15 


05/09/16
12061
А, не. Лучше с этой начать. В ней нету других функций.
kthxbye в сообщении #1422264 писал(а):
$$h(n,k)=[n=1]\cdot[k=0]+[n>1]\cdot[0\leqslant k<2^{n-1}]\cdot\left(1+k \operatorname{mod} 2 + \left\lfloor\frac{k \operatorname{mod} 2 - h(n-1,\left\lfloor\frac{k}{2}\right\rfloor)}{2}\right\rfloor\right)$$

Вопрос тот же, по квадратным скобкам.

Вот функция которая вычисляет $h(n,k)$

Код:
MH=Map();
h(n,k)={
my(sum1,sum2,factor1,res);
if(mapisdefined(MH,[n,k],&res),return(res));
if(n==1 && k==0,sum1=1,sum1=0);
if(n>1 && k>=0 && k<2^(n-1), factor1=1, factor1=0);
if(factor1==0, mapput(MH,[n,k],sum1);return(sum1));
sum2=1+k%2+(k%2-h(n-1,k\2))\2;
res=sum1+sum2;
mapput(MH,[n,k],res);
return(res);
}

MH -- это запомненные значения функции, на всякий случай.
Вот несколько их, кстати:

h(1, 0)=1
h(2, 0)=0
h(3, 0)=1
h(4, 0)=0
h(5, 0)=1
h(6, 0)=0
h(7, 1)=2
h(8, 2)=0
h(9, 5)=2
h(10, 10)=0


Это правильно посчиталось?

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 17:53 
Аватара пользователя


22/11/13
02/04/25
549
Sender в сообщении #1422357 писал(а):
Dmitriy40 в сообщении #1422349 писал(а):
Ну или я не понял условие задачи.

Ладья может перепрыгивать через клетки, на которых она уже бывала раньше, т.е. граф, обход которого производится, имеет вид $K_3 \square K_n$, как я понимаю.

Абсолютно точно. Ладья просто визуально понятнее.

wrest в сообщении #1422353 писал(а):
Например, вот это $[0\leqslant i<2]\cdot[n=1]\cdot[k=0]$ значит, что если все условия в квадратных скобках выполнены, то выражение равно единице, иначе нулю?

Именно так. Если выражение истинно, скобка возвращает 1, если ложно - 0.

wrest в сообщении #1422358 писал(а):
Это правильно посчиталось?

Да, все верно. Значения $h(n,k)\in\left\lbrace0,1,2\right\rbrace$. Она нужна чтобы превращать

  • $0$ в $1,2$
  • $1$ в $0,2$
  • $2$ в $0,1$

wrest в сообщении #1422353 писал(а):
Считаться все будет в лучшем виде, а в чём затруднения?

Возрастающее число слагаемых в суммах по $k$ и по $p$.

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 18:37 


05/09/16
12061
kthxbye в сообщении #1422403 писал(а):
Возрастающее число слагаемых в суммах по $k$ и по $p$.

Ну знаете, при численном интегрировании слагаемых тоже немало...
kthxbye в сообщении #1422403 писал(а):
Именно так. Если выражение истинно, скобка возвращает 1, если ложно - 0.

Ok, вот вам $f(i,n,k)$
Код:
MF=Map();
f(i,n,k)={
my(sum1,sum2,sum3,factor1,res);
if(mapisdefined(MF,[i,n,k],&res),return(res));
if(i >=0 && i<2 && n==1 && k==0, sum1=1,sum1=0);
if(i >=0 && i<3 && n>1 && k>=0 && k<2^(n-1), factor1=1,factor1=0);
if(factor1==0, mapput(MF,[i,n,k],sum1);return(sum1));
if(i==h(n,k),sum2=1,sum2=0);
sum3=f(i,n-1,k\2);
res=sum1+sum2+sum3;
mapput(MF,[i,n,k],res);
return(res);
}


А, погодите, или вы имели в виду что вы на PARI уже всё написали и оно долго считается?

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 20:18 
Аватара пользователя


22/11/13
02/04/25
549
wrest в сообщении #1422421 писал(а):
А, погодите, или вы имели в виду что вы на PARI уже всё написали и оно долго считается?

Вообще, да. Но в ваших способах задания функций я все равно постараюсь разобраться.

Вы не пробовали оценить скорость выдачи $a(n)$?

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение25.10.2019, 20:27 


05/09/16
12061
kthxbye в сообщении #1422435 писал(а):
Вы не пробовали оценить скорость выдачи $a(n)$?

Нет, не пробовал.

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение26.10.2019, 11:32 


23/11/09
173
Ладно уговорили распишу немного подробнее, во имя квадратных скобочек Айверсона.
Коробит смотреть на эти вложенные суммы, когда существует примитивный линейный алгоритм подсчета для любой доски вида (const , n).
Определим вспомогательную функцию $L_{1,0,0,0}(m)$ как количество элементарных путей либо пар элементарных путей заполняющих всю доску (3,m), не содержащих ни одной вершины типа Х (Назовем вершиной типа X - начало либо конец Гамильтонова пути уже на доске (3,n) а не (3,m)) на доске (3,m). При этом верхняя правая клеточка доски (3,m) помечена единичкой, что означает путь из неё может и должен быть продолжен, при переходе к доске (3,m+1) в рекуррентном соотношении.
Аналогично определяются все 24 вспомогательные функции
$L_{0,1,0,0}(m)$,$L_{0,1,1,0}(m)$, итд. Где последнее число в записи $0,1,1,0$ кодирует количество вершин типа X на доске (3,m). Их может быть 0,1 или 2.

Далее составляем 24 рекуррентных соотношения для каждой из вспомогательных функций.
$L_{0,0,1,0}(m+1)=L_{1,0,0,0}(m)+L_{1,1,1,0}(m)$
$L_{0,1,0,0}(m+1)=0$
$L_{1,0,0,0}(m+1)=L_{0,0,1,0}(m)+L_{1,1,1,0}(m)$
$L_{1,1,0,0}(m+1)=0$
$L_{1,0,1,0}(m+1)=0$
$L_{0,1,1,0}(m+1)=0$
$L_{1,1,1,0}(m+1)=L_{1,1,1,0}(m)+L_{1,0,0,0}(m)+L_{0,0,1,0}(m)$
$L_{1,0,0,1}(m+1)=L_{0,0,1,1}(m)+L_{1,1,1,1}(m)+L_{0,1,1,0}(m)$
$L_{0,1,0,1}(m+1)=0$
...
$L_{1,0,0,2}(m+1)=L_{0,0,1,2}(m)+L_{1,1,1,2}(m)+L_{0,1,1,1}(m)$
...

Конечный ответ получается по очевидной формуле $a(n)=2L_{1,1,1,1}(n-1)+L_{1,0,1,2}(n-1)$

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение31.10.2019, 15:59 
Аватара пользователя


22/11/13
02/04/25
549
deep blue в сообщении #1422502 писал(а):
Ладно уговорили распишу немного подробнее, во имя квадратных скобочек Айверсона.

Выражаю вам благодарность, но к сожалению и здесь суть опять ускользнула от меня. Ну как, я понял что
deep blue в сообщении #1422502 писал(а):
последнее число в записи $0,1,1,0$ кодирует количество вершин типа X на доске (3,m). Их может быть 0,1 или 2.

ровно как и то, что первые три числа это цифры чисел 0-7 в двоичной системе счисления.

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

Что касается оптимизации, то удалось упростить часть функций, а именно
$$h(n,k), [i=h(n,k)], g(n,k)$$
до значений последовательностей, которые мы легко генерируем в одномерных массивах. Дало это, правда, всего пару новых значений $a(n)$ (за то же время).

 Профиль  
                  
 
 Re: Подсчет Гам.-ых путей ладьи на доске nx3
Сообщение16.11.2019, 19:25 
Аватара пользователя


22/11/13
02/04/25
549
На днях добавили A329319. Все желающие могут размещать там (либо напрямую в A269565) примитивные линейные алгоритмы, если таковые существуют и возвращают корректные значения (совпадающие, например, с результатом работы какого-нибудь алгоритма перебора). Буду очень признателен.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Daniel_Trumps


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group