SlideShare a Scribd company logo
1 of 53
Download to read offline
서울시립대 알고리즘 소모임
우선순위 큐
여름방학 3주차
강의자 소개
2021 AL林 정기 세미나 2
이름 최문기
소속 서울시립대 컴퓨터과학부(16학번)
핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder)
ICPC 팀 (팀명 미정)
- 김정현, 오규민, 최문기
2021 AL林 정기 세미나 3
복습
트리(tree)
2021 AL林 정기 세미나 4
[그래프 이론]
- 회로가 없는 연결 무향 그래프
[자료 구조]
- 노드 사이의 계층 관계를 표현하는 자료구조
- 부모(상위 노드) – 자식(하위 노드) 관계를 가진다.
- 자식노드는 하나의 부모노드를 가진다.
트리: 예
2021 AL林 정기 세미나 5
트리: 용어
2021 AL林 정기 세미나 6
트리: 성질
2021 AL林 정기 세미나 7
1. 노드가 n개일 때 간선이 n-1개이다.
2. 서로 다른 임의의 두 노드에 대한 경로는 유일하다.
이진 트리(binary tree)
2021 AL林 정기 세미나 8
임의의 노드의 자식 노드 수가 2 이하인 트리
이진 트리: 예
2021 AL林 정기 세미나 9
full binary tree complete binary tree
= heap structure
perfect binary tree
트리의 구현
2021 AL林 정기 세미나 10
하지만 인접 행렬로 구현하게 된다면 희소 행렬이 되므로 비효율적이고
일반적으로 인접 리스트로 저장합니다.
트리의 구현
2021 AL林 정기 세미나 11
이렇게 객체를 만들어서 자식 노드의 주소를 저장할 수도 있습니다.
class Node:
def __init__(self, element):
self.element = element
self.left_child = None
self.right_child = None
class Node:
def __init__(self, element):
self.element = element
self.children = []
트리의 구현: 그 외..
2021 AL林 정기 세미나 12
완전 이진트리는 배열로 구현하는 것이 효율적입니다.
이는 [여름방학 3주차 우선순위 큐]에서 알아보겠습니다.
트리의 순회
2021 AL林 정기 세미나 13
2021 AL林 정기 세미나 14
힙(heap)
힙
2021 AL林 정기 세미나 15
원소를 추가 : O(logN)
최댓값을 확인 : O(1)
최댓값을 삭제 : O(logN)
를 수행하는 자료구조, 우선순위 큐(Priority Queue)를 구현하는데 사용한다.
2021 AL林 정기 세미나 16
힙의 정의와 구현
힙의 정의
2021 AL林 정기 세미나 17
(Definition : heap structure)
다음 성질을 만족하는 이진 트리(binary tree)이다.
1. 마지막 레벨을 제외한 모든 레벨이 완전하다.
2. 마지막 레벨의 모든 노드는 가능한 가장 왼쪽에 있는 이진 트리
이진 트리: 예
2021 AL林 정기 세미나 18
full binary tree complete tree
= heap structure
perfect binary tree
힙의 구현
2021 AL林 정기 세미나 19
지난주에 연결 리스트로 구현한 것과는 달리
힙은 배열로 구현합니다.
배열을 이용한 힙의 구현
2021 AL林 정기 세미나 20
1. 루트 노드는 1이다.
2. 현재 노드의 인덱스를 i라 할 때,
부모 노드의 인덱스는 i / 2이다.
자식 노드의 인덱스는 2i, 2i + 1이다.
배열을 이용한 힙의 구현
2021 AL林 정기 세미나 21
2021 AL林 정기 세미나 22
최대 힙(max-heap)
최대 힙(max-heap)
2021 AL林 정기 세미나 23
다음 힙의 성질(heap property)을 만족하는 힙
✓ 최대 힙 성질(max-heap property)
각 노드의 값은 자기 자식의 값보다 크거나 같다.
최대 힙(max-heap)
2021 AL林 정기 세미나 24
최대 힙의 연산
2021 AL林 정기 세미나 25
1. 원소를 추가
2. 최댓값을 확인 → heap[0]
3. 최댓값을 삭제
원소를 추가(push)
2021 AL林 정기 세미나 26
1. 일단 힙의 맨 끝에 원소를 추가한다. (→ 힙 구조 유지)
2. 최대 힙의 성질을 만족할 때까지 부모 노드와 위치를 바꾼다.
원소를 추가(push)
2021 AL林 정기 세미나 27
9
6
2
5 6 6
8
원소를 추가(push)
2021 AL林 정기 세미나 28
9
6
2
5 6 6
8
7
원소를 추가(push)
2021 AL林 정기 세미나 29
9
6
2
7 6 6
8
5
원소를 추가(push)
2021 AL林 정기 세미나 30
9
7
2
6 6 6
8
5
최댓값 삭제(pop)
2021 AL林 정기 세미나 31
1. 일단 힙의 마지막 노드를 루트에 덮어 씌운다. (→ 힙 구조 유지)
2. 최대 힙의 성질을 만족할 때까지 가장 큰 자식 노드와 위치를 바꾼다.
최댓값 삭제(pop)
2021 AL林 정기 세미나 32
9
7
2
6 6 6
8
5
최댓값 삭제(pop)
2021 AL林 정기 세미나 33
5
7
2
6 6 6
8
최댓값 삭제(pop)
2021 AL林 정기 세미나 34
8
7
2
6 6 6
5
최댓값 삭제(pop)
2021 AL林 정기 세미나 35
8
7
2
6 6 5
6
최대 힙 vs 배열
2021 AL林 정기 세미나 36
원소를 추가 O(logN) O(1)
최댓값을 확인 O(1) O(N)
최댓값을 삭제 O(logN) O(N)
최대 힙 배열
C++로 구현한 힙
2021 AL林 정기 세미나 37
2021 AL林 정기 세미나 38
2021 AL林 정기 세미나 39
C++로 구현한 힙
2021 AL林 정기 세미나 40
http://boj.kr/b2051121a6904f0781fdb8f3c255468c
소스 코드
2021 AL林 정기 세미나 41
라이브러리에 구현된 우선순위 큐
C++ : std::priority_queue
2021 AL林 정기 세미나 42
https://en.cppreference.com/w/cpp/container/priority_queue
python : heapq
2021 AL林 정기 세미나 43
https://docs.python.org/3/library/heapq.html
2021 AL林 정기 세미나 44
우선순위 큐의 활용
우선순위 큐의 활용
2021 AL林 정기 세미나 45
• Bandwidth management
• Discrete event simulation
- See also: Scheduling (computing), queueing theory
• Algorithms
Prim algorithm, Dijkstra's algorithm, A* search algorithm
heapsort
Huffman coding
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 46
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 47
10장 20장 40장
40장 + 20장 → 60장
60장 + 10장 → 70장
총 비교 횟수 : 130
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 48
10장 20장 40장
10장 + 20장 → 30장
30장 + 40장 → 70장
총 비교 횟수 : 100
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 49
다음 그리디 알고리즘이 성립한다.
“크기가 가장 작은 두 카드를 합치는 방법을 포함하는 최적해가 반드시 존재한다.”
증명 : 하프만 코드의 증명과 같다.
https://opendsa-server.cs.vt.edu/ODSA/Books/CS3/html/HuffProof.html
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 50
따라서 다음 알고리즘을 수행하면 최적해가 나옵니다.
카드의 집합을 S라 할 때,
While(S의 크기 > 1){
1. 카드 중 가장 작은 카드 2개를 선택해서 비교한다.
2. 다시 합친 카드를 S에 넣는다.
}
하프만 코드 카드 정렬하기(BOJ 1715번)
2021 AL林 정기 세미나 51
연습문제
2021 AL林 정기 세미나 52
우선순위 큐
연습 문제
11279 최대 힙
1927 최소 힙
11286 절댓값 힙
1715 카드 정렬하기
연습문제
2021 AL林 정기 세미나 53
우선순위 큐
도전 문제
2109 순회강연
1379 강의실 2
1655 가운데를 말해요
1202 보석 도둑
7662 이중 우선순위 큐

