일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 이미지데이터라벨링
- 제로베이스
- 파이썬
- 감시직근로자
- 구구단python
- 인공지능공모전
- 제로베이스데이터사이언스과정
- 넘파이슬라이싱
- AIHub
- Python
- vgg
- raise python
- 파이썬실행시간측정
- 제로베이스데이터사이언스
- 데이터사이언스스쿨
- ucfirst
- 문장고치기python
- 단속적근로자
- yolov4
- timer python
- 넘파이인덱스
- numpyboolean
- numpy기본개념
- python decolator
- 빅데이터활용공모전
- 내장함수날코딩
- zerobase
- python내장함수
- 파이썬 비밀번호입력
- SequentialSearch
- Today
- Total
개발자에서 전직중🔥
[Python] Tree/ Binary Tree/ Binary Search Tree의 개념 본문
1. 트리의 종류
-
트리(Tree)란?
- Node와 Branch를 이용하여 사이클을 이루지 않도록 구성한 데이터 구조
- <Image1> 에서 왼쪽 node 중 3과 6은 Siblings 관계이지만, branch로 이어질 수 없기 때문에 사이클이 이루어지지 않는 것이다.
-
이진 트리(Binary Tree)란?
- Node의 최대 Branch가 2인 트리. 그 이상의 연결은 불가하다.
-
이진 탐색 트리란(Binary Search Tree)란?
- 이진트리와 구성은 같으나, 왼쪽 노드는 해당 노드보다 작은 값, 오른쪽 노드는 해당노드와 값이 같거나 큰 값을 갖는 조건이 추가된 트리이다.
1. 먼저 21의 값을 가진 노드가 입력되어, ROOT NODE를 생성한다.
2. 다음으로 14의 값을 가진 노드가 입력되면, 14 < 21인 것을 확인 후, 왼쪽에 배치한다.
3. 다음으로 28의 값을 가진 노드가 입력되면, 28 > 21인 것을 확인 후, 오른쪽에 배치한다.
이와같은 과정으로 노드가 들어올 때 마다 크기에 따라 배치한다.
2. 이진 탐색 트리의 주요 용도와 장/단점
- 주요 용도 : 데이터 검색(탐색)
- 장점 : 탐색 속도 개선
- 단점 : 복잡함
입력된 데이터 중에서 27을 찾아야 할 때, BST와 배열의 탐색 과정을 비교해 보자.
- BST에서는
1. ROOT NODE인 21의 값 확인 --> 27이 더큼 ---> 오른쪽 Child Node 확인
2. Child Node(Current Node)인 28의 값 확인 ---> 27이 작음 ---> 왼쪽 Child Node 확인
3. Current Node인 25의 값 확인 ---> 27이 더 큼 ---> 오른쪽 Child Node 확인
4. 27 찾음!
-----> 총 3단계로 '27'을 찾았음.
- 일반 정렬된 배열
1. 가장 작은 값인 5부터 하나씩 확인
2. 5 -> 11 -> 12 *** 27까지 총 10번을 확인하여 27까지 도달
-----> 만약 배열에 10,000까지의 수가 정렬되어 있고, 5700이라는 숫자를 찾아야 한다면,
5700번의 단계를 걸쳐야 한다.
이러한 과정을 통해 BST가 데이터를 탐색하는 시간이 훨씬 짧다는 것을 알 수 있다.
5 Gifs to Understand Binary Search Trees
Gif #1 Gif #2 : Binary Search Tree from Sorted Array Gif #3 How insertion into a binary search tree (BST) works Gif #4 : Degeneration of Binary Search Tree Demonstration Gif #5 is coming ...
blog.penjee.com
'💻 개발' 카테고리의 다른 글
[Python Algorithm] 최단경로 알고리즘-다익스트라 알고리즘의 이해 (0) | 2020.11.11 |
---|---|
[Python Algorithm] 순차탐색 (Sequential Search) (0) | 2020.11.10 |
[Python] Tuple Packing & Tuple Unpacking (0) | 2020.10.21 |
[Python Algorithm] 재귀용법(Recursive Call, 재귀호출) (0) | 2020.10.21 |
[Python] openCV 이미지 읽기, 보기, 저장하기 (0) | 2020.10.19 |