Divide-and-Conquer Algorithm

2025. 4. 15. 12:04·📚 STUDY/📈 알고리즘

📌 Divide-and-Conquer Algorithm이란

문제를 여러 부분으로 나눈 뒤, 각 부분을 재귀적으로 해결한다.

그 후, 각 부분의 해답을 결합해 전체 문제의 해답을 도출한다.

  1. 분할(Divide): 문제를 더 작은 하위 문제로 나눈다.
  2. 정복(Conquer): 하위 문제를 재귀적으로 해결한다.
  3. 결합(Combine): 하위 문제의 해를 결합하여 전체 문제를 해결한다.

📌 Merge Sort

  • divide-and-conquer 방식 기반으로 동작
  • 문제를 나눠 해결하고, 통합하는 방식

 

시간 복잡도

  • 분할
    • 단순히 배열을 반으로 자르는 작업으로, 한 번 나눌 때 걸리는 시간은 상수 시간 O(1)
    • 전체 분할은 트리 구조로 log₂n 단계까지 진행됨.
    • ✅ O(log₂n)
  • 정복
    • 두 배열을 순회하면서 합치는 과정 O(n)
    • 병합은 트리 구조로 log₂n 단계 동안 일어남.
    • ✅ O(nlog₂n)

✅ 즉, 시간 복잡도는 O(nlog₂n)임.


📌 Quick Sort

  • divide-and-conquer 방식 기반으로 동작
    • 하지만, 결합 과정이 거의 필요 없는 게 특징임.
  • pivot을 설정하고, 이를 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 위치 조정
    • pivot 오른쪽 시작할 경우 ⇒ left와 change
    • pivot 왼쪽 시작할 경우 ⇒ right와 change
  1. pivot 선정. 비교를 위한 index 변수 할당 (left, right)
  2. left, right를 pivot과 비교하며 이동
  3. pivot의 위치 수정
  4. 분할된 리스트에 1~3 과정 적용 및 반복

 

각 단계별 시간

  • 분할 : 한 번에 pivot 기준으로 전체를 훑음 → O(n)
  • 깊이 : 최선이면 logn, 최악이면 n

 

시간 복잡도

  • 평균 : O(nlog₂n)
    • 분할 : O(log₂n)
    • 정렬 : O(nlog₂n)
  • 최악 : O(n²)

📌 Counting Inversions

그냥 하면 부르트포스

Divide-and-Conquer의 Merge sort를 활용하면, conquer 과정 중 순서가 바뀌는 개수를 합산한 것


📌 Closest Pair of Points

생략

 

저작자표시 (새창열림)

'📚 STUDY > 📈 알고리즘' 카테고리의 다른 글

Quick sort  (0) 2025.05.07
Merge sort  (0) 2025.05.07
Algorithm & Time Complexity  (0) 2025.04.15
[C++] ios::sync_with_stdio(0); cin.tie(0);  (1) 2025.03.05
[프언] C에서 C++로 갈아타기  (2) 2025.03.05
'📚 STUDY/📈 알고리즘' 카테고리의 다른 글
  • Quick sort
  • Merge sort
  • Algorithm & Time Complexity
  • [C++] ios::sync_with_stdio(0); cin.tie(0);
엄지잉
엄지잉
공부하는거 올림
  • 엄지잉
    엄지잉의 이것저것
    엄지잉
  • 전체
    오늘
    어제
    • 분류 전체보기 (94) N
      • 🏫 학교 (2)
        • 👩‍🏫 교직 (1)
        • 🏢 USG (1)
      • 🌱 탐구 (17)
        • 📷 SLAM (7)
        • 💡 연구 (8)
        • 🌐 BOJ (2)
      • 📚 STUDY (47) N
        • 🔥 C (32)
        • 📈 알고리즘 (9)
        • 👀 컴퓨터비전 (5) N
        • 🔆 UNITY (1)
      • 🏆 자격증 (23)
        • ⚡ 정처기 (17)
        • 🔠 TOEIC (6)
      • 🎈 활동 (4)
        • 🎁 CJ 리모트 인턴십 (2)
        • 😶 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Slam
    DB 구축
    opencv
    2022년
    정처기
    식별자
    실기
    SW 설계
    azurekinect
    C
    BOJ
    필기
    mocopi
    컴퓨터비전
    C언어
    2021년
    SW 개발
    정보처리기사
    c기초
    알고리즘
    프언 활용
    정보시스템 구축관리
    RC
    Unity
    모션캡처
    Azure Kinect
    Remote Internship
    토익
    Body Tracking
    C++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
엄지잉
Divide-and-Conquer Algorithm
상단으로

티스토리툴바