구체수학 02.합.02.합과 점화식
02.SUMS.02.SUMS AND RECURRENCES
이 문서는 (책) CONCRETE MATHEMATICS(구체수학) 2장.합 - 2.합과 점화식을 공부한 노트입니다.
Sn=n∑k=0ak위의 식은 다음과 같다.
Sn=a0+a1+a2+...+an한편으로는 다음 점화식과 같다고도 볼 수 있다.
S0=a0;Sn=Sn−1+an,forn>0예제
다음과 같은 식이 있다고 하자.
- an은 n을 몇 배 하고 어떤 상수를 더한 것이다.
그렇다면 다음과 같이 점화식을 꾸밀 수 있을 것이다.
R0=α;Rn=Rn−1+β+γ⋅n,forn>0python 으로 표현하자면 다음과 같을 것이다.
def R(n):
if n == 0:
return alpha
return R(n-1) + beta + gamma * n
# alpha, beta, gamma의 값은 아직 모른다
작은 값들부터 넣어보며 생각해보면 다음을 알 수 있다.
R0=α;R1=R0+β+γ=α+β+γR2=R1+β+γ⋅2=α+2β+3γ...이를 다음과 같이 일반해로 유도해내자.
Rn=A(n)α+B(n)β+C(n)γ그리고 다음과 같은 경우들을 생각해보자.
R_n = 1 인 경우
Rn=1 이라면
R0=A(0)α+B(0)β+C(0)γ=α=1R1=A(1)α+B(1)β+C(1)γ=R0+(β+γ⋅1)=α+β+γ=1R2=A(2)α+B(2)β+C(2)γ=R1+(β+γ⋅2)=(α+β+γ)+(β+γ⋅2)=α+2β+3γ=1α=1α+β+γ=0α+2β+3γ=0} 이므로∴α=1,β=0,γ=0Rn=A(n)α+B(n)β+C(n)=A(n)⋅1+B(n)⋅0+C(n)⋅0A(n)=1∵Rn=1- 잘 생각해 보면 이 점화식대로라면, Rn의 값이 무엇이건 간에 A(n)=1 이라는 것을 알 수 있다.
- α는 초항이므로, 합을 몇 번이고 반복해도 딱 한 번만 더하기 때문이다.
- B(n),C(n)은
0
과 곱하므로 지금 시점에서는 알아낼 방법이 없다.
R_n = n 인 경우
Rn=n 이라면
R0=A(0)α+B(0)β+C(0)γ=α=0R1=A(1)α+B(1)β+C(1)γ=α+β+γ=1R2=A(2)α+B(2)β+C(2)γ=α+2β+3γ=2∴α=0,β=1,γ=0Rn=A(n)α+B(n)β+C(n)γ=A(n)⋅0+B(n)⋅1+C(n)⋅0B(n)=n∵Rn=n- 잘 생각해 보면 이 점화식대로라면, Rn의 값이 무엇이건 간에 B(n)=n 라는 것을 알 수 있다.
- 더하는 항의 수 만큼 β가 증가하기 때문이다.
- A(n),C(n)은
0
과 곱하므로 지금 시점에서는 알아낼 방법이 없다.
R_n = n^2 인 경우
Rn=n2 이라면
R0=A(0)α+B(0)β+C(0)γ=α=0R1=A(1)α+B(1)β+C(1)γ=α+β+γ=1R2=A(2)α+B(2)β+C(2)γ=α+2β+3γ=4∴α=0,β=−1,γ=2B(n)=n∵Rn=α+n⋅β+C(n)γRn=n2=A(n)α+B(n)β+C(n)γ=−B(n)+2C(n)n2=−B(n)+2C(n)=−n+2C(n)n2+n=2C(n)C(n)=n2+n2- 잘 생각해 보면 이 점화식대로라면, Rn의 값이 무엇이건 간에 C(n)=n2+n2 라는 것을 알 수 있다.
- n(n+1)2⋅γ=1⋅γ+2⋅γ+...+n⋅γ 이기 때문이다.
- A(n)은
0
과 곱하므로 지금 시점에서는 알아낼 방법이 없다.
응용
다음과 같은 합이 있다고 하자.
n∑k=0(a+bk)python으로는 다음과 같을 것이다.
def sigma(n):
sum = 0
for k in range(0, n+1):
sum += a + b*k
return sum
위 합의 점화식은 다음과 같다.
S0=a;Sn=Sn−1+a+bn,forn>0python으로는 다음과 같을 것이다.
def S(n):
if n == 0:
return a
return S(n-1) + a + (b*n)
그렇다면 (2.7)과 같은 방식으로, 다음과 같이 점화식을 꾸밀 수 있다.
R0=α;Rn=Rn−1+β+γ⋅n,forn>0=Rn−1+a+b⋅n모양이 같으므로, 어렵지 않게 다음의 사실을 알아낼 수 있다.
a=α∵S0=R0a=βb=γ이를 A(n)α+B(n)β+C(n)γ 에 대입해보면 다음과 같이 될 것이다.
aA(n)+aB(n)+bC(n)=a⋅1+a⋅n+b⋅n2+n2=a(n+1)+b(n+1)n2Rn=a(n+1)+b(n+1)n2검증
검증해보고 싶다.
n∑k=0(a+bk)이를 풀어 쓰면 구조를 이해하기 쉬울 것 같다.
n∑k=0(a+7k)=(a+b⋅0)+(a+b⋅1)+(a+b⋅2)+...+(a+b⋅n)⏟n+1개0 ~ n 까지 모두 n + 1 개의 항이 있으므로=a⋅(n+1)+b⋅(0+1+2+...+n)=a⋅(n+1)+b⋅(n+1)(0+n)2=a⋅(n+1)+b⋅(n+1)n2일반해와 똑같은 모양이 나왔다.
예제: 하노이의 탑
하노이의 탑 점화식은 다음과 같다.
T0=0;Tn=2Tn−1+1,forn>0.def T(n):
if n == 0:
return 0
return 2*T(n-1) + 1
양변을 2n으로 나누면 (2.6)과 같은 모양이 된다.
T02n=0;Tn2n=2Tn−12n+12n,forn>0.Sn=Tn2n이라 하자.Sn=Tn2n=Sn−1+2−n,forn>0.def S(n):
if n == 0:
return 0
return S(n-1) + 2**(-n)
def T(n):
return S(n) * (2**n)
그렇다면 2−n씩 더해가는 것이므로 다음과 같이 표현할 수 있다.
Sn=n∑k=12−k=(12)1+(12)2+...+(12)ndef S(n):
sum = 0
for k in range(1, n+1):
sum += 2**(-k)
return sum
def T(n):
return S(n) * (2**n)
고등학교 때 배운 등비수열의 합 공식 Sn=S1⋅(rn−1)r−1 을 적용해 보면
Sn=n∑k=12−k=12⋅((12)n−1)12−1=−(12)n+1Tn2n=−(12)n+1Tn=−1+2n따라서 하노이의 탑에 n
개의 원판이 있을 때, 이를 옮기는 최소한의 횟수는 2n−1 임을 알 수 있다.
# 최적화 완료
def T(n):
return 2**n - 1
일반화
위의 풀이법을 사용하면 다음 형태의 점화식을 일반화할 수 있을 것 같다.
anTn=bnTn−1+cn양 변에 sn을 곱하자. (단, snbn=sn−1an−1.)
snanTn=snbnTn−1+sncn=sn−1an−1Tn−1+sncnSn=(Sn−1)+sncn(Sn=snanTn이라 하자)=(Sn−2+sn−1cn−1)+sncn(재귀)=(Sn−3+sn−2cn−2+sn−1cn−1)+sncn(재귀)...=S0+s1c1+s2c2+...+sncn=s0a0T0+n∑k=1skck=s1b1T0+n∑k=1skck 한편,Sn=snanTn이므로Tn=1snan⋅Sn=1snan(s1b1T0+n∑k=1skck)검증
위의 일반해를 하노이의 탑으로 검증해 보자.
하노이의 탑 점화식은 다음과 같았다.
T0=0;Tn=2Tn−1+1,forn>0.일반화에 사용한 형태의 점화식이 다음과 같았으므로,
anTn=bnTn−1+cn하노이의 탑에서 각 변수의 값은 다음과 같다.
- an=1
- bn=2
- cn=1
- T0=0
따라서 일반해는 다음과 같다.
snbn=sn−1an−1이므로sn⋅2=sn−1sn=2−nTn=1snan(s1b1T0+n∑k=1skck)=1snan(n∑k=1skck)=1sn(n∑k=1sk)=2nn∑k=12−k=2n12(1−(12)n)1−12=2n−2n⋅12n=2n−1예제: quick-sort 퀵 소트
퀵 소트의 점화식은 다음과 같다.
C0=0;C1=0;Cn=n+1+2nn−1∑k=0Ck,forn>1.Cn=n개 항목을 퀵 소트로 정렬할 때 비교 횟수의 평균점화식을 정리해 보자.
일단 양 변에 n
을 곱해서, 분모의 n
을 제거한다.
위의 식에서 아래 식을 빼보자.
n⋅Cn=n2+n+2∑n−1k=0Ck−(n−1)⋅Cn−1=(n−1)2+(n−1)+2∑n−2k=0CknCn−(n−1)Cn−1=2n+2Cn−1즉, 다음과 같다.
nCn−(n−1)Cn−1=2n+2Cn−1,forn>2.nCn=2n+2Cn−1+(n−1)Cn−1nCn=2n+(n+1)Cn−1그리고 점화식은 다음과 같이 정리된다.
C0=0;C1=0;C2=3;nCn=(n+1)Cn−1+2n,forn>2.식 (2.9)를 참고해 꾸며보자.
anTn=bnTn−1+cnnCn=(n+1)Cn−1+2nan=nbn=n+1c1=0∵C1=0+0c2=6∵2C2=3C1+c2cn=2nsnbn=sn−1an−1에서sn=sn−1⋅an−1bn=(sn−2⋅an−2bn−1)⋅an−1bn=a1a2...an−1b2b3...bn=1⋅2⋅...⋅n−13⋅4⋅...⋅(n−1)⋅n⋅(n+1)=1⋅2n(n+1)식 (2.10)을 적용하자.
Tn=1snan(s1b1T0+n∑k=1skck)Cn=11⋅2n(n+1)⋅n(s1b1C0+n∑k=1skck)=11⋅2n(n+1)⋅n(n∑k=1skck)=n+12n∑k=1skck=n+12n∑k=12k(k+1)⋅ck=(n+1)n∑k=11k(k+1)⋅ck=(n+1)(11⋅2⋅0+12⋅3⋅6+n∑k=31k(k+1)⋅ck)=(n+1)(0+1+n∑k=31k(k+1)⋅2k)=2(n+1)(12+n∑k=31k(k+1)⋅k)=2(n+1)(12+n∑k=31k+1)=2(n+1)(12+n∑k=11k+1−11+1−11+2)=2(n+1)(n∑k=11k+1−13)=2(n+1)n∑k=11k+1−2(n+1)3,forn>1.퀵 소트 점화식의 닫힌 형식
위에서 얻은 퀵 소트 점화식의 해는 다음과 같았다.
Cn=2(n+1)n∑k=11k+1−2(n+1)3,forn>1.해를 잘 살펴보면 조화수(Harmonic number)가 식의 중간에 들어가 있음을 알 수 있다.
조화수Hn=1+12+...+1n=n∑k=11k퀵 소트 점화식의 해를 조화수를 사용해 정리해 보자.
∑nk=11k+1 만 떼어서 작업하는 쪽이 편할 것 같다.
n∑k=11k+1=n+1∑k=21k=n+1∑k=11k−11=n∑k=11k−11+1n+1=n∑k=11k−nn+1=Hn−nn+1간단하게 된 합을 적용해 보자.
Cn=2(n+1)n∑k=11k+1−2(n+1)3,forn>1.=2(n+1)(Hn−nn+1)−2(n+1)3=2(n+1)Hn−2(n+1)nn+1−2(n+1)3=2(n+1)Hn−2n−2(n+1)3=2(n+1)Hn−2n−2n3−23=2(n+1)Hn−8n3−23,forn>1.