[알고리즘] 2. 루프 불변성
루프 불변성의 조건
루프 불변성
루프 불변성이란?
반복문이 실행되는 동안 항상 참이 되는 조건이나 성질
루프 불변성의 특징
- 초기 조건 (Initialization): 반복이 시작될 때 불변성이 참이어야 함
- 유지 조건 (Maintenance): 루프의 각 단계에서 불변성이 참이어야 함
- 종료 조건 (Termination): 루프가 종료될 때 우리가 원하는 솔루션을 얻을 수 있어야 함
예시
삽입정렬
INSERTION-SORT(A, n)
for i = 2 to n
key = A[i]
j = i - 1
while j > 0 and A[j] > key
A[j + 1] = A[j]
j = j - 1
A[j + 1] = key
루프 불변성 : A[1 : i - 1]은 정렬된 상태이다.
- 초기조건
- i = 2 부터 시작
- A[1 : 2] 의 요소는 한 개 뿐이므로, 이미 정렬된 상태
- 유지조건
- A[i]를 적절한 위치에 삽입
- 루프가 실행되면 A[1 : i] 까지 정렬된 상태를 유지
- 이후 A[1 : i + 1] 까지 정렬된 상태를 유지
- 종료조건
- 루프가 n까지 실행될 때 n은 리스트 A의 길이.
- 이때, A[1 : n] 까지 정렬된 상태가 됨
삽입 정렬의 루프 불변성이 성립하며, 알고리즘이 정확함
Sum Array 함수
SUM-ARRAY(A, n)
sum = 0
for i = 1 to n
sum = sum + A[i]
return sum
루프 불변성 : Sum은 배열 i까지의 합이어야 한다.
- 초기조건
- 처음 시작시 sum은 0으로 초기화 됨.
- 0개의 요소의 합은 0이다.
- 유지조건
- 루프마다 A[i]를 sum에 더해주면서 sum은 i까지의 합
- 종료조건
- i = n + 1 이 되면 루프 종료
- 이때, sum은 A의 n개의 모든 합을 나타냄
SUM ARRAY 함수의 루프 불변성이 성립하며, 알고리즘이 정확함