CHAP 9: 정렬 (part 2) 2015. 11. 16 순천향대학교 컴퓨터학부 하 상 호.

Slides:



Advertisements
Similar presentations
글에 나타난 시대적 사회적 배경을 파악할 수 있다. 배경 지식과 의미 해석의 관련성을 이해할 수 있다.
Advertisements

라오디게아 교회의 교훈 본문 계 3: ○라오디게아 교회의 사자에게 편지하라 아멘이시요 충성되고 참된 증인이시요 하나님의 창조의 근본이신 이가 이르시되 15. 내가 네 행위를 아노니 네가 차지도 아니하고 뜨겁지도 아니하도다 네가 차든지 뜨겁든지 하기를 원하노라.
열왕기하 1장을 읽고 묵상으로 예배를 준비합시다..
오늘의 학습 주제 Ⅱ. 근대 사회의 전개 4. 개항 이후의 경제와 사회 4-1. 열강의 경제 침탈 4-2. 경제적 구국 운동의 전개 4-3. 사회 구조와 의식의 변화 4-4. 생활 모습의 변화.
한국 상속세 및 증여세 과세제도 한국 국세공무원교육원 교 수 최 성 일.
제5장 새로운 거버넌스와 사회복지정책 사회복지정책이 어떤 행위자에 의해 형성되고 집행되는지, 어떤 과정에서 그러한 일들이 이루어지는지, 효과적인 정책을 위해서는 어떤 일들이 필요한지 등을 본 장에서 알아본다 개인들이 생활을 개선하는 가장 효과적인고 궁극적인 방법은 개별적.
학교보건 운영의 실제 한천초등학교 이 채 금.
Digital BibleⅢ 폰속의 성경 디지털 바이블 2008년 12월 ㈜씨엔커뮤니케이션 ㈜씨엔엠브이엔오.
하나님은 영이시니 예배하는 자가 신령과 진정으로 예배할지니라.
성경 암송 대회 한일교회 고등부 (일).
천주교 의정부교구 주엽동본당 사목협의회 사목활동 보고서
Homeplus 일 家 양 득 프로그램 소개 2015년 12월.
COMPUTER ARCHITECTIRE
[ 한옥 실측 ] 1. 약실측 2. 정밀실측 조선건축사사무소.
A제조용수/B환경관리/C시설관리 ㈜ 에이플러스 코리아
XML 개요 ㅎㅎ 기존 마크업 언어와 XML XML 필요성과 적용 분야 XML 관련 표준 XML 사용 환경 XML 개발 환경
제 출 문 현대 리모델링 주식회사 귀중 본 보고서를 압구정동 Project의 성공적 분양을 위한 마케팅 전략에 관한 제안서로
Schroder House -입면.
389,000 ₩ #노비타 비데 BD-N550D 가격표(가격은 매장운영에 맞게 수정하셔서 부착바랍니다.) ○ X ○ 순간
신종플루 [A(H1N1)] 건강하게 극복하기 A[H1N1] Attack.
제 1장. 멀티미디어 개론 1.1 멀티미디어란 무엇인가? 1.2 멀티미디어와 하이퍼미디어 1.3 월드 와이드 웹
중학교 기술ㆍ가정 1.
기능성 소재 ‘조습군’ 의자분야 응용 제안서 ㈜ 마루와벅스프리.
쇼핑몰 운영전략 abc 쇼핑몰을 발전시키기 위한 운영지침서.
안녕하십니까? 지금부터 저희 회사에 대해 설명 드리도록 하겠습니다..
유청소년 운동선수의 영양관리 이 명 천 (국 민 대 학 교).
공짜경제가 몰려온다. 시장이 흔들린다… (동아일보 9월20일 토) a 원은경
임방울의 출생과 성장 - 출생에서 전국명창대회 입상하기까지 - 임방울의 후원자 2 지 춘 상(전남대학교 명예교수)
(Perspective of GNEP in terms of international power politics)
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
변화 하는 세계 무역 환경 (p.144~147) 5303김민영.
10장 정렬.
쉽게 배우는 알고리즘 3장. 정렬Sorting
알고리즘 강의 슬라이드 2 분할정복 강의 슬라이드 #2
자료구조: CHAP 7 이진 탐색 트리 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 9 : 정렬.
자료구조 김현성.
Ch. 10 Algorithm Efficiency & Sorting
Ch. 10 Algorithm Efficiency & Sorting
Chapter 9 정렬(sorting) SANGJI University Kwangman KO
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C언어 응용 제 13 주 그래프2, 정렬.
CHAP 11: 해싱 순천향대학교 하상호.
제 7 장 정렬.
CHAP 9: 정렬 (part 2) 순천향대학교 컴퓨터학부 하 상 호.
정렬과 합병.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 44).
Tree & Heap SANGJI University Kwangman Ko
CHAP 11: 해싱 순천향대학교 하상호.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Ch.02 Divide and Conquer (분할정복)
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
[CPA340] Algorithms and Practice Youn-Hee Han
자료구조: CHAP 4 리스트 (2) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 기초와 실습 Chapter 11 Recursion.
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
CHAP 12 : 탐색.
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
CHAP 9:정렬 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
정렬(Sorting)과 해싱(Hashing)
알고리즘 강의 슬라이드 2 분할정복 제 2 장 분할정복 도경구역, 알고리즘, 사이텍미디어, 1999.
최대 공약수 구하기 (1) 프로그램 예제2 : 최대 공약수 구하기 문제 해결 방법 구상 (아는 지식 정리) GCD1 알고리즘
탐색 선형 탐색, 이진 탐색, 이진 탐색 트리.
알고리즘(Algorithm) – Divide and Conquer (분할정복)
전류는 자계에서 힘을 받는다 기계공학교육 박지훈 황인석 한만혁 이덕균.
CONTENTS Part1. 조사 개요 / 3 1. 조사 목적 2. 조사 설계 3. 주요 조사 내용 4. 응답자 특성 5. 지수산출방법 Part2. 결과요약 및 제언 / 9 Part3. 조사결과 분석(만족도) / 종합 및 차원 만족도 2. 항목 만족도 3.
Report #4 (1) (due 4/4) 문제 #1 3개의 막대 A, B, C와 원판 n개를 전달받아 Hanoi 탑 문제를 해결하는데 필요한 원판의 이동 회수를 구하여 반환하는 hanoi_tower(n, A, B, C)를 작성하라. 여기서 원판 n은 막대 A에 쌓여 있고.
제 7 장 정렬.
Report #3- 문제 1 Set(집합) 추상 데이터 타입을 정의하고, 다음과 같은 연산자들을 포함시켜라. 여기서 S, S1, S2는 집합을 나타내고, i는 집합 원소를 나타낸다. 연산 의미 create() Return {} insert(S, i) If i є S then.
Presentation transcript:

