4. 자료구조(data structure)
2021 AL林 정기 세미나 4
효율적인 접근 및 수정을 가능하게 하는 자료의 집합
(In computer science, a data structure is a data organization,
management, and storage format that enables efficient access
and modification.)
효율적인 알고리즘을 설계하는데에 필요하다.
20. 트리의 구현
2021 AL林 정기 세미나 20
트리는 그래프이므로 그래프와 동일하게 구현하면 됩니다.
그래프를 구현하는 방법
1. 인접 행렬
2. 인접 리스트
21. 트리의 구현
2021 AL林 정기 세미나 21
하지만 인접 행렬로 구현하게 된다면 희소 행렬이 되므로 비효율적이고
일반적으로 인접 리스트로 저장합니다.
22. 트리의 구현
2021 AL林 정기 세미나 22
이렇게 객체를 만들어서 자식 노드의 주소를 저장할 수도 있습니다.
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 = []
23. 트리의 구현: 그 외..
2021 AL林 정기 세미나 23
완전 이진트리는 배열로 구현하는 것이 효율적입니다.
이는 [여름방학 3주차 우선순위 큐]에서 알아보겠습니다.
24. 트리의 순회
2021 AL林 정기 세미나 24
트리는 그래프이므로
동일하게 bfs, dfs를 하여 트리를 순회(탐색)할 수 있습니다.
이 때 이진 트리를 dfs로 순회할 때
순서에 따라 다음 세가지 방법이 있습니다.
• 전위 순회
• 중위 순회
• 후위 순회
30. 이진 검색 트리(BST, Binary Search Tree)
2021 AL林 정기 세미나 30
효율적으로 자료를 검색하기 위한 자료구조
원소 검색, 삽입, 삭제가 𝜃(log 𝑛 ) (평균적으로 log(n))
레코드(Recode): 개체에 대한 모든 정보
검색키(Search key): 레코드를 대표할 수 있는 필드
31. 이진 검색 트리(BST, Binary Search Tree)
2021 AL林 정기 세미나 31
특징
• 이진 트리다.
• 각 노드는 키 값을 하나씩 갖는다.
각 노드의 키 값은 모두 다르다.
• 임의의 노드의 키 값은
자신의 왼쪽에 있는 모든 노드의 키 값보다 크고,
오른쪽에 있는 모든 노드의 키 값보다 작다.
32. 이진 검색 트리(BST, Binary Search Tree)
2021 AL林 정기 세미나 32
- 원소 검색
- 원소 삽입
- 원소 삭제
위 연산이 𝑂(ℎ)에 수행
(트리의 높이에 비례)
따라서 최악의 경우 𝑂(𝑛)
33. 이진 검색 트리(BST, Binary Search Tree)
2021 AL林 정기 세미나 33
높이를 log(𝑛)으로 유지하는 이진 검색 트리
- AVL 트리
- 레드 블랙 트리(C++에서 std::set, std::map)
효율적으로 자료를 검색하기 위한 또 다른 자료구조
- 해시 테이블(C++에서 std::unordered_set, std::unordered_map)
34. 우선순위 큐
2021 AL林 정기 세미나 34
원소를 추가 : O(logN)
최댓값을 확인 : O(1)
최댓값을 삭제 : O(logN)
이는 [여름방학 3주차 우선순위 큐]에서 알아보겠습니다.
35. 트리의 활용: 그 외..
2021 AL林 정기 세미나 35
• 유니온 파인드: 집합을 관리하는 자료구조
• 최소 스패닝 트리: 그래프의 모든 정점을 연결하는 트리. 그 중 가중치의 합이 최소
• 트라이: 문자열 집합을 관리하는 자료구조
• 세그먼트 트리: 구간합을 관리하는 자료구조
36. 연습문제
2021 AL林 정기 세미나 36
트리
연습 문제
1991 트리 순회
9934 완전 이진 트리
5639 이진 검색 트리
4803 트리
1068 트리
도전 문제
14725 개미굴
1967 트리의 지름
2263 트리의 순회
37. 그 외 참고할만한 자료
2021 AL林 정기 세미나 37
kks님 블로그
• https://m.blog.naver.com/kks227/220788265724
바킹독님 블로그
• https://blog.encrypted.gg/909?category=773649