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

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

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

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

  • 2020.09.29 15:59
  • 학부 수업/알고리즘
반응형

값을 비교하는 것에 기반한 정렬 알고리즘을 비교정렬이라 한다.

(버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 합병 정렬, 퀵 정렬 등)

비교 정렬의 하한 구하기

$n$개의 원소를 비교정렬로 정렬할 경우, 하한Lower Bound을 유도해보자.

$n$개의 유일한 키로부터 존재할 수 있는 순서쌍은 $n!$개이다.
오름차순 정렬을 한다고 가정하면, 이 가운데 단 하나의 순서쌍만이 올바른 정렬 결과이다.

어떤 방법으로 정렬을 하더라도, $n!$개의 경우가 존재하므로 결정 트리의 높이는 최소 $\log (n!)$이 된다.

그러므로, 어떤 비교정렬 알고리즘도 최소 $\log (n!) $ 시간을 소요한다.

$$\log (n!) \leq \log(\frac{n}{2})^{n/2} = \frac{n}{2} \log(\frac{n}{2}) $$ 이므로, 어떤 비교정렬 알고리즘이라도 $O(n\log n)$시간이 소요된다.

정렬의 안정성Stability

키-원소 항목들을 정렬할 때, 중요한 이슈는 동일키의 처리이다.

$L = [(k_0, e_0), \cdots (k_{n-1}, e_{n-1})]$을 정렬해야할 리스트라 하자.

두 개의 항목 $(k_i, e_i)$와 $(k_j, e_j)$에 대해, $k_i=k_j$이며 $i<j$였을 때, 정렬 후에도 $i<j$라면 그 알고리즘을 안정적stable이라고 한다.

비교정렬 알고리즘 비교

  시간 주요 전략 비고
선택 정렬 $O(n^2)$ (무순) 우선순위 큐 제자리
삽입 정렬 $O(n^2)$ (순서) 우선순위 큐 제자리
힙 정렬 $O(n\log n)$ (힙으로 구현된) 우선순위 큐 제자리
빠름 (대규모 입력에 적합)
합병 정렬 $O(n \log n)$ 분할 정복법 순차 데이터접근
빠름 (초대규모 입력에 적합)
퀵 정렬 $O(n \log n)$의 기대시간
(일반적인 경우 가장 빠름)
분할 정복법 제자리, 무작위 접근
가장 빠름 (대규모 입력에 적합)
반응형

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

8. 이진 탐색 트리 (Binary Search Tree)  (0) 2020.10.13
7. 사전 ADT (Dictionary ADT)  (0) 2020.10.08
5. 퀵 정렬(Quick Sort)  (0) 2020.09.29
4. 합병 정렬과 분할 정복법 (Merge Sort, Devide and Conquer)  (0) 2020.09.22
3. 힙 정렬 (Heap Sort)  (0) 2020.09.15

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 8. 이진 탐색 트리 (Binary Search Tree)

    8. 이진 탐색 트리 (Binary Search Tree)

    2020.10.13
  • 7. 사전 ADT (Dictionary ADT)

    7. 사전 ADT (Dictionary ADT)

    2020.10.08
  • 5. 퀵 정렬(Quick Sort)

    5. 퀵 정렬(Quick Sort)

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

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

    2020.09.22
다른 글 더 둘러보기

정보

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

컴퓨터와 수학, 몽상 조금

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

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (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.

티스토리툴바