정글에서 온 개발자
알고리즘의 설계 본문
루프 불변성
- 점진적인 방법에서 활용 가능하다.
- For 나 While 등 루프를 돌아도 변하지 않는 조건
- 알고리즘이 타당한 이유를 쉽게 이해할 수 있게 사용된다.
- 세가지 특징이 있다.
- 초기조건 : 첫번째 반복을 시작하기 전에 루프 불변성이 참이여아한다.
- 유지조건: 다음 반복이 시작되기 전까지도 계속 참이여야 한다.
- 종료조건: 루프가 종료될 때 그 불변성이 알고리즘의 타당성을 보이는데 도움이 될 유용한 특성을 가져야 한다.
- 귀납법과 비슷하다.
- 베이스가 참임을 보임
- 귀납적 과정을 증명함
- 정렬 알고리즘을 풀기로 했으면 루프 불변성이 마지막에 정렬된 수열을 나타내야 하는 것.
분할 정복
- 재귀적 구조를 가진 알고리즘 중 하나
- 세단계
- 분할: 현재 문제를 같은 문제를 다루는 다수의 부분 문제로 분할한다.
- 정복: 부분 문제를 재귀적으로 풀어서 정복한다. 크기가 충분히 작으면(베이스) 직접적인 방법으로 푼다.
- 결합: 부분 문제의 해를 결합하여 원래 문제의 해가 되도록 만든다.
- 예시(Merge sort)
- 분할: 정렬할 n개 원소의 배열을 n/2개씩 부분 수열 두개로 분할한다.
- 정복: 병합 정렬을 이용해 두 부분 배열을 재귀적으로 정렬한다.
- 결합: 정렬된 두 개의 부분 배열을 병합해 정렬된 배열 하나로 만든다.
- 의사코드
Merge-sort(A,p,r) # 정복 if p <r q = int(p+r)/2 Merge-sort(A,p,q) # 분할 1 Merge-sort(A,q+1,r) # 분할 2 Merge(A,p,q,r) # 결합
- 분할 정복의 시간 복잡도 분석도 분할, 정복, 결합 별로 복잡도를 분석하여 최대 차수에 의해 결정된다.
출처
Introduction to algorithm 3rd edition
'TIL' 카테고리의 다른 글
pintOS - Alarm Clock. Explicit Global Tick 고찰 (0) | 2023.12.04 |
---|---|
백준 1074 : Z (2) | 2023.11.18 |
정글 7일차 TIL (0) | 2023.10.18 |
정글 6일차 TIL(소수 구하기, 파이썬 할당문) (0) | 2023.10.16 |
정글 5일차 TIL (3) | 2023.10.15 |