More Related Content

What's hot

2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차Moonki Choi
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01Jisu Lee
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw정완 전
 
Graph
GraphGraph
GraphGNGLB
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 RYoonwhan Lee
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 
iT Cafe - Linear Algebra & Python Overview
iT Cafe - Linear Algebra & Python OverviewiT Cafe - Linear Algebra & Python Overview
iT Cafe - Linear Algebra & Python OverviewDongmin Kim
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programmingssuser889640
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)ssusercdf17c
 
머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)ssusercdf17c
 
파이썬 자료형 발표
파이썬 자료형 발표파이썬 자료형 발표
파이썬 자료형 발표joonjhokil
 
R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기Yoonwhan Lee
 

What's hot (19)

2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차2021 2학기 정기 세미나 5주차
2021 2학기 정기 세미나 5주차
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
R 기초 II
R 기초 IIR 기초 II
R 기초 II
 
컴퓨터개론09
컴퓨터개론09컴퓨터개론09
컴퓨터개론09
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
Graph
GraphGraph
Graph
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
iT Cafe - Linear Algebra & Python Overview
iT Cafe - Linear Algebra & Python OverviewiT Cafe - Linear Algebra & Python Overview
iT Cafe - Linear Algebra & Python Overview
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)
 
머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)머신 러닝을 해보자 1장 (2022년 스터디)
머신 러닝을 해보자 1장 (2022년 스터디)
 
