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주차 우선순위 큐]에서 알아보겠습니다.
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이다.
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에 넣는다.
}