Быстрое вычисление членов линейной рекуррентной последовательности — различия между версиями
Dogzik (обсуждение | вклад) |
Dogzik (обсуждение | вклад) |
||
Строка 21: | Строка 21: | ||
\end{pmatrix}</tex> | \end{pmatrix}</tex> | ||
− | Заметим, что умножив <tex>A_0</tex> слева на <tex>T</tex> мы получим столбик <tex>A_1</tex> следующего вида: | + | Заметим, что умножив <tex>A_0</tex> слева на <tex>T</tex>, мы получим столбик <tex>A_1</tex> следующего вида: |
<tex>A_1 = T \cdot A_0 = \begin{pmatrix} | <tex>A_1 = T \cdot A_0 = \begin{pmatrix} | ||
a_{k}\\ | a_{k}\\ | ||
Строка 28: | Строка 28: | ||
a_1 | a_1 | ||
\end{pmatrix}</tex> | \end{pmatrix}</tex> | ||
− | Аналогично домножив <tex>A_1</tex> слева на <tex>T</tex> получим | + | Аналогично, домножив <tex>A_1</tex> слева на <tex>T</tex>, получим |
<tex>A_2 = T \cdot A_1 = \begin{pmatrix} | <tex>A_2 = T \cdot A_1 = \begin{pmatrix} | ||
a_{k + 1}\\ | a_{k + 1}\\ | ||
Строка 36: | Строка 36: | ||
\end{pmatrix}</tex> | \end{pmatrix}</tex> | ||
− | Продолжая так для любого <tex>i</tex> мы получим столбик <tex>A_i</tex> состоящий из <tex>k</tex> подряд идущий членов последовательности, начиная с <tex>a_i</tex> | + | Продолжая так для любого <tex>i</tex>, мы получим столбик <tex>A_i</tex>, состоящий из <tex>k</tex> подряд идущий членов последовательности, начиная с <tex>a_i</tex> |
Версия 18:07, 11 июня 2018
Пусть нам дана линейная реккурента размера . А именно: , а так же заданы первых членов. Требуется уметь вычислять произвольное .
Самый простой способ сделать это — последовательно считать каждый
, пока не сравняется с . Однако этот способ не самый эффективный, ведь он, очевидно, требует времени. Хочется уметь как-то быстрее решать эту задачу. Рассмотрим два способа это сделать.Первый способ (за )
Заметим, что линейные рекурренты хорошо выражаются через матрицы. Запишем наши первые
членов последовательности в столбик. Так же выпишем следующую матрицу перехода:Заметим, что умножив
слева на , мы получим столбик следующего вида: Аналогично, домножив слева на , получимПродолжая так для любого
, мы получим столбик , состоящий из подряд идущий членов последовательности, начиная с