Ch. 10 Algorithm Efficiency & Sorting

Slides:



Advertisements
Similar presentations
2016 년 봄학기 강원대학교 컴퓨터과학전공 문양세 이산수학 (Discrete Mathematics) 알고리즘과 복잡도 (Algorithms and Complexity)
Advertisements

알고리즘 (algorithms) The word algorithm is a corruption of early English algorisme, which came from Latin algorismus, which came from the name of the Persian.
1. 자료구조 개념 (1) 자료구조의 개요 1) 자료구조 ① 일련의 자료들을 조직하고 구조화하는 것 ② 자료의 표현과 그것과 관련된 연산 2) 자료구조에 따라 저장공간의 효율성과 프로그램의 실행시간이 달라짐 3) 어떠한 자료구조에서도 필요한 모든 연산들을 처리하는 것이.
Lecture 9 프로그램 실행의 비용 computation cost – 시간 time, 메모리 memory – tractable vs intractable problems.
Activation Records & Recursion
CHAP 1:자료구조와 알고리즘.
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
시스템 생명 주기(System Life Cycle)(1/2)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
10장 정렬.
Discrete Math II Howon Kim
Ch.04 Greedy Method (탐욕적 방법)
쉽게 배우는 알고리즘 3장. 정렬Sorting
시스템 생명 주기(System Life Cycle)(1/2)
On the computation of multidimensional Aggregates
CHAP 9 : 정렬.
자료구조 김현성.
Internet Computing KUT Youn-Hee Han
Genetic Algorithm 신희성.
Dynamic Programming.
Ch. 10 Algorithm Efficiency & Sorting
Internet Computing KUT Youn-Hee Han
1과목 데이터베이스 강사 이 민 욱.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Chapter 9 정렬(sorting) SANGJI University Kwangman KO
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C언어 응용 제 13 주 그래프2, 정렬.
재귀 혹은 귀납 Recursive or Inductive Definition 집합을 정의하는 방법
1 도시차원의 쇠퇴실태와 경향 Trends and Features of Urban Decline in Korea
5. 비제약 최적설계의 수치해법 (Numerical Methods for Unconstrained Optimum Design)
CHAP 1:자료구조와 알고리즘 C로 쉽게 풀어쓴 자료구조 생능출판사 Slide 1 (of 28)
발표자 : 홍익대학교 소프트웨어 공학 연구실 변은영 지도교수 : 김영철
정렬과 합병.
자료구조(SCSC) Data Structures
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
강의 소개, 자료구조의 개념, SW 개발과 자료구조
다음 주 과제 3장 읽어오기 숙제 해서 제출하기. 자료구조와 알고리즘, 순환 E304호,
Ch.02 Divide and Conquer (분할정복)
제1장 자료구조를 배우기 위한 준비.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
CHAP 9: 정렬 (part 2) 순천향대학교 컴퓨터학부 하 상 호.
Chapter 01 자료 구조와 알고리즘.
Chap. 1 Data Structure & Algorithms
쉽게 배우는 알고리즘 1장. 알고리즘 설계와 분석의 기초.
[CPA340] Algorithms and Practice Youn-Hee Han
Dynamic Programming.
프로그래밍 기초와 실습 Chapter 11 Recursion.
KMP ALPS 알고리즘 세미나 김태리.
제 1 장. 자료구조와 알고리즘.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
CHAP 1:자료구조와 알고리즘.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
3장. 탐색.
Internet Computing KUT Youn-Hee Han
7. Quicksort.

점화와 응용 (Recurrence and Its Applications)
알고리즘 강의 슬라이드 2 분할정복 제 2 장 분할정복 도경구역, 알고리즘, 사이텍미디어, 1999.
CHAPTER 05 프로세스 및 프로그램 설계.
이산수학(Discrete Mathematics)
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
알고리즘(Algorithm) – Divide and Conquer (분할정복)
알기쉽게 해설한 데이터구조 고 갑 승 한남대학교
제 7 장 정렬.
[CPA340] Algorithms and Practice Youn-Hee Han
알고리즘 강의 슬라이드 7 정렬문제 알고리즘 해석 강의 슬라이드 #7
제 4강 특허명세서.
알고리즘의 분석(analysis) 공간적 효율성(Space Efficiency)과 시간적 효율성(Time Efficiency)
Presentation transcript:

