귀납법은 수학적 증명 기법 중 하나로, 범위가 무한하게 계속되는 성질을 증명할 때 사용합니다. 예를 들어, 모든 자연수에 대해 주어진 명제가 참임을 증명하고자 할 때 사용됩니다.
예제 문제:
자연수 ( n )에 대해 ( 1 + 2 + \cdots + n = \frac{n(n+1)}{2} )임을 귀납법으로 증명하시오.
증명 과정:
Merge Sort(합병 정렬) 는 분할 정복법의 대표적인 예입니다. 배열을 반으로 나눈 다음, 각 부분을 재귀적으로 정렬하고, 마지막에는 두 정렬된 리스트를 합쳐 전체를 정렬합니다.
def merge(left, right):
result = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
Even split에서는 문제를 가능한 한 동일한 크기의 서브 문제로 나눕니다. 예를 들어, Merge Sort는 배열을 계속해서 반으로 나누는 것이 even split에 해당합니다.
쉬트라쎈 행렬 곱은 복잡한 행렬 곱셈을 보다 효율적으로 수행하기 위해 개발된 분할 정복 알고리즘입니다. 이 알고리즘은 특히 큰 행렬을 곱할 때 일반적인 방법보다 적은 수의 곱셈 연산을 사용합니다.
쉬트라쎈 알고리즘은 (2 \times 2) 행렬 곱셈에 필요한 곱셈 연산을 8번에서 7번으로 줄입니다. 이 접근 방식은 재귀적으로 (n \times n) 행렬에 적용되어 연산량을 대폭 감소시킵니다.
(2 \times 2) 행렬 (A)와 (B)의 곱은 다음과 같은 7개의 곱셈을 사용하여 계산할 수 있습니다.
최종 행렬 (C)는 이 7개의 곱셈 결과를 이용해 구성됩니다.
마스터 이론은 재귀적 알고리즘의 시간 복잡도를 해석하는 데 유용한 도구입니다. 주로 분할 정복 알고리즘의 복잡도를 계산할 때 사용됩니다.
재귀식 (T(n) = aT\left(\frac{n}{b}\right) + f(n))이 주어졌을 때, (T(n))의 복잡도를 결정하기 위해 (f(n))과 (n^{\log_b{a}})의 성장률을 비교합니다.
분할 정복 알고리즘에서 데이터를 균일하지 않게 나누는 경우를 uneven split이라고 합니다. 대표적으로 이진 검색과 퀵소트가 이에 해당합니다.