변형 피보나치 수열의 행렬 점화식

다음과 같은 점화식을 보자.

$$ f(n)=A \cdot f(n-1)+B \cdot f(n-k) $$

여기서 $A=1,~B=1,~k=2$ 라면 일반 피보나치 수열이다.

이 문제를 그냥 푸는것보다 피보나치 수열꼴의 점홧기에 $A,B,k$ 값이 달라졌을 때 행렬을 어떻게 구성할 수 있는지 살펴보자.

이 글에선 위와 같은 꼴을 다룰 뿐이지만, 결국 위와 같은 선형 점화식 대한 행렬을 구성함에 있어 이해를 돕는다.

이 글에서 다루진 않지만 더 고급 개념인 키타마사법이나 벌레캠프 메시를 이해하는데도 도움이 될 것이다.

일반 피보나치 수열에 쓰이는 행렬을 살펴보자.

$$ \begin{pmatrix} f(n)\\ f(n-1) \end{pmatrix} = \begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} f(n-1) \\ f(n-2) \end{pmatrix} $$

여기서 $A, B$ 를 추가해보자.

$$ f(n)=A \cdot f(n-1)+B \cdot f(n-2) $$

라 하자.

$$ \begin{pmatrix} f(n)\\ f(n-1) \end{pmatrix} = \begin{pmatrix} A & B \\ 1 & 0 \end{pmatrix} \begin{pmatrix} f(n-1) \\ f(n-2) \end{pmatrix} $$

단순히 $1$행의 $1, 1$을 $A, B$로 바꾸는 것으로 원하는 결과를 만들었다.

$f(n-k)$ 란 값이 등장하기 위해 $k$행 $k$열의 행렬이 필요하다는 것을 유추할 수 있다.

결국 최종 점화식은 다음과 같다.

$$ \begin{pmatrix}f(n) \\ f(n-1) \\ f(n-2)\\ \vdots \\ f(n-k+2) \\ f(n-k+1)\end{pmatrix} = \begin{pmatrix}A & 0 & \cdots & 0 & B \\ 1 & 0 & \cdots & 0 & 0 \\ 0 & 1 & \cdots & 0 & 0 \\ &&\vdots \\ 0 & 0 & \cdots & 0 & 0 \\ 0 & 0 & \cdots & 1 & 0 \end{pmatrix} \begin{pmatrix} f(n-1) \\ f(n-2) \\ f(n-3) \\ \vdots \\ f(n-k+1) \\ f(n-k) \end{pmatrix} $$

이런식으로 행렬을 구성하면 $O(k^3 \log n)$ 에 문제를 해결할 수 있다.

연습 문제

BOJ 17272 - 리그 오브 레전설 (Large)

$$ f(n)=f(n-1)+f(n-k) $$

를 구하는 문제이다.

Comments