최소 신장 트리(Minimal Spanning Tree)
신장 트리(Minimum Spanning Tree)란, 주어진 그래프에서, 서브 그래프지만 그래프의 모든 정점을 포함하고, 각 정점들은 모두 경로를 가지고 있어야 하지만 모든 경로를 포함하고 있지는 않은 그래프를 말한다.따라서, 신장 트리는 유일하지 않을 수도 있다. 최소 신장 트리란, 이들 경로에 가중치가 주어졌을 때, 경로의 가중치의 합이 가장 작은 트리를 말한다. (트리와 그래프의 차이는, 트리는 사이클이 존재할 수 없으며 그래프는 사이클이 존재할 수 있다는 점이다) 예를 들어, 전자 회로를 설계할 때, 요소 몇 개의 핀을 전선으로 연결해 전기적으로 동등하게 만들어야 하는 경우가 있다. n개의 핀을 서로 연결하기 위해, n - 1개의 전선을 사용할 수 있는데, 여기서 하나의 전선이 2개의 핀을 연결..
더보기
Dynamic Programming
다이나믹 프로그래밍(Dynamic Programming)이란 무엇인가? 이것은 다이나믹 플래닝(Dynamic Planning)이란 개념과 비슷하다고 할 수 있다. 간단히 이야기해서, 실행 시간의 정보를 기록한다는 의미이다. 즉, 중복되는 계산 결과를 기록해서 중복된 계산 결과가 필요한 경우, 최대한 재계산을 피하고자 하는 것이다. 예를 들어서, 피보나치 수열의 경우, n항의 값을 알려주는 함수 fib(n)을 작성한다고 하자. f(n) = f(n - 2) + f(n - 1)이다. f(n)을 알기 위해서는, 앞의 두 항의 값을 알고 있어야 한다. f(5), f(6)을 계산할 때, fib(n)을 재귀호출 방식으로 작성한다면, 같은 항에 대해 연속적으로 재계산을 하게 된다. 만약, f(n)을 어딘가에 저장해두고..
더보기
Radix Sort and Array Doubling
기수정렬에서 가장 중요한 것은, 이미 정렬된 순서를 흐트러트리지 않아야 하는, 안정성(stability)이다. 다시 말해서, 다음 자리를 정렬한다고 할 때, 이미 정렬된 순서대로 꺼내와서 배치해야 한다. 배열을 늘려가는 전략에는 여러가지가 있을 수 있다. 즉, 메모리 할당 전략이 어떤 것이 더 좋은가라는 것으로 바꿔 말할 수 있다. 문자 배열의 메모리를 할당 받는 전략에서는, 지수 형식으로 블럭을 할당하는게 더 효율적일 수 있지만, 이것은 메모리의 적절한 사용량을 생각한 것은 아니다. 다만, 단지 효율적인 시간에 대해서만 생각한 것이다.그렇다면, 한번에 대량의 메모리를 할당받는 것이 RAM이란 기계에서 최선의 할당전략이라고 할 수 있는데, 옳은 이야기인가? 앞서 이야기했던 배열 상황에서는, 줄어들지 않고..
더보기