파이썬 자료형 발표
파이썬 자료형 발표파이썬 자료형 발표
파이썬 자료형 발표
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
 
R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기
 

More from Moonki Choi

2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차Moonki Choi
 
2021 알림 오세요
2021 알림 오세요2021 알림 오세요
2021 알림 오세요Moonki Choi
 
2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차Moonki Choi
 
2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차Moonki Choi
 
2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차Moonki Choi
 
2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차Moonki Choi
 
2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차Moonki Choi
 
2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차Moonki Choi
 
2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차Moonki Choi
 
2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차Moonki Choi
 
2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차Moonki Choi
 
2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차Moonki Choi
 
2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차Moonki Choi
 

More from Moonki Choi (13)

2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차2021 여름방학 정기 세미나 1주차
2021 여름방학 정기 세미나 1주차
 
2021 알림 오세요
2021 알림 오세요2021 알림 오세요
2021 알림 오세요
 
2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차2021 1학기 정기 세미나 3주차
2021 1학기 정기 세미나 3주차
 
2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차2021 1학기 정기 세미나 2주차
2021 1학기 정기 세미나 2주차
 
2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차2020 여름방학 정기스터디 6주차
2020 여름방학 정기스터디 6주차
 
2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차2020 여름방학 정기스터디 5주차
2020 여름방학 정기스터디 5주차
 
2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차2020 겨울방학 정기스터디 3주차
2020 겨울방학 정기스터디 3주차
 
2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차2020 겨울방학 정기스터디 2주차
2020 겨울방학 정기스터디 2주차
 
2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차2020 2학기 정기스터디 8주차
2020 2학기 정기스터디 8주차
 
2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차2020 2학기 정기스터디 2주차
2020 2학기 정기스터디 2주차
 
2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차2020 2학기 정기스터디 1주차
2020 2학기 정기스터디 1주차
 
2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차2020 1학기 정기스터디 2주차
2020 1학기 정기스터디 2주차
 
2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차2020 1학기 정기스터디 1주차
2020 1학기 정기스터디 1주차
 

Recently uploaded

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 

Recently uploaded (8)

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

