분할 정복 (Devide & Conquer)

2023. 7. 22. 15:47·알고리즘/알고리즘 정리
728x90

분할 정복 (Devide & Conquer) 이란?

  • 한 번에 해결할 수 없는 문제를 작은 문제로 분할하여 해결하는 알고리즘.
  • 분할하여 푼 문제들을 다시 합병하여 문제의 답을 얻음
  • 주로 재귀함수로 구현하여 나눌수 없는 순간까지 나눔.
  • 분할 방법에 따라 시간 복잡도는 천차만별. 구현 방법에 따라 시간 복잡도가 다양하다.
  • 입력범위 N이 큰 편이다.
  • 재귀 함수를 구현할 때에는 무한루프에 빠지지 않도록 기저조건을 확실히 해야한다.

 


분할 정복의 순서

  1. Devide: 문제가 분할이 가능한 경우, 2개 이상의 문제로 나눈다.
  2. Conquer: 나누어진 문제에 대해서 해결을 한다. 만약 더 쪼개질 수 있다면 Devide과정을 수행한다.
  3. Combine: Conquer한 문제들을 통합하여 원래 문제의 답을 얻는다.

문제를 제대로 나누어야 Conquer하는 과정이 편해진다.

분할 정복 알고리즘은 재귀 알고리즘이 많이 사용되는데, 이 부분에서 분할 정복 알고리즘의 효율성을 깎아내릴 수 있다.


대표적인 사례 (Merge Sort)

합병 정렬(Merge Sort)은 분할 정복 알고리즘 문제의 대표적인 사례이다.

러닝타임은 O(nlogn).

 

합병 정렬은 주어진 수열을 쪼갤수 있는 최소한의 단위로 나누어 합치면서 수를 정렬하는 알고리즘이다.

Devide 과정에서는 쪼개는 일만 일어나고, Conquer 과정에서 비교를 통해 합쳐지는 것이 특징이다.

Merge Sort에 관한 자세한 내용

 

[알고리즘] 합병 정렬(merge sort)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io


연관 문제

1629: 곱셈 - Sliver 1

2630: 색종이 만들기 - Sliver 3

10830: 행렬 제곱 - Gold 4

1244: 스위치 켜고 끄기 - Sliver 4

저작자표시 (새창열림)

'알고리즘 > 알고리즘 정리' 카테고리의 다른 글

인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)  (1) 2023.08.11
그리디 알고리즘 (Greedy Algorithm)  (0) 2023.07.20
다이나믹 프로그래밍(Dynamic Programming)  (26) 2023.07.19
백트래킹(Back Tracking)  (0) 2023.07.17
'알고리즘/알고리즘 정리' 카테고리의 다른 글
  • 인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)
  • 그리디 알고리즘 (Greedy Algorithm)
  • 다이나믹 프로그래밍(Dynamic Programming)
  • 백트래킹(Back Tracking)
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

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

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    개발
    우테코
    1주 1권
    대학
    HTML5
    3기
    1주에 1권씩
    한양대학교
    Javascript
    TypeScript
    독서
    HTML
    백준
    알고리즘
    프로그래밍
    군대
    에리카
    프론트엔드
    Erica
    개발자
    tutorial
    타입스크립트
    ES6
    디자인
    canvas
    CSS
    react
    독후감
    프로젝트
    개념
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
분할 정복 (Devide & Conquer)
상단으로

티스토리툴바