CHAP 9: 정렬 (part 2) 2015. 11. 16 순천향대학교 컴퓨터학부 하 상 호

Remind: 다음 정렬 방법을 비교하시오. 알고리즘의 복잡도는? 더 나은 정렬 알고리즘은? 선택정렬 삽입정렬 버블정렬 쉘 정렬 더 나은 정렬 알고리즘은?

합병정렬 개념 합병정렬은 분할과 정복기법에 기반 리스트를 두 개의 균등한 크기로 분할하고, 분할된 각 부분 리스트를 정렬하고, 2개의 정렬된 부분 리스트를 합병하는 방법

분할정복법 분할정복법(divide and conquer)은 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 분리된 문제가 아직도 해결하기 어렵다면, 즉 충분히 작지 않다면 분할정복방법을 다시 적용한다. 이는 재귀호출을 이용하여 구현된다. 1. 분할(Divide): 배열을 같은 크기의 2개의 부분 배열로 분할한다. 2. 정복(Conquer): 부분배열을 정렬한다. 부분배열의 크기가 충분히 작지 않으면 재귀호출을 이용하여 다시 분할정복기법을 적용한다. 3. 결합(Combine): 정렬된 부분배열을 하나의 배열에 통합한다. 입력파일: 27 10 12 20 25 13 15 22 1.분할(Divide): 배열을 27 10 12 20 과 25 13 15 22의 2개의 부분배열로 분리 2.정복(Conquer): 부분배열을 정렬하여 10 12 20 27 과 13 15 22 25를 얻는다. 3.결합(Combine): 부분배열을 통합하여 10 12 13 15 20 22 25 27을 얻는다.

합병정렬의 전체과정

