Linearism › 이산수학 › DM.9

9강. 점화식

이산수학 · 3부. 세기

심화 · 약 20분 · 연습문제 6 · 그림 1

요약

점화식으로 세기, 선형 동차 점화식과 특성방정식, 중근, 비동차 점화식, 분할정복 점화식

어떤 수를 직접 세기 어려울 때, 크기 nn인 경우를 더 작은 경우로 나타내는 식(점화식)을 세우면 쉬워집니다. 이 강에서는 점화식을 세우는 법과, 계수가 상수인 선형 점화식을 닫힌 꼴로 푸는 법을 다룹니다. 풀이 방법은 선형대수의 고윳값과 같은 구조입니다.

9.1 점화식으로 세기

정의 9.1 (점화식). 수열 ana_n의 항을 앞의 항들로 나타낸 식을 점화식(recurrence relation)이라 하고, 수열을 정하는 데 필요한 처음 몇 항을 초기조건(initial condition)이라 합니다.

예제 9.2 (하노이의 탑). 원판 nn개를 옮기는 최소 횟수 HnH_n은 “위 n−1n-1개를 옆으로, 가장 큰 것을 목표로, n−1n-1개를 그 위로” 옮기므로 Hn=2Hn−1+1H_n = 2H_{n-1} + 1, H1=1H_1 = 1입니다. 풀면 Hn=2n−1H_n = 2^n - 1입니다.

예제 9.3 (연속한 1이 없는 비트열). 길이 nn인 비트열 가운데 1이 연달아 나오지 않는 것의 수를 ana_n이라 합시다. 마지막 비트가 0이면 앞은 길이 n−1n-1인 아무 그런 비트열(an−1a_{n-1}가지), 1이면 그 앞은 반드시 0이고 그 앞은 길이 n−2n-2인 그런 비트열(an−2a_{n-2}가지)입니다. 그러므로 an=an−1+an−2a_n = a_{n-1} + a_{n-2}, a1=2a_1 = 2, a2=3a_2 = 3입니다. 피보나치 수열을 두 칸 민 것(an=Fn+2a_n = F_{n+2})입니다.

9.2 선형 동차 점화식

정의 9.4. 상수 c1,…,ckc_1, \dots, c_k(ck≠0c_k \ne 0)에 대해 an=c1an−1+⋯+ckan−ka_n = c_1 a_{n-1} + \cdots + c_k a_{n-k} 꼴을 kk계 선형 동차 점화식이라 합니다.

an=rna_n = r^n 꼴의 해를 찾아봅니다. 넣으면 rn=c1rn−1+⋯+ckrn−kr^n = c_1 r^{n-1} + \cdots + c_k r^{n-k}이고, rn−kr^{n-k}로 나누면

rk−c1rk−1−⋯−ck=0r^k - c_1 r^{k-1} - \cdots - c_k = 0

이 됩니다. 이것을 특성방정식(characteristic equation), 그 근을 특성근(characteristic root)이라 합니다.

정리 9.5 (서로 다른 특성근). 2계 점화식 an=c1an−1+c2an−2a_n = c_1 a_{n-1} + c_2 a_{n-2}의 특성방정식 r2−c1r−c2=0r^2 - c_1 r - c_2 = 0이 서로 다른 두 근 r1r_1, r2r_2를 가지면, 모든 해는

an=αr1n+βr2na_n = \alpha r_1^n + \beta r_2^n

꼴이고 α\alpha, β\beta는 초기조건으로 정해집니다.

증명. r1nr_1^n, r2nr_2^n이 각각 해이고, 점화식이 선형이므로 그 일차결합도 해입니다. 초기조건 a0=α+βa_0 = \alpha + \beta, a1=αr1+βr2a_1 = \alpha r_1 + \beta r_2는 r1≠r2r_1 \ne r_2이면 α\alpha, β\beta에 대해 유일하게 풀립니다. 2계 점화식의 해는 a0a_0, a1a_1로 완전히 정해지므로(귀납법) 모든 해가 이 꼴입니다. □

