SlideShare a Scribd company logo
1 of 13
정렬 알고리즘의 성능 분석 [DevRookie]꽝매니아
차례 주의사항 선택 정렬 버블 정렬 삽입 정렬 병합 정렬 퀵 정렬 힙 정렬 기타 정렬 알고리즘 정리 결론 참고
주의사항 기본적인 알고리즘 설명은 앞에서 했으므로 패스. 점근적 분석은 성능을 예측하기 위한 하나의 수단 실제 처리상에서의 예외가 존재( PC 환경 등) 실제 대입, 가감 연산 등의 배제에 주의(상수) 비교 연산 위주의 성능 분석 수식 보다는 원리를 중심으로 이해
선택 정렬(selection sort) 수행시간: (n-1)+(n-2)+···+2+1 = O(n^2) Worst & Average Swap 횟수가 적을 가능성이 크다.(비교 연산 1번에 O(1) )
버블 정렬(bubble sort) 수행시간: (n-1)+(n-2)+···+2+1 = O(n2) Worst & Average Swap 횟수가 많을 가능성이 크다! (비교연산 1회에 최악의 경우 n-1 횟수 발생)
삽입 정렬(insertion sort) 수행시간: O(n2) Worst case: 1+2+···+(n-2)+(n-1) = O(n^2) Average case: ½ (1+2+···+(n-2)+(n-1)) = O(n^2) 여분의 공간을 필요로 하지만, 비교적 중간 정렬된 배열에서 좋은 성능을 발휘
병합 정렬(Merge SORT) mergeSort(A[ ], p, r) ▷ A[p ... r]을 정렬한다 { if (p < r) then { q ← (p+q)/2; ----------------------- ① ▷ p, q의 중간 지점 계산(내림) mergeSort(A, p, q); ---------------- ② ▷ 전반부 정렬 mergeSort(A, q+1, r); -------------- ③ ▷ 후반부 정렬 merge(A, p, q, r); ------------------ ④ ▷ 병합 	} } merge(A[ ], p, q, r) { 정렬되어 있는 두 배열 A[p ... q]와 A[q+1 ... r]을 합하여 정렬된 하나의 배열 A[p ... r]을 만든다. } 최악의 경우 :O(nlogn) 단조증가함수 : 큰 입력에 대해 수행시간보다 작은입력에 대해 수행되는 시간 이상 소요된다. (입력개수가 많을수록 수행시간이 오래 걸린다.)
퀵 정렬(Quick sort) quickSort(A[], p, r) ▷ A[p ... r]을 정렬한다 { if (p < r) then { q = partition(A, p, r); ▷ 분할 quickSort(A, p, q-1); ▷ 왼쪽 부분배열 정렬 quickSort(A, q+1, r); ▷ 오른쪽 부분배열 정렬 	} } partition(A[], p, r) { 배열 A[p ... r]의 원소들을 A[r]을 기준으로 양쪽으로 재배치하고 A[r]이 자리한 위치를 return 한다; } 평균적으로 Theta(nlogn), 하지만 최악의 경우(불균등분할시)(n(n-1))/2 = O(n^2) 도 가능함. 평균적으로 1.39nlogn 회 비교 수행. (최선의 경우에 비해 39%정도만 느림.) 퀵정렬이 병합 정렬보다 최악의 경우 더 느릴수 있지만, 최악의 경우가 될 확률 이 적다.
힙 정렬(Heap sort) • Heap – Complete binary tree로서 다음의 성질을 만족한다 • 각 노드의 값은 자신의 children의 값보다 크지 않다 • Heapsort – 주어진 배열을 힙으로 만든 다음, 차례로 하나씩 힙에서 제거함으로써 정렬한다 heapSort(A[ ], n) { buildHeap(A, n); ▷ 힙 만들기 for i ← n downto 2 { A[1] ↔ A[i]; ▷ 교환 heapify(A, 1, i-1); 	} } 최악의 경우에도 O(nlogn) 시간 소요!
쉬어 갑니다. 일반적으로 알려진 정렬의 성능분석 발생 경우에 따른 확률 근거 (도박처럼…) 위 경우는 일반적인 경우. 특수한 상황에 따라 더 빠른 알고리즘을 쓸 수도 있다.
기타 알고리즘 정리 기수 정렬 계수 정렬 버킷 정렬 퀵 소트 등 Divide&Conquer전략을 사용시 적절한 분할 알고리즘도 생각해 보자.
결론 및 정리 평균적인 경우와 발생 확률 정도를 예측 현재 가지고 있는 입력구조 분석 Divide&Conquer할수록 logn으로 줄일수 있다. 탐색에 대한 성능 분석도 마찬가지. n^2 , nlogn , n 차이지만 크기가 클수록 심화. Swap, 삽입, 삭제 등 숨겨진 비용 유추
참고 Introduction to Algorithms 2nd (MIT Press, 한빛) 뇌를 자극하는 알고리즘(한빛) 쉽게 배우는 알고리즘(한빛)

