250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 완전이진트리
- 점근적 표기법
- SpringSecurity
- 강화학습
- python
- 연결리스트 종류
- 엔티티 그래프
- spring
- MSA
- 알고리즘
- 백준장학금
- 힙트리
- 백준 장학금
- JPA
- 연결리스트
- heapq
- jpa n+1 문제
- 프로세스
- posix
- 이분탐색이란
- 운영체제
- 최대 힙
- 최소힙
- Kruskal
- 자료구조
- 멀티프로세서
- JVM
- 스케줄링
- AVL트리
- HTTP
Archives
- Today
- Total
KKanging
[알고리즘] 분할 정복이란 (divide conquer) 본문
분할정복(divide and conquer)
분할정복이란
- 두괄식으로 설명하자면 큰 문제를 작은 문제로 나눠서 작은 문제의 문제들을 해결하고
- 그 해결한 값으로 큰문제를 해결하는 해결 방식이다.
분할정복의 구성
- divide(분할) : 문제를 작은 크기의 문제들로 나눈다
- conquer(정복): 더 이상 나눌 수 없는 문제라면 해를 구한다.
- conbine : 작은 문제의 해를 합쳐서 original 문제의 해를 구한다.
- conquer은 더 나눌수 있는 문제라면 위 방식을 재귀적으로 반복한다.큰문제 (divide) → 작은 문제 작은 문제 (conquer)하지만 더 나눌수 있다면 divide
- ex)
분할 정복 예
- 거듭 제곱 예
- 3^8을 구한다고 가정
- 3을 한번씩 8번 곱할 수 있음
- 하지만 분할정복을 사용하면

- 위 같이 분할 되는 것을 볼 수있다.
- 3^8에서 3^4 3^4로 divide 하였다.
- 하지만 3^4는 더 나눌수 있으므로 divide한다
- 결국 3^1로 더 나눌수 없고 이제 서브 문제들을 conbine하면서 해를 구해나간다.
- 위 그림만 보면 더 비효율적일거란 생각이 들것이다.
- 하지만 실질적으로 우리가 계산하는 순간은 33 , 3^23^2,3^4*3^4이다
- 3을 8번 곱하는 연산보다 연산 횟수가 줄어드는 것을 볼 수 있다.
이처럼 큰문제를 작은문제로 나누고 작은 문제들의 조합으로 큰문제를 해결하는것을 분할 정복이라 한다.
'cs > 알고리즘' 카테고리의 다른 글
[알고리즘]Kruskal 알고리즘(java 구현) (0) | 2023.08.20 |
---|---|
[알고리즘] 이분 탐색이란(Binary Search) (0) | 2023.08.13 |
[알고리즘] 브루트 포스 (완전 탐색)알고리즘이란 (0) | 2023.08.13 |
[알고리즘] greedy 알고리즘 (탐욕 알고리즘) (0) | 2023.08.06 |
[알고리즘]DFS/BFS(그래프 탐색 알고리즘) 개념과 구현(JAVA) (2) | 2023.07.27 |