반복 치환법
From CS Wiki
반복 치환법(Iteration Substitution Method), 또는 ROTE(Recursion-Iteration-Substitution Method)는 주어진 재귀식을 풀 때 사용하는 기법으로, 재귀식을 반복적으로 전개하여 문제의 해를 유도하는 방법이다. 주로 선형 재귀식(Linear Recurrence Relation)을 풀 때 사용되며, 주어진 함수나 수열의 형태를 점차적으로 전개하여 해를 추론한다.
1 개요[edit | edit source]
반복 치환법은 재귀식의 일반적인 형태에 대해 해를 구할 수 있는 기법으로, 재귀식을 풀기 위해 여러 번의 치환 과정을 통해 함수의 값을 추정한다. 재귀식이 주어졌을 때, 이를 여러 단계로 풀어가며 유도된 규칙을 통해 최종 해를 도출한다.
1.1 예시 재귀식[edit | edit source]
T(n) = 2T(n / 2) + O(n)
이와 같은 재귀식을 풀 때, 반복 치환법을 적용하여 T(n)을 단계별로 전개해 나갈 수 있다.
2 반복 치환법 적용 과정[edit | edit source]
- 재귀식 전개: 먼저 주어진 재귀식을 여러 번 치환하여 풀어나간다.
- 일반식 유도 : 전개한 결과를 통해 일반식을 찾는다.
- 해석 : 마지막으로 전개된 결과를 통해 최종적인 시간 복잡도나 수열의 값을 도출한다.
2.1 예시 1: T(n) = 2T(n / 2) + O(n)[edit | edit source]
- 첫 번째 단계에서 T(n)을 전개:
- T(n) = 2T(n / 2) + O(n)
- 두 번째 단계에서 T(n / 2)을 전개:
- T(n / 2) = 2T(n / 4) + O(n / 2)
- 세 번째 단계에서 T(n / 4)을 전개:
- T(n / 4) = 2T(n / 8) + O(n / 4)
- 이를 반복하면:
- T(n) = 2[2T(n / 4) + O(n / 2)] + O(n)
- T(n) = 4T(n / 4) + 2O(n / 2) + O(n)
- T(n) = 8T(n / 8) + 4O(n / 4) + 2O(n / 2) + O(n)
- ...
- 이 패턴을 계속 전개하면, 각 단계에서 크기가 절반씩 줄어드는 T(n)을 계속 계산할 수 있다.
- 마지막에는 T(1)로 수렴하며, 최종적으로 O(n log n) 형태의 해를 도출할 수 있다.
2.2 예시 2: T(n) = T(n - 1) + O(1)[edit | edit source]
- 첫 번째 단계에서 T(n)을 전개:
- T(n) = T(n - 1) + O(1)
- 두 번째 단계에서 T(n - 1)을 전개:
- T(n - 1) = T(n - 2) + O(1)
- 세 번째 단계에서 T(n - 2)을 전개:
- T(n - 2) = T(n - 3) + O(1)
- 이와 같이 계속 전개하면:
- T(n) = T(n - k) + kO(1)
- n까지 전개하면, 최종적으로 T(1)로 수렴하고 해는 O(n)이 된다.
3 장점과 한계[edit | edit source]
- 장점
- 반복 치환법은 재귀식을 명확하게 풀어낼 수 있는 간단하고 직관적인 방법이다.
- 수학적 해석을 통해 명확한 시간 복잡도를 도출할 수 있다.
- 한계
- 복잡한 재귀식에서는 전개가 매우 길어지고, 이를 해결하는 데 시간이 오래 걸릴 수 있다.
- 비선형 재귀식에는 적용하기 어려울 수 있다.
4 응용[edit | edit source]
반복 치환법은 주로 알고리즘의 시간 복잡도를 분석하거나, 동적 계획법(DP) 문제에서 최적화된 해를 찾기 위해 사용된다. 또한, 재귀적 문제를 해결할 때 자주 사용된다.
- 알고리즘 분석
- 예를 들어, 병합 정렬(Merge Sort) 및 퀵 정렬(Quick Sort) 등의 재귀적 알고리즘의 시간 복잡도 분석에 활용된다.
- 수학적 문제 해결
- 수열이나 재귀적 수학 문제에서 반복 치환법을 활용해 수열의 값을 찾거나 시간 복잡도를 계산한다.
5 같이 보기[edit | edit source]
6 참고 문헌[edit | edit source]
- Cormen, Thomas H., et al. "Introduction to Algorithms." MIT Press, 2009.
- Knuth, Donald. "The Art of Computer Programming." Addison-Wesley, 1998.