Ch. 10 Algorithm Efficiency & Sorting O( ): Big-Oh An algorithm is said to take O(f (n)) if its running time is upper-bounded by cf(n) e.g., O(n), O(n log n), O(n2), O(2n), … Formal definition O(f(n)) = { g(n) | ∃c > 0, n0 ≥ 0 s.t.∀n ≥ n0, cf(n) ≥ g(n) } g(n) ∈ O(f(n)이 맞지만 관행적으로 g(n) = O(f(n))이라고 쓴다. 직관적 의미 g(n) = O(f(n)) ⇒ g grows no faster than f

Ω(f(n)) Θ(f(n)) 적어도 f(n)의 비율로 증가하는 함수 O(f(n))과 대칭적 f(n)의 비율로 증가하는 함수

Time requirements as a function of the problem size n

A comparison of growth-rate functions

A comparison of growth-rate functions

Types of Running-Time Analysis Worst-case analysis Analysis for the worst-case input(s) Average-case analysis Analysis for all inputs More difficult to analyze Best-case analysis Analysis for the best-case input(s) Mostly not meaningful

Running Time for Search in an Array  

Sorting Algorithms  

Selection Sort An iteration Find the largest item Swap it to the rightmost place Exclude the rightmost item Repeat the above iteration until only one item remained

The largest item   Worst case Average case

selectionSort(theArray[ ], n) { for (last = n-1; last >=1; last--) { largest = indexOfLargest(theArray, last+1); Swap theArray[largest] & theArray[last]; } indexOfLargest(theArray, size) largest = 0; for (i = 1; i < size; ++i) { if (theArray[i] > theArray[largest]) largest = i; selectionSort(theArray[ ], n) { for (last = n-1; last >=1; last--) { largest = indexOfLargest(theArray, last+1); Swap theArray[largest] & theArray[last]; } indexOfLargest(theArray, size) largest = 0; for (i = 1; i < size; ++i) { if (theArray[i] > theArray[largest]) largest = i; Running time: 두 함수의 for loop의 iteration 수의 합이 좌우 indexOfLargest가 n-1 번 call 되고, call 될 때마다 indexOfLargest의 수행시간은 한 단계씩 가벼워진다. Running time: 두 함수의 for loop의 iteration 수의 합이 좌우 indexOfLargest가 n-1 번 call 되고, call 될 때마다 indexOfLargest의 수행시간은 한 단계씩 가벼워진다.  

Bubble Sort Worst case Average case  

Insertion Sort Worst case: 1+2+···+(n-2)+(n-1) Average case: ½ (1+2+···+(n-2)+(n-1))  

An insertion sort partitions the array into two regions

Mergesort Algorithm mergeSort(S) { // Input: sequence S with n elements // Output: sorted sequence S if (S.size( ) > 1) { Let S1, S2 be the 1st half and 2nd half of S, respectively; mergeSort(S1); mergeSort(S2); S  merge(S1, S2); } Algorithm merge(S1, S2) { sorting된 두 sequence S1, S2 를 합쳐 sorting 된 하나의 sequence S를 만든다

Animation (Mergesort) 7 2 9 4  3 8 6 1 7 2 | 9 4 7 | 2 7

Animation (Mergesort) 1 2 3 4 6 7 8 9 7 2 9 4  3 8 6 1 2 4 7 9 1 3 6 8 2 7 7 2 | 9 4 2 4 7 9 4 9 7 2 7 7 | 2 2 9 9 | 4 4 9 4 7 2 9 4  

A mergesort with an auxiliary temporary array

A mergesort of an array of six integers

A worst-case instance of the merge step in mergesort !4/04/2018(제10강)

Quicksort Algorithm quickSort(S) { // Input: sequence S with n elements // Output: sorted sequence S if (S.size( ) > 1) { x  pivot of S; (L, R)  partition(S, x); // L: left partition, R: right partition quickSort(L); quickSort(R); return L • x • R; // concatenation } Algorithm partition(S, x) { sequence S에서 x보다 작은 item은 partition L로, x보다 크거나 같은 item은 partition R로 분류.

Animation (Quicksort) 1 2 3 4 5 9 6 8 3 1 4 2 5 9 6 8 1 2 3 4 5 6 8 9 5 1 9 4 2 6 8 3 6 8 9 9 6 8 8 6 9 6 8 9 1 2 3 4 1 2 3 4 2 1 3 4 3 1 4 2 1 2 1 2 1 2 2 1 4 4 6 8 6 8 8 6 6 8 1 1   6 6

A partition with a pivot Partitioning 방법은 다양하다 이것은 그 중 한 가지 방법

Radix Sort radixSort(A[ ], d) { // Sort n d-digit integers in the array A[ ] for (j = d downto 1) { Do a stable sort on A[ ] by jth digit; } Stable sort 같은 값을 가진 item들은 sorting 후에도 원래의 순서가 유지되는 성질을 가진 sorting

0123 2154 0222 0004 0283 1560 1061 2150 1560 2150 1061 0222 0123 0283 2154 0004 0004 0222 0123 2150 2154 1560 1061 0283 0004 1061 0123 2150 2154 0222 0283 1560 0004 0123 0222 0283 1061 1560 2150 2154  

Comparison of Sorting Efficiency Worst Case Average Case Selection Sort n2 Bubble Sort Insertion Sort Mergesort nlogn Quicksort Radix Sort n Heapsort