예제 9.6 (피보나치 수의 닫힌 꼴). Fn=Fn−1+Fn−2F_n = F_{n-1} + F_{n-2}의 특성방정식은 r2−r−1=0r^2 - r - 1 = 0이고 근은 φ=1+52\varphi = \frac{1+\sqrt5}{2}, ψ=1−52\psi = \frac{1-\sqrt5}{2}입니다. F0=0=α+βF_0 = 0 = \alpha + \beta, F1=1=αφ+βψF_1 = 1 = \alpha\varphi + \beta\psi를 풀면 α=1/5\alpha = 1/\sqrt5, β=−1/5\beta = -1/\sqrt5이므로

Fn=15(φn−ψn).F_n = \frac{1}{\sqrt5}\left(\varphi^n - \psi^n\right).

∣ψ∣<1|\psi| < 1이므로 nn이 크면 ψn\psi^n은 무시할 수 있고, FnF_n은 φn/5\varphi^n/\sqrt5에 가장 가까운 정수입니다. 이웃한 항의 비 Fn+1/FnF_{n+1}/F_n은 황금비 φ≈1.618\varphi \approx 1.618로 갑니다.

계수 p, q와 초항을 바꾸면 수열의 모양이 바뀝니다. 크기가 가장 큰 특성근이 1보다 크면 커지고, 작으면 0으로 가고, 켤레복소수면 진동합니다

이 위젯은 JavaScript가 필요합니다

9.3 중근

정리 9.7. 특성방정식이 중근 r0r_0을 가지면 모든 해는 an=(α+βn)r0na_n = (\alpha + \beta n) r_0^n 꼴입니다.

증명 개요. r2−c1r−c2=(r−r0)2r^2 - c_1 r - c_2 = (r - r_0)^2이면 c1=2r0c_1 = 2r_0, c2=−r02c_2 = -r_0^2입니다. nr0nn r_0^n을 넣으면 2r0(n−1)r0n−1−r02(n−2)r0n−2=(2n−2−n+2)r0n=nr0n2r_0 (n-1) r_0^{n-1} - r_0^2 (n-2) r_0^{n-2} = (2n - 2 - n + 2) r_0^n = n r_0^n이므로 해입니다. □

예제 9.8. an=4an−1−4an−2a_n = 4a_{n-1} - 4a_{n-2}, a0=1a_0 = 1, a1=4a_1 = 4. 특성방정식 (r−2)2=0(r-2)^2 = 0이므로 an=(α+βn)2na_n = (\alpha + \beta n)2^n. a0=α=1a_0 = \alpha = 1, a1=2(1+β)=4a_1 = 2(1 + \beta) = 4에서 β=1\beta = 1. 그러므로 an=(n+1)2na_n = (n+1)2^n입니다.

9.4 비동차 점화식

an=c1an−1+⋯+f(n)a_n = c_1 a_{n-1} + \cdots + f(n)처럼 상수가 아닌 항 f(n)f(n)이 붙으면, 일반해는 (동차 부분의 일반해) + (특수해 하나)입니다. 특수해는 f(n)f(n)과 같은 꼴로 짐작합니다.

예제 9.9. Hn=2Hn−1+1H_n = 2H_{n-1} + 1. 동차해는 α2n\alpha 2^n, 상수 특수해 H=cH = c를 넣으면 c=2c+1c = 2c + 1에서 c=−1c = -1. 그러므로 Hn=α2n−1H_n = \alpha 2^n - 1이고 H1=1H_1 = 1에서 α=1\alpha = 1, 곧 Hn=2n−1H_n = 2^n - 1입니다.

9.5 분할정복 점화식

크기 nn인 문제를 크기 n/bn/b인 문제 aa개로 나누고 합치는 데 f(n)f(n)이 드는 알고리즘의 시간은 T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n)을 만족합니다.

예제 9.10 (이진 탐색). T(n)=T(n/2)+1T(n) = T(n/2) + 1, T(1)=1T(1) = 1이면 n=2kn = 2^k일 때 T(n)=k+1=log⁡2n+1T(n) = k + 1 = \log_2 n + 1입니다.

