Быстрое вычисление членов линейной рекуррентной последовательности — различия между версиями
Dogzik (обсуждение | вклад) (Новая страница: «Пусть нам дана линейная реккурента размера <tex>k</tex>. А именно: <tex>a_n = c_1 \cdot a_{n - 1} + c_2 \cdot a_{n - 2…») |
Dogzik (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
Пусть нам дана линейная реккурента размера <tex>k</tex>. А именно: <tex>a_n = c_1 \cdot a_{n - 1} + c_2 \cdot a_{n - 2} + \cdots + c_k \cdot a_{n - k}</tex>. Требуется уметь вычислять произвольное <tex>a_n</tex>. | Пусть нам дана линейная реккурента размера <tex>k</tex>. А именно: <tex>a_n = c_1 \cdot a_{n - 1} + c_2 \cdot a_{n - 2} + \cdots + c_k \cdot a_{n - k}</tex>. Требуется уметь вычислять произвольное <tex>a_n</tex>. | ||
+ | |||
+ | Самый простой способ сделать это {{---}} последовательно считать каждый <tex>a_i</tex>, пока <tex>i</tex> не сравняется с <tex>n</tex>. Однако этот способ не самый эффективный, ведь он, очевидно, требует <tex>O(n \cdot k)</tex> времени. Хочется уметь делать это быстрее. Рассмотрим два способа это сделать. |
Версия 17:12, 11 июня 2018
Пусть нам дана линейная реккурента размера
. А именно: . Требуется уметь вычислять произвольное .Самый простой способ сделать это — последовательно считать каждый
, пока не сравняется с . Однако этот способ не самый эффективный, ведь он, очевидно, требует времени. Хочется уметь делать это быстрее. Рассмотрим два способа это сделать.