More Related Content

Similar to 정렬 알고리즘의 성능 분석

R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble SortBill Kim
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초Dongyi Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)Jeonghun Yoon
 

Similar to 정렬 알고리즘의 성능 분석 (7)

R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Quick sort
Quick sortQuick sort
Quick sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초퀵 정렬 알고리즘 기초
퀵 정렬 알고리즘 기초
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)
 

More from Young-jun Jeong

More from Young-jun Jeong (20)

Gpg2권]4 9 하늘상자
Gpg2권]4 9 하늘상자Gpg2권]4 9 하늘상자
Gpg2권]4 9 하늘상자
 
글꼴 렌더링 이야기
글꼴 렌더링 이야기글꼴 렌더링 이야기
글꼴 렌더링 이야기
 
점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
Kinect sdk사용하기
Kinect sdk사용하기Kinect sdk사용하기
Kinect sdk사용하기
 
Udk]static mesh & material
Udk]static mesh & materialUdk]static mesh & material
Udk]static mesh & material
 
Udk] sound (sound cue)
Udk] sound (sound cue)Udk] sound (sound cue)
Udk] sound (sound cue)
 
Udk] sound (sound cue)
Udk] sound (sound cue)Udk] sound (sound cue)
Udk] sound (sound cue)
 
삼각 함수
삼각 함수삼각 함수
삼각 함수
 
Gpg2 2 1_10_드롭인디버그메모리관리자
Gpg2 2 1_10_드롭인디버그메모리관리자Gpg2 2 1_10_드롭인디버그메모리관리자
Gpg2 2 1_10_드롭인디버그메모리관리자
 
Gpg2 dll로부터 c++_클래스_내보내기
Gpg2 dll로부터 c++_클래스_내보내기Gpg2 dll로부터 c++_클래스_내보내기
Gpg2 dll로부터 c++_클래스_내보내기
 
[추천] 색인기법 김성현
[추천] 색인기법 김성현[추천] 색인기법 김성현
[추천] 색인기법 김성현
 
문자열 검색 (1)
문자열 검색 (1)문자열 검색 (1)
문자열 검색 (1)
 
[Gpg1권]skinning
[Gpg1권]skinning[Gpg1권]skinning
[Gpg1권]skinning
 
2010 독후감
2010 독후감2010 독후감
2010 독후감
 
Kinect pc
Kinect   pcKinect   pc
Kinect pc
 
Kinect pc
Kinect   pcKinect   pc
Kinect pc
 
점근적 복잡도 분석
점근적 복잡도 분석점근적 복잡도 분석
점근적 복잡도 분석
 
알고리즘 기초사항
알고리즘 기초사항알고리즘 기초사항
알고리즘 기초사항
 
기초 알고리즘 스터디 소개
기초 알고리즘 스터디 소개기초 알고리즘 스터디 소개
기초 알고리즘 스터디 소개
 
Gpg1권] 4 5 3 d 충돌 검출
Gpg1권] 4 5 3 d 충돌 검출Gpg1권] 4 5 3 d 충돌 검출
Gpg1권] 4 5 3 d 충돌 검출
 