합병정렬 알고리즘 merge_sort(list: array of integers, left, right: integer) { if (left < right) then mid = (left+right)/2; merge_sort(list, left, mid); merge_sort(list, mid+1, right); merge(list, left, mid, right); endif } 합병정렬은 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의 정렬된 부분 리스트를 합하여 전체가 정렬된 리스트를 얻고자 하는 것 merge() 알고리즘은?

merge(): 합병과정 임시 배열 sorted 사용 2개 배열로부터 원소를 작은 순서대로 sorted에 이동 어느 한 개의 리스트가 소진될 때까지 위 단계를 반복 다른 리스트의 나머지 원소를 sorted에 이동 배열 sorted

합병 알고리즘 merge(a: array of integers low, mid, high: integer) { // 2개의 인접한 배열 a[left..mid]와 a[mid+1..right]를 합병 b1, b2, e1, e2, idx: integer sorted: array of integers b1←low; e1←mid; // 첫번째 배열 인덱스: (하한,상한) b2←mid+1; e2←high; // 두번째 배열 인덱스:(하한,상한) indx←low; //sorted 배열 인덱스 // 2개 배열을 sorted 배열로 합병: // 2개 배열 원소를 비교하여 오름차순으로 sorte로 이동 // 어느 한 배열이 소진되면, 다른 배열 원소를 sorte로 이동 // sorted 배열을 a 배열로 다시 이동 }

합병정렬의 분석 비교횟수 이동횟수 평가 최악, 최선의 경우는? 이동 회수 고려 merge_sort(list: array of integers, left, right: integer) { if (left < right) then mid = (left+right)/2; merge_sort(list, left, mid); merge_sort(list, mid+1, right); merge(list, left, mid, right); endif } 비교횟수 이동횟수 평가 최악, 최선의 경우는? 이동 회수 고려

평가: 합병 정렬 최악, 평균, 최상의 경우 차이가 있는가? 단점 배열이 아닌 연결리스트로 표현하면? 임시 배열 사용 이동회수가 많다 항목들이 많을 경우에 적합 배열이 아닌 연결리스트로 표현하면? 이동은 링크만 변경하는 것으로 대체 가능

퀵 정렬(quick sort) 평균적으로 가장 빠른 정렬 방법 개념 분할과 정복의 기법에 기반 합병 정렬과는 달리 비균등 분할 사용 한 항목을 피봇(pivot)으로 사용 (당분간, 리스트의 첫번째 항목으로 고려) 피봇보다 작은 항목은 왼쪽으로, 큰 항목은 오른쪽으로 이동 피봇 기준으로 2개의 리스트 분할 위의 각 부분 리스트에 대해서 위의 과정 반복 pivot low high

퀵정렬 개념 피봇(pivot): 가장 왼쪽 숫자라고 가정 두 개의 변수 low와 high를 사용한다. 정지된 위치의 숫자를 교환 low와 high가 교차하면 종료

퀵정렬 전체과정 밑줄친 숫자: 피봇

퀵정렬 알고리즘 void quick_sort(int list[], int left, int right) { if(left<right) then int q=partition(list, left, right); // 배열을 피봇 기준으로 2개로 분할하고, 피봇 위치 반환 quick_sort(list, left, q-1); quick_sort(list, q+1, right); end if }

partition 함수 피봇(pivot): 가장 왼쪽 숫자라고 가정 두개의 변수 low와 high를 사용한다. 정지된 위치의 숫자를 교환 low와 high가 교차하면 종료

Quiz 다음 배열을 퀵 정렬하라. 4 7 1 8 6 2 5 3

partition 함수 구현 int partition(int list[], int left, int right) { int pivot, low, high; low = left; high = right+1; // low, high 위치 설정 // 비교 전에 low는 증가, high는 감소 pivot = list[left]; // 피봇은 첫번째 원소로 설정 return high; // 피봇 위치 반환 } do { // 피봇보다 작은 항목은 왼쪽으로, 큰 항목은 오른쪽으로 // 피봇보다 큰 항목을 찾는다. // 피봇보다 작은 항목을 찾는다 } while (low <high); // 피봇을 중앙에 위치

퀵정렬의 분석 비교 회수 이동 회수 최상, 최악의 경우는?

퀵 정렬 평가 동일 복잡도를 가진 정렬 방법 가운데서 가장 빠르다. 그 이유는? 퀵 정렬에서 다음 경우를 고려하면? 불필요한 데이터 이동을 줄이고 먼 거리의 데이터 교환 피봇은 추후 연산에서 고려 제외 퀵 정렬에서 다음 경우를 고려하면? 가장 오른쪽 항목을 피봇으로 선택 첫번째, 중간번째, 마지막번째 값중에서 중간 값을 갖는 항목을 피봇으로 선택

퀵정렬의 분석 거의 균등한 리스트로 분할되는 경우 패스 수: log2n 각 패스안에서의 비교횟수: n 최상의 경우: 거의 균등한 리스트로 분할되는 경우 패스 수: log2n 2->1 4->2 8->3 … n->log2n 각 패스안에서의 비교횟수: n 총비교횟수: n log2n 총이동횟수: 비교횟수에 비하여 무시가능

퀵정렬의 분석(cont.) 최악의 경우: 불균등한 리스트로 분할되는 경우 패스 수: n 각 패스안에서의 비교횟수: n 총이동횟수: 비교횟수에 비하여 무시가능 (예) 정렬된 리스트가 주어졌을 경우 (1 2  3  4  5  6  7  8  9) 1 (2  3  4  5  6  7  8  9) 1  2 (3  4  5  6  7  8  9) 1  2  3 (4  5  6  7  8  9) 1  2  3  4 (5  6  7  8  9)                     ... 1  2  3  4  5  6  7  8  9

기수정렬(Radix Sort) 개념 예제: 한 자리 수로 이루어진 수: (8 2 7 3 5) 비교 연산 없이 데이터 정렬 기수와 일치하는 다단계 정렬 예제: 한 자리 수로 이루어진 수: (8 2 7 3 5) 10개의 버킷 필요 데이터를 각 자리수 값에 따라 버킷에 넣고 위쪽 버킷부터 순차적으로 버킷 안의 숫자를 읽어들인다. 그 결과는 데이터 정렬

기수정렬 만약 2자리수이면? (28, 93, 39, 81, 62, 72, 38, 26) 방법? 몇 개의 버킷이 필요한가?

기수정렬 만약 2자리수이면? (28, 93, 39, 81, 62, 72, 38, 26) 낮은 자리수로 먼저 분류한다음, 순서대로 읽어서 다시 높은 자리수로 분류하면 된다.

기수정렬 다음에서 필요한 버킷의 개수는 데이터 키가 2진법으로 표현되면? 키가 알파벳 문자이면? 키가 32비트 정수이고, 8비트씩 나누어서 기수정렬 적용하면?

기수정렬 알고리즘 RadixSort(list : array of integers, n: integer) { for d←LSD의 위치 to MSD의 위치 do    d번째 자릿수에 따라 0번부터 9번 버킷에 집어놓는다.    버킷에서 숫자들을 순차적으로 읽어서 하나의 리스트로 합친다.    d++; end for } 버킷은 어떻게 구현하는가?

기수정렬 알고리즘 RadixSort(list : array of integers, n: integer) { QueueType q[BUCKETS]; for (d=0; d<DIGITS; d++) { // 데이터를 버킷에 넣는다 // 데이터를 버킷에서 꺼내어 배열에 저장한다 i=0; for (b=0; b<BUCKETS; b++) do while (!isEmpty(q[b]) do a[i++] = dequeue(q[b]); end while end for }

기수 정렬 알고리즘 분석 복잡도 정렬 데이터의 타입이 정수형으로 제한 데이터의 정수가 d개의 자리수를 가질 경우 실수의 경우는?

정렬 알고리즘의 비교

문제 다음 정렬 방법을 비교하라. 각 정렬방법에 대해서 데이터 항목 수에 따른 실행시간 추이도를 그래프로 그려라 정렬 방법: 삽입, 선택, 버블, 쉘, 퀵, 합병 정렬 대상 데이터 항목: 주어진 개수의 난수(범위: 1~10,000) 발생 오름차순 정렬 분석 기준 (프로그램 실행 5회의 평균치로 측정할 것) 실행 시간 각 정렬방법에 대해서 데이터 항목 수에 따른 실행시간 추이도를 그래프로 그려라 데이터 항목 수: 2만개, 4만개, 6만개, 8만개, 10만개