2021 여름방학 정기 세미나 3주차

  • 2. 강의자 소개 2021 AL林 정기 세미나 2 이름 최문기 소속 서울시립대 컴퓨터과학부(16학번) 핸들 iknoom1107(BOJ) IKnoom(Codeforces) IKnoom(AtCoder) ICPC 팀 (팀명 미정) - 김정현, 오규민, 최문기
  • 3. 2021 AL林 정기 세미나 3 복습
  • 4. 트리(tree) 2021 AL林 정기 세미나 4 [그래프 이론] - 회로가 없는 연결 무향 그래프 [자료 구조] - 노드 사이의 계층 관계를 표현하는 자료구조 - 부모(상위 노드) – 자식(하위 노드) 관계를 가진다. - 자식노드는 하나의 부모노드를 가진다.
  • 5. 트리: 예 2021 AL林 정기 세미나 5
  • 6. 트리: 용어 2021 AL林 정기 세미나 6
  • 7. 트리: 성질 2021 AL林 정기 세미나 7 1. 노드가 n개일 때 간선이 n-1개이다. 2. 서로 다른 임의의 두 노드에 대한 경로는 유일하다.
  • 8. 이진 트리(binary tree) 2021 AL林 정기 세미나 8 임의의 노드의 자식 노드 수가 2 이하인 트리
  • 9. 이진 트리: 예 2021 AL林 정기 세미나 9 full binary tree complete binary tree = heap structure perfect binary tree
  • 10. 트리의 구현 2021 AL林 정기 세미나 10 하지만 인접 행렬로 구현하게 된다면 희소 행렬이 되므로 비효율적이고 일반적으로 인접 리스트로 저장합니다.
  • 11. 트리의 구현 2021 AL林 정기 세미나 11 이렇게 객체를 만들어서 자식 노드의 주소를 저장할 수도 있습니다. class Node: def __init__(self, element): self.element = element self.left_child = None self.right_child = None class Node: def __init__(self, element): self.element = element self.children = []
  • 12. 트리의 구현: 그 외.. 2021 AL林 정기 세미나 12 완전 이진트리는 배열로 구현하는 것이 효율적입니다. 이는 [여름방학 3주차 우선순위 큐]에서 알아보겠습니다.
  • 13. 트리의 순회 2021 AL林 정기 세미나 13
  • 14. 2021 AL林 정기 세미나 14 힙(heap)
  • 15. 힙 2021 AL林 정기 세미나 15 원소를 추가 : O(logN) 최댓값을 확인 : O(1) 최댓값을 삭제 : O(logN) 를 수행하는 자료구조, 우선순위 큐(Priority Queue)를 구현하는데 사용한다.
  • 16. 2021 AL林 정기 세미나 16 힙의 정의와 구현
  • 17. 힙의 정의 2021 AL林 정기 세미나 17 (Definition : heap structure) 다음 성질을 만족하는 이진 트리(binary tree)이다. 1. 마지막 레벨을 제외한 모든 레벨이 완전하다. 2. 마지막 레벨의 모든 노드는 가능한 가장 왼쪽에 있는 이진 트리
  • 18. 이진 트리: 예 2021 AL林 정기 세미나 18 full binary tree complete tree = heap structure perfect binary tree
  • 19. 힙의 구현 2021 AL林 정기 세미나 19 지난주에 연결 리스트로 구현한 것과는 달리 힙은 배열로 구현합니다.
  • 20. 배열을 이용한 힙의 구현 2021 AL林 정기 세미나 20 1. 루트 노드는 1이다. 2. 현재 노드의 인덱스를 i라 할 때, 부모 노드의 인덱스는 i / 2이다. 자식 노드의 인덱스는 2i, 2i + 1이다.
  • 21. 배열을 이용한 힙의 구현 2021 AL林 정기 세미나 21
  • 22. 2021 AL林 정기 세미나 22 최대 힙(max-heap)
  • 23. 최대 힙(max-heap) 2021 AL林 정기 세미나 23 다음 힙의 성질(heap property)을 만족하는 힙 ✓ 최대 힙 성질(max-heap property) 각 노드의 값은 자기 자식의 값보다 크거나 같다.
  • 24. 최대 힙(max-heap) 2021 AL林 정기 세미나 24
  • 25. 최대 힙의 연산 2021 AL林 정기 세미나 25 1. 원소를 추가 2. 최댓값을 확인 → heap[0] 3. 최댓값을 삭제
  • 26. 원소를 추가(push) 2021 AL林 정기 세미나 26 1. 일단 힙의 맨 끝에 원소를 추가한다. (→ 힙 구조 유지) 2. 최대 힙의 성질을 만족할 때까지 부모 노드와 위치를 바꾼다.
  • 27. 원소를 추가(push) 2021 AL林 정기 세미나 27 9 6 2 5 6 6 8
  • 28. 원소를 추가(push) 2021 AL林 정기 세미나 28 9 6 2 5 6 6 8 7
  • 29. 원소를 추가(push) 2021 AL林 정기 세미나 29 9 6 2 7 6 6 8 5
  • 30. 원소를 추가(push) 2021 AL林 정기 세미나 30 9 7 2 6 6 6 8 5
  • 31. 최댓값 삭제(pop) 2021 AL林 정기 세미나 31 1. 일단 힙의 마지막 노드를 루트에 덮어 씌운다. (→ 힙 구조 유지) 2. 최대 힙의 성질을 만족할 때까지 가장 큰 자식 노드와 위치를 바꾼다.
  • 32. 최댓값 삭제(pop) 2021 AL林 정기 세미나 32 9 7 2 6 6 6 8 5
  • 33. 최댓값 삭제(pop) 2021 AL林 정기 세미나 33 5 7 2 6 6 6 8
  • 34. 최댓값 삭제(pop) 2021 AL林 정기 세미나 34 8 7 2 6 6 6 5
  • 35. 최댓값 삭제(pop) 2021 AL林 정기 세미나 35 8 7 2 6 6 5 6
  • 36. 최대 힙 vs 배열 2021 AL林 정기 세미나 36 원소를 추가 O(logN) O(1) 최댓값을 확인 O(1) O(N) 최댓값을 삭제 O(logN) O(N) 최대 힙 배열
  • 37. C++로 구현한 힙 2021 AL林 정기 세미나 37
  • 38. 2021 AL林 정기 세미나 38
  • 39. 2021 AL林 정기 세미나 39
  • 40. C++로 구현한 힙 2021 AL林 정기 세미나 40 http://boj.kr/b2051121a6904f0781fdb8f3c255468c 소스 코드
  • 41. 2021 AL林 정기 세미나 41 라이브러리에 구현된 우선순위 큐
  • 42. C++ : std::priority_queue 2021 AL林 정기 세미나 42 https://en.cppreference.com/w/cpp/container/priority_queue
  • 43. python : heapq 2021 AL林 정기 세미나 43 https://docs.python.org/3/library/heapq.html
  • 44. 2021 AL林 정기 세미나 44 우선순위 큐의 활용
  • 45. 우선순위 큐의 활용 2021 AL林 정기 세미나 45 • Bandwidth management • Discrete event simulation - See also: Scheduling (computing), queueing theory • Algorithms Prim algorithm, Dijkstra's algorithm, A* search algorithm heapsort Huffman coding
  • 46. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 46
  • 47. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 47 10장 20장 40장 40장 + 20장 → 60장 60장 + 10장 → 70장 총 비교 횟수 : 130
  • 48. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 48 10장 20장 40장 10장 + 20장 → 30장 30장 + 40장 → 70장 총 비교 횟수 : 100
  • 49. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 49 다음 그리디 알고리즘이 성립한다. “크기가 가장 작은 두 카드를 합치는 방법을 포함하는 최적해가 반드시 존재한다.” 증명 : 하프만 코드의 증명과 같다. https://opendsa-server.cs.vt.edu/ODSA/Books/CS3/html/HuffProof.html
  • 50. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 50 따라서 다음 알고리즘을 수행하면 최적해가 나옵니다. 카드의 집합을 S라 할 때, While(S의 크기 > 1){ 1. 카드 중 가장 작은 카드 2개를 선택해서 비교한다. 2. 다시 합친 카드를 S에 넣는다. }
  • 51. 하프만 코드 카드 정렬하기(BOJ 1715번) 2021 AL林 정기 세미나 51
  • 52. 연습문제 2021 AL林 정기 세미나 52 우선순위 큐 연습 문제 11279 최대 힙 1927 최소 힙 11286 절댓값 힙 1715 카드 정렬하기
  • 53. 연습문제 2021 AL林 정기 세미나 53 우선순위 큐 도전 문제 2109 순회강연 1379 강의실 2 1655 가운데를 말해요 1202 보석 도둑 7662 이중 우선순위 큐