정렬 알고리즘의 성능 분석

  • 1. 정렬 알고리즘의 성능 분석 [DevRookie]꽝매니아
  • 2. 차례 주의사항 선택 정렬 버블 정렬 삽입 정렬 병합 정렬 퀵 정렬 힙 정렬 기타 정렬 알고리즘 정리 결론 참고
  • 3. 주의사항 기본적인 알고리즘 설명은 앞에서 했으므로 패스. 점근적 분석은 성능을 예측하기 위한 하나의 수단 실제 처리상에서의 예외가 존재( PC 환경 등) 실제 대입, 가감 연산 등의 배제에 주의(상수) 비교 연산 위주의 성능 분석 수식 보다는 원리를 중심으로 이해
  • 4. 선택 정렬(selection sort) 수행시간: (n-1)+(n-2)+···+2+1 = O(n^2) Worst & Average Swap 횟수가 적을 가능성이 크다.(비교 연산 1번에 O(1) )
  • 5. 버블 정렬(bubble sort) 수행시간: (n-1)+(n-2)+···+2+1 = O(n2) Worst & Average Swap 횟수가 많을 가능성이 크다! (비교연산 1회에 최악의 경우 n-1 횟수 발생)
  • 6. 삽입 정렬(insertion sort) 수행시간: O(n2) Worst case: 1+2+···+(n-2)+(n-1) = O(n^2) Average case: ½ (1+2+···+(n-2)+(n-1)) = O(n^2) 여분의 공간을 필요로 하지만, 비교적 중간 정렬된 배열에서 좋은 성능을 발휘
  • 7. 병합 정렬(Merge SORT) mergeSort(A[ ], p, r) ▷ A[p ... r]을 정렬한다 { if (p < r) then { q ← (p+q)/2; ----------------------- ① ▷ p, q의 중간 지점 계산(내림) mergeSort(A, p, q); ---------------- ② ▷ 전반부 정렬 mergeSort(A, q+1, r); -------------- ③ ▷ 후반부 정렬 merge(A, p, q, r); ------------------ ④ ▷ 병합 } } merge(A[ ], p, q, r) { 정렬되어 있는 두 배열 A[p ... q]와 A[q+1 ... r]을 합하여 정렬된 하나의 배열 A[p ... r]을 만든다. } 최악의 경우 :O(nlogn) 단조증가함수 : 큰 입력에 대해 수행시간보다 작은입력에 대해 수행되는 시간 이상 소요된다. (입력개수가 많을수록 수행시간이 오래 걸린다.)
  • 8. 퀵 정렬(Quick sort) quickSort(A[], p, r) ▷ A[p ... r]을 정렬한다 { if (p < r) then { q = partition(A, p, r); ▷ 분할 quickSort(A, p, q-1); ▷ 왼쪽 부분배열 정렬 quickSort(A, q+1, r); ▷ 오른쪽 부분배열 정렬 } } partition(A[], p, r) { 배열 A[p ... r]의 원소들을 A[r]을 기준으로 양쪽으로 재배치하고 A[r]이 자리한 위치를 return 한다; } 평균적으로 Theta(nlogn), 하지만 최악의 경우(불균등분할시)(n(n-1))/2 = O(n^2) 도 가능함. 평균적으로 1.39nlogn 회 비교 수행. (최선의 경우에 비해 39%정도만 느림.) 퀵정렬이 병합 정렬보다 최악의 경우 더 느릴수 있지만, 최악의 경우가 될 확률 이 적다.
  • 9. 힙 정렬(Heap sort) • Heap – Complete binary tree로서 다음의 성질을 만족한다 • 각 노드의 값은 자신의 children의 값보다 크지 않다 • Heapsort – 주어진 배열을 힙으로 만든 다음, 차례로 하나씩 힙에서 제거함으로써 정렬한다 heapSort(A[ ], n) { buildHeap(A, n); ▷ 힙 만들기 for i ← n downto 2 { A[1] ↔ A[i]; ▷ 교환 heapify(A, 1, i-1); } } 최악의 경우에도 O(nlogn) 시간 소요!
  • 10. 쉬어 갑니다. 일반적으로 알려진 정렬의 성능분석 발생 경우에 따른 확률 근거 (도박처럼…) 위 경우는 일반적인 경우. 특수한 상황에 따라 더 빠른 알고리즘을 쓸 수도 있다.
  • 11. 기타 알고리즘 정리 기수 정렬 계수 정렬 버킷 정렬 퀵 소트 등 Divide&Conquer전략을 사용시 적절한 분할 알고리즘도 생각해 보자.
  • 12. 결론 및 정리 평균적인 경우와 발생 확률 정도를 예측 현재 가지고 있는 입력구조 분석 Divide&Conquer할수록 logn으로 줄일수 있다. 탐색에 대한 성능 분석도 마찬가지. n^2 , nlogn , n 차이지만 크기가 클수록 심화. Swap, 삽입, 삭제 등 숨겨진 비용 유추
  • 13. 참고 Introduction to Algorithms 2nd (MIT Press, 한빛) 뇌를 자극하는 알고리즘(한빛) 쉽게 배우는 알고리즘(한빛)