예제 9.11 (병합 정렬). T(n)=2T(n/2)+nT(n) = 2T(n/2) + n, T(1)=0T(1) = 0이면 n=2kn = 2^k일 때 T(n)=nlog⁡2nT(n) = n\log_2 n입니다. 양변을 nn으로 나누면 T(n)/n=T(n/2)/(n/2)+1T(n)/n = T(n/2)/(n/2) + 1이므로 T(n)/nT(n)/n이 한 번 나눌 때마다 1씩 늘어납니다.

쓰이는 곳. 알고리즘의 실행 시간(분할정복의 T(n)=2T(n/2)+nT(n) = 2T(n/2) + n), 동적 계획법, 인구·금융 모델, 디지털 필터가 점화식입니다. 선형 점화식을 특성근으로 푸는 방법은 선형대수의 고윳값과 같습니다.

9.6 이 장의 요약

  • 점화식은 마지막 단계(마지막 원소, 마지막 동작)로 경우를 나눠 세웁니다.
  • 선형 동차: 특성방정식의 근 rir_i로 an=∑αirina_n = \sum \alpha_i r_i^n. 중근이면 nrnn r^n이 더해집니다.
  • 비동차: 동차해 + 특수해.

문제

9.1 [계산] · 확인 문제

하노이의 탑에서 원판 10개를 옮기는 최소 횟수는?

정답
1023
풀이

H10=210−1=1023H_{10} = 2^{10} - 1 = 1023입니다.

9.2 [계산] · 확인 문제

길이 10인 비트열 가운데 1이 연달아 나오지 않는 것은 몇 개일까요?

정답
144
풀이

예제 9.3으로 a10=F12=144a_{10} = F_{12} = 144입니다.

9.3 [계산] · 확인 문제

an=5an−1−6an−2a_n = 5a_{n-1} - 6a_{n-2}, a0=1a_0 = 1, a1=4a_1 = 4를 풉니다. 닫힌 꼴 an=α⋅3n+β⋅2na_n = \alpha \cdot 3^n + \beta \cdot 2^n의 계수와 a5a_5를 씁니다.

값 답
α\alpha [?]
β\beta [?]
a5a_5 [?]
힌트 1

특성방정식은 r2−5r+6=0r^2 - 5r + 6 = 0입니다. a0=α+βa_0 = \alpha + \beta, a1=3α+2βa_1 = 3\alpha + 2\beta를 풉니다.

정답
2
-1
454
풀이

근은 3과 2입니다. α+β=1\alpha + \beta = 1, 3α+2β=43\alpha + 2\beta = 4에서 α=2\alpha = 2, β=−1\beta = -1. 그러므로 an=2⋅3n−2na_n = 2 \cdot 3^n - 2^n이고 a5=486−32=454a_5 = 486 - 32 = 454입니다.

9.4 [계산]

an=4an−1−4an−2a_n = 4a_{n-1} - 4a_{n-2}, a0=1a_0 = 1, a1=4a_1 = 4일 때 a6a_6은?

정답
448
풀이

예제 9.8의 an=(n+1)2na_n = (n+1)2^n으로 a6=7⋅64=448a_6 = 7 \cdot 64 = 448입니다.

9.5 [계산]

병합 정렬의 점화식 T(n)=2T(n/2)+nT(n) = 2T(n/2) + n, T(1)=0T(1) = 0에서 T(1024)T(1024)는?

정답
10240
풀이

T(n)=nlog⁡2nT(n) = n\log_2 n이므로 1024⋅10=102401024 \cdot 10 = 10240입니다.

9.6 [증명]

계단을 한 번에 1칸 또는 2칸씩 오를 때, nn칸 계단을 오르는 방법의 수 sns_n이 sn=sn−1+sn−2s_n = s_{n-1} + s_{n-2}를 만족함을 보이고 s1s_1, s2s_2를 구합니다.

풀이

마지막 걸음이 1칸이면 그 전에 n−1n-1칸을 오르는 방법(sn−1s_{n-1}가지), 2칸이면 n−2n-2칸을 오르는 방법(sn−2s_{n-2}가지)이 있고, 두 경우는 겹치지 않습니다. 합의 법칙으로 sn=sn−1+sn−2s_n = s_{n-1} + s_{n-2}입니다. s1=1s_1 = 1(1칸), s2=2s_2 = 2(1+1, 2)이므로 sn=Fn+1s_n = F_{n+1}입니다.