Изменения

Перейти к: навигация, поиск

Динамическое программирование по профилю

483 байта добавлено, 00:26, 15 января 2015
Нет описания правки
Отождествим все профили с один переходом с теми, кто их них получается. Это будет выглядеть так: пусть <tex>pr_2</tex> (и только он) получается из <tex>pr_1</tex>, который, в свою очередь, получается из <tex>pr_0</tex>. Тогда имеются такие соотношения: <tex>d[pr_0, pr_1] = 1</tex>, <tex>d[pr_1, pr_2] = 1</tex>. Отождествить <tex>pr_1</tex> и <tex>pr_2</tex> {{---}} это, по сути, заменить эти два соотношение на одно, то есть теперь <tex>d[pr_0, pr_1] = 0</tex> и <tex>d[pr_1, pr_2] = 0</tex>, но <tex>d[pr_0, pr_2] = 1</tex>, и так далее.
Таким образом, возможно сокращение профилей не менее чем вдвое. Дальнейшие оптимизации мы оставляем читателю.
Таким образомПо-прежнему <tex>a[k][i]</tex> {{---}} количество способов замощения первых <tex>k - 1</tex> столбцов и заканчивавшийся на <tex>p_i</tex>-ом профиле.Тогда <tex>a[k][p_i]=\displaystyle \sum_{j = 0}^{2^nn - 1} a[k - 1][j]\cdot d[j][p_i]</tex> Ответом будет <tex> \sum a[m][p_i]</tex>, возможно сокращение профилей не менее чем вдвое. Дальнейшие оптимизации мы оставляем читателюгде <tex>p_i</tex> {{---}} профиль, который может быть последним.
В итоге получаем асимптотику <tex>O(2^nnm)</tex>. Она значительно лучше всего, что мы получали до сих пор, и это серьезный повод использовать изломанный профиль вместо обычного.
49
правок

Навигация