이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer)

  • 2020.09.22 16:10
  • 학부 수업/알고리즘
반응형

분할 정복법Devide and Conquer

분할 정복법은 대표적인 알고리즘 설계 기법의 일종으로, 큰 문제를 작은 문제 여러 개로 분할하여, 하나씩 해결하는 기법이다.

분할 정복의 예시로 합병 정렬과 퀵 정렬이 있다.

합병 정렬

분할 정복법을 이용한 정렬 알고리즘이다. 힙 정렬과 마찬가지로 비교에 기초한 정렬이며, $O(n\log n)$ 시간에 수행된다.

힙 정렬과는 달리 외부의 우선순위 큐를 이용하는 것이 아니라, 데이터에 순차적으로 접근하여 정렬하므로, 순차 데이터를 정렬하기에 적절하다.

def mergeSort(L):
    if len(L) > 1:
    	L1, L2 = L[:len(L)//2], L[len(L)//2:] # Devide
        mergeSort(L1) # Conquer
        mergeSort(L2)
        L = merge(L1, L2) # Solved
    return L
def merge(L1, L2):
    L = []
    while not L1.isEmpty() and not L2.isEmpty():
        if L1[1] <= L2[1]:
            L.append(L1.removeFirst())
        else
            L.append(L2.removeFirst())
    while not L1.isEmpty():
        L.append(L1.removeFirst())
    while not L2.isEmpty():
        L.append(L2.removeFirst())
    return L

L1, L2 리스트는 각각 $n/2$개의 원소를 가지며, 이중연결리스트로 구현된 두 리스트를 합병하는데 $O(n)$ 시간이 소요된다.

merge 함수가 $\log n$회 수행되므로, 시간 복잡도는 $O(n\log n$이다. 

반응형

'학부 수업 > 알고리즘' 카테고리의 다른 글

6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)  (0) 2020.09.29
5. 퀵 정렬(Quick Sort)  (0) 2020.09.29
3. 힙 정렬 (Heap Sort)  (0) 2020.09.15
2. 힙 (Heap)  (0) 2020.09.10
1. 우선순위 큐와 선택/삽입 정렬 (Priority Queue and Selection/Insertion Sort)  (0) 2020.09.03

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

    6. 비교 기반 정렬 알고리즘(Comparison-based Sorting)

    2020.09.29
  • 5. 퀵 정렬(Quick Sort)

    5. 퀵 정렬(Quick Sort)

    2020.09.29
  • 3. 힙 정렬 (Heap Sort)

    3. 힙 정렬 (Heap Sort)

    2020.09.15
  • 2. 힙 (Heap)

    2. 힙 (Heap)

    2020.09.10
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바