728x90
분할정복은 큰 문제를 작은 부분 문제로 나눈 후 각각을 해결하고, 이를 통해 전체 문제를 해결하는 알고리즘 기법.
이러한 방식은 컴퓨터 과학 분야에서 널리 사용되며, 대표적인 예로는 퀵정렬, 병합정렬, 이진 탐색 등이 있습니다. 이를 해결하기 위해서는 다음과 같은 세 가지 단계가 필요합니다.
1. 분할(Divide)
- 문제를 작은 문제 부분으로 나눕니다.
- 일반적으로 이 과정은 재귀적으로 수행됩니다.
2. 정복(Conquer)
- 작은 부분 문제를 각각 해결합니다.
- 부분 문제의 크기가 충분히 작지 않으면 재귀적으로 분할합니다.
3. 결합(Combine)
- 작은 부분 문제의 해답을 결합하여 원래 문제의 해답을 구합니다.
분할정복의 장점과 한계점
분할정복은 문제의 크기가 커지면 일반적으로 더 빠른 알고리즘으로 복잡도를 낮출 수 있는 장점이 있습니다. 그러나 각 부분 문제의 해결 방법이 독립적이지 않거나, 부분 문제의 수가 많아지면 오히려 복잡도가 증가할 수 있으므로, 적절한 상황에서 하는 것이 중요합니다.
간단한 분할정복 예시 문제와 해결
4779번: 칸토어 집합
칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고,
www.acmicpc.net
[BOJ / Node.js] 4779. 칸토어 집합
https://www.acmicpc.net/problem/4779 4779번: 칸토어 집합 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으
doricoding.tistory.com
'Algorithm > Algorithm' 카테고리의 다른 글
[Algorithm] 다익스트라 알고리즘 (0) | 2023.03.31 |
---|---|
[Algorithm] 슬라이딩 윈도우(Sliding Window) (0) | 2023.02.16 |
[Algorithm] 투 포인터(Two Pointer) (0) | 2023.02.15 |
[Algorithm] Big-O 관점에서의 배열과 객체 (0) | 2023.02.13 |
[Algorithm] Big-O-Notation (0) | 2023.02.12 |