TAOCP - Computational Method TAOCP 스터디 노트

Section 1. 1
알고리즘의 분석을 (특별히는 effective한지를 알아내는 분석?) 하는 방법 중에 하나로 computational method를 소개함.

Computational method는 Quadruple( Q, I, O, f) 을 정의하는 것으로 시작.
(O는 원래 임)
  1. Q는 부분집합 I와 부분집합 O를 포함하는 집함(I와 O에 해당하지 않는 영역도 있음).
  2. f는 정의역과 치역이 모두 Q인 함수
  3. q is in O 이면, f(q) = q
Computational sequence 는 x0, x1, 처럼 차례로 입력되는 집합인듯?
여기까지의 특징은 x in I 이면, f(x)는 in I 일 수도 있고 in O일 수도 있음.

Computational sequence, x를 사용해서 f(x)를 반복적으로 계산하면,
f(x) in O 가 나옴. 이 때를 f(x_k) 라고 하면 (의 
x_{k+1}=f(x_k) 이지만, 위 3번에 의해 x_{k+1} = x_k 가 되므로 더이상 계산할 필요 없이 종료.
따라서 (여기서는) 최소 k를 구하는게 목적.

/////////////////////////////////////////////////////////////////////////////////////////
이 방법은 Q가 무한이 될 경우 손으로 계산할 수 없을 만큼 방대해질 수 있다.
이 때문에 이 방법을 다르게 사용하기 위해 다음의 예를 제시한다.

A는 문자가 들어있는 집합.
A*는 A로 만들 수 있는 모든 문자열들의 집합(공집합도 포함 - 그 이유는 n의 조건이 n>=0 이기 때문임). 

(여기서 A*를 도입하는 이유는, 1, 2, 3, .... 처음의 computational method처럼의 엄청나게 많은 state를 하나씩 따라가는게 아니라(손으로 하기에 너무 많을 수 있음), state라는 것을 A*라는 substring으로 도입하는 것임. 따라서 많은 상태가 축약 될 수 있음.)

N이 양의 정수라 할 때, Q = (, j) 로 정의됨.
는 \in A*이고, 0 <= j <= N
이 때 j = 0 이면 I, j = N 이면 O 임. (이 때문에 Q가 I와 O에 속하지 않는 다른 부분도 있다는 것을 알게 됨)

일단 처음에 했던 3번 정의에 의해 j = N일 경우는 명확하게,
f((, N)) = (, N) 가 됨.

안에 없을 경우
f(, j)=(, a_j)
이 말은 뛰어넘을 상태가 없다는 것으로 추측 됨. a_j 는 j에 대한 다음 상태를 뜻하는 듯.

안에 있을 경우 (  )
f(, j)=(  , b_j)
이 말은 뛰어넘을 상태가 있다는 것으로 추측 됨. b_j 는 j에 대한 다음 상태를 뜻하는 듯.
하지만 가  변환 된 것에 주의.

여기서, a_j, b_j, 같은 것들을 모두 함수 f에 의해 정의 되어 있음.

결론 & 정리
Computation Method란 quadruple을 사용한 알고리즘 분석 방식임.
첫번째 부분은 1.1E를 어떻게 이 방식으로 분석하는지에 대한 소개이며, 두번째 부분은 이 방식이 비효율적일 경우 어떻게 대처하는지에 해결할 수 있는지에 대한 설명임.

PS. 스터디 노트에 담겨진 모든 글들은 모든 것을 완벽하게 확실히 하기 보다는 책에 그대로 적혀저 있는 것들, 
최대한 반복해서 본 후 나름대로 했던 추측을 포함합니다. 따라서 잘못된 정보가 있을 수 있으며, 지적은 얼마든지 환영입니다.

TAOCP - 알고리즘의 다섯 가지 특성 TAOCP 스터디 노트

pp4~
  1. Finiteness
  2. Definiteness
  3. Input
  4. Output
  5. Effectiveness

TAOCP - Algorithm 1.1E TAOCP 스터디 노트

Algorithm E (Euclid’s algorithm)
m과 n의 최대공약수(greatest common divisor)구하는 알고리즘.

m과 n의 GCD를 d 라고 하면 d = {m,n}으로 표기함.
m을 n로 나눴을 때 몫(q)과 나머지(r)는 다음처럼 표시할 수 있다.
m = qn+r
m - qn = r
이때 m과 qn은 d로 나눌 수 있고 결국은 r도 d로 나눌 수 있다.
이걸 바꿔 표시하면,
qn + r = m 이 되고 따라서
d = {n,r}이 됨.
결국 {m,n}과 {n,r}이 같고, 알고리즘에 의해 r은 점점 0에 가까워지기 때문에,
최대공약수 d를 구할 수 있음.

PS. 스터디 노트에 담겨진 모든 글들은 모든 것을 완벽하게 확실히 하기 보다는 책에 그대로 적혀저 있는 것들, 
최대한 반복해서 본 후 나름대로 했던 추측을 포함합니다. 따라서 잘못된 정보가 있을 수 있으며, 지적은 얼마든지 환영입니다.

The Art of Computer Programming TAOCP 스터디 노트

본격적으로 '다시' (-_-) 보기 시작.
이번엔 좀 적극적으로 스터디 노트를 적을 생각.
절대 다른 사람에게 도움 될만한 내용이 아닐 듯 한데...,
좀 공개적인 이글루스에서 작성한다는게 살짝 걸림.
텀블러를 쓸까 고민 중...
아무튼, 그건 나중에 옮긴다 하더라도, 일단은 열심히 작성!!

PS. 스터디 노트에 담겨진 모든 글들은 모든 것을 완벽하게 확실히 하기 보다는 책에 그대로 적혀저 있는 것들, 
최대한 반복해서 본 후 나름대로 했던 추측을 포함합니다. 따라서 잘못된 정보가 있을 수 있으며, 지적은 얼마든지 환영입니다.

Ambient Occlusion with GPU 비공개

둘다 여러가지 테크닉을 설명하는 글인데, AO 에 관한 논문에서 현재 GPU 를 사용하는 AO(혹은 Volumetric Obscurance)의 예로써 다음의 문서 둘을 소개했다. (둘다 논문은 아니고, Class 문서이다.)

Finding Next Gen – CryEngine 2
(Crytek - CryEngine 2)
SIGGRAPH 문서 : http://ati.amd.com/developer/SIGGRAPH07/Chapter8-Mittring-Finding_NextGen_CryEngine2.pdf

Effects & Techniques
(Bilzzard - Startcraft 2)
SIGGRAPH 문서 : http://ati.amd.com/developer/siggraph08/chapter05-filion-starcraftii.pdf



1