쉽게 배우는 알고리즘 7장. 상호 배타적 집합의 처리.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
2014년도 주요법령 개정사항 (월) ~ (금) 대한전문건설협회 강원도회.
이진 나무 구조 강윤섭 2008년 5월 23일.
4장 배열과 함수 한빛미디어(주).
컴퓨터와 인터넷.
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
제14장 동적 메모리.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
연결리스트(linked list).
제 9 장 구조체와 공용체.
Chapter 05. 연결 자료 구조.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
제 3 장 선형 리스트 3.1 선형 리스트 3.2 연결 리스트 3.3 다항식.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
Communication and Information Systems Lab. 황재철
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
CHAP 10: 그래프(part 2) 순천향대학교 하상호.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
Introduction To Data Structures Using C
P2P시스템에 대해서 (peer to peer)
JA A V W. 03.
자바 5.0 프로그래밍.
NDE는 NCS사의 새로운 병렬처리과정시스템입니다. LINUX PC-CLUSTER상에서 운영됩니다.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
8장. 상호 배타적 집합의 처리.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
FileMaker를 이용한 데이터 관리 옥현진(KICE).
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
합집합과 교집합이란 무엇인가? 01 합집합 두 집합 A, B에 대하여 A에 속하거나 B에 속하는 모든 원소로 이루어진 집합을 A와 B의 합집합이라고 하며, 기호 A∪B로 나타낸다. A∪B ={x | x∈A 또는 x∈B}
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
노년기 발달 장안대 행정법률과 세류반 정 오 손
소리 편집 안 재 형.
5장. 선택 알고리즘.
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
7주차: Functions and Arrays
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
3.여러 가지 색.
발표자 : 이지연 Programming Systems Lab.
구조체(struct)와 공용체(union)
수학 10-가 단계 Ⅰ수와 연산> 1.집합과 명제 > 1. 집합 > 3/9 집합 수업계획 수업활동.
Numerical Analysis Programming using NRs
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
제 4장 트리.
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
워밍업 실뭉치 전달게임.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
음파성명학 최종욱.
수학 2 학년 1 학기 문자와 식 > 미지수가 2개인 연립방정식 ( 1 / 1 ) 연립일차방정식의 해.
문제풀이방식-맹목적 탐색 Ai4.
13. 포인터와 배열! 함께 이해하기.
C++ Espresso 제15장 STL 알고리즘.
Countable & Uncountable
7 생성자 함수.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

쉽게 배우는 알고리즘 7장. 상호 배타적 집합의 처리

7장. 상호 배타적 집합의 처리 얼마 전 나는 학술회의 준비차 다윈을 읽었다. 읽으면서 그 동안 읽지 않기를 잘했다는 생각이 들었다. 다른 때 다윈을 읽었더라면 여전히 이해할 수 없었을 것이기 때문이다. ... 결국, 읽을 준비가 되었을 때 읽어야 한다는 것이다. -로저 생크

학습목표 연결 리스트를 이용한 상호배타적 집합의 처리 방법을 이해한다. 연결 리스트를 이용한 집합의 처리를 위한 연산들의 수행시간을 분석할 수 있도록 한다. 트리를 이용한 상호배타적 집합의 처리 방법을 이해한다. 트리를 이용한 집합의 처리를 위한 연산들의 수행시간을 기본적인 수준에서 분석할 수 있도록 한다.

Set의 처리 이 장에서는 disjoint set(배타적 집합) 만을 대상으로 한다 그러므로 교집합은 없다 지원할 연산 Make-Set(x): 원소 x로만 이루어진 집합을 만든다 Find-Set(x): 원소 x를 가지고 있는 집합을 알아낸다 Union(x, y): 원소 x를 가진 집합과 원소 y를 가진 집합의 합집합 Linked list를 이용하는 방법과 tree를 이용하는 방법이 있다

Linked List를 이용한 처리 같은 집합의 원소들은 하나의 linked list로 관리한다

하나의 원소로 이루어진 집합 a tail

Linked List로 된 두 집합 a b c tail tail d e f g h

합집합을 만드는 예 파란색은 변동이 생긴 간선들 (a) a b c tail tail d e f g h (b) tail d e

Weight을 고려한 Union Linked list로 된 두 집합을 합할 때 작은 집합을 큰 집합의 뒤에 붙인다 대표 원소를 가리키는 포인터 갱신 작업을 최소화하기 위한 것

수행시간 [정리 1] Linked list를 이용해 표현되는 배타적 집합들을 만들면서 Weight을 고려한 Union을 사용할 때, m번의 Make-Set, Union, Find-Set 중 n번이 Make-Set이라면 이들의 총 수행시간은 O(m + n log n)이다.  

Tree를 이용한 처리 같은 집합의 원소들은 하나의 tree로 관리한다 tree의 root를 집합의 대표 원소로 삼는다 child가 parent를 가리킨다 tree의 root를 집합의 대표 원소로 삼는다

Tree를 이용한 집합 표현의 예 c b h a e d f g

두 집합의 합집합 c e + b h d f g a c = b h e a d f g

하나의 원소로 이루어진 집합 a

Tree를 이용한 집합 처리 알고리즘 Make-Set(x) ▷ 노드 x를 유일한 원소로 하는 집합을 만든다. {         p[x] ← x ; } Union(x, y) ▷ 노드 x가 속한 집합과 노드 y가 속한 집합을 합친다         p[Find-Set(y)] ← Find-Set(x) ; Find-Set(x) ▷ 노드 x가 속한 집합을 알아낸다. 노드 x가 속한 트리의 루트 노드를 리턴한다.         if (x = p[x]) then return x ; else return Find-Set(p[x]) ;

연산의 효율을 높이는 방법 Rank를 이용한 Union Path compression 각 노드는 자신을 루트로 하는 subtree의 높이를 랭크Rank라는 이름으로 저장한다 두 집합을 합칠 때 rank가 낮은 집합을 rank가 높은 집합에 붙인다 Path compression Find-Set을 행하는 과정에서 만나는 모든 노드들이 직접 root를 가리키도록 포인터를 바꾸어 준다

랭크를 이용한 Union의 예 2 2 1 c c e + = 1 1 1 h e b h d f b a d f a

랭크를 이용한 Union에서 랭크가 증가하는 예 3 2 2 c c e + = 2 1 1 1 h e b h d f b 1 a d f a g g

Path Compression의 예 c c Find-Set(g) b h b h e g a e a d f d f g

Rank를 이용한 Union과 Make-Set Make-Set(x) {         p[x] ← x;         rank[x] ← 0; } Union(x, y)         x' ← Find-Set(x);         y' ← Find-Set(y);         if (rank[x'] > rank[y'])                 then p[y'] ← x' ;                 else {                         p[x'] ← y' ;                         if (rank[x'] = rank[y']) then rank[y'] ← rank[y'] + 1;                 }

Path Compression을 이용한 Find-Set Find-Set(x) {         if (p[x] ≠ x) then p[x] ← Find-Set(p[x]);         return p[x]; }

log*n = min {k : log log … log n ≤ 1} 수행시간 [정리 5] Tree를 이용해 표현되는 Exclusive set에서 랭크를 이용한 Union과 경로압축을 이용한 Find-Set을 동시에 사용하면, m번의 Make-Set, Union, Find-Set 중 n번이 Make-Set일 때 이들의 수행시간은 O(m log*n)이다.   log*n = min {k : log log … log n ≤ 1} k 사실상 linear time임

Thank you