본문 바로가기
프로그래밍 언어/알고리즘

분할 정복 알고리즘

by Mostlove 2024. 4. 9.
728x90

1.선택 문제 

*선택 문제 해결을 위한 간단한 방법

ex)n개의 숫자들 중에서 k번쨰로 작은 숫자를 찾는 문제

1)최소 숫자를 k번 찾음 

-단, 최소 숫자를 찾은 뒤에는 입력에서 최소 숫자를 제거함 

-최악의 경우 시간 복잡도 O(kn)

2)숫자들을 정렬한 후, k번쨰 숫자를 찾음 

-최악의 경우 시간 복잡도 O(nlogn)

2.최근접 점의 쌍 찾기 문제 

*2차원 평면상의 n개의 점이 입력으로 주어질 때, 거리가 가장 가까운 한쌍의 점을 찾는 문제

분할정복 알고리즘 적용 

평면 판을 반으로 나누고 각판에 가까운 점을 구하고 

두점중 가장 가까운 점으 거리로 x 값으로 두고 

x값 사이의 점들의 거리를 구하고 

판과 판사이의 가장 가까운 점을 구한다 

시간 복잡도 => O(nlog²n)

3.분할 정복을 적용하는데 있어서 주의할 점 

1. 입력이 분할될 때마다 분한된 부분 문제의 입력

크기의 합이 분할 되기 전의 입력 크기보다 매우 커지는 경우

ex)피보나치 수 계산 알고리즘 (재귀 호출) 피보나치는 배열사용하면 된다 

 

'프로그래밍 언어 > 알고리즘' 카테고리의 다른 글

연결 구조  (0) 2024.06.07
그리디 알고리즘  (0) 2024.04.09
분할 정복 알고리즘의 분류  (0) 2024.04.03
알고리즘의 특성 및 최초의 알고리즘  (1) 2024.04.03
알고리즘의 첫걸음  (0) 2024.04.03