일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자료구조
- K-MOOC
- MySQL
- ADP
- 코테
- Udemy
- EBS
- 정치학
- 데이터분석전문가가이드
- 누가 진정한 리더인가
- 위대한 수업
- 알고리즘
- python
- Hacker Rank
- ADsP
- Baekjoon
- 백준
- 공부정리
- 후기
- 맛집
- 조지프 나이
- Joseph Samuel Nye Jr.
- Great Minds
- 당신이 몰랐던 진화론
- 미분적분학
- 빅데이터
- Progate
- CNN10
- KMOOC
- 데이터분석전문가
Archives
- Today
- Total
ㅇ
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 22 본문
* 수업은 JS 기반이지만 Python으로 구현
Section 22
트리 소개
- 비선형 구조
- 트리의 구성 요소
- root: 트리의 가장 높은 노드
- chlld: 다른 노드에 직접적으로 연결된 노드
- parent: child의 반대 개념
- siblings: 같은 parent를 가진 노드 그룹
- leaf: children이 없는 노드
- edge: 노드와 노드 사이를 연결하는 것
트리 사용하는 경우
- HTML DOM(문서 객체 모델)
- 네트워크 라우팅
- 추상 구문 트리: 프로그래밍 언어의 구문을 보여주는 방법 중 하나
- 인공지능: 결정과 분화의 반복
- 운영체제에서 폴더시스템 설계 방식
- 컴퓨터 파일 시스템
이진 트리 소개
- 최대 노드당 두 개의 자식을 갖는 트리, 0~2개까지 가능하다.
- 데이터를 비교하여 정렬 가능하게 저장한다.
- 부모 노드를 기준으로 그보다 작은 것은 왼쪽으로, 큰 것은 오른쪽으로 가른다. 이 작업을 다시 자식 노드에서 반복되어 수행한다.
이진 검색 트리 소개
- 찾고자 하는 값과 노드를 비교하여 더 크다면 오른쪽을, 더 작다면 왼쪽으로 가서 비교를 한다.
- 이진 트리와 같은 규칙을 따른다.
- 모든 부모 노드는 최대 두 개의 자식을 갖는다.
- 부모 노드보다 왼쪽에 있는 모드 노드는 항상 부모 노드보다 작고, 오른쪽에 있는 노드는 부모보다 항상 크다.
class 소개
- 노드와 이진탐색트리 클래스를 각각 만들어 활용한다.
- 노드 클래스에서는 left와 right 포인터의 초기값을 Null로 둔다.
- 이진탐색트리 클래스에서는 root의 초기값을 Null로 둔다.
insert method 소개
- 새로운 노드를 만든다.
- 루트가 존재하는지 확인한다.
- 존재하지 않다면, 새로운 노드가 루트가 된다.
- 존재한다면, 새로운 노드가 루트값보다 큰지 작은지 비교한다.
- 만약 크다면, 비교 노드값(초기에는 루트값)에 오른쪽 값이 있나 확인한다.
- 만약 존재한다면 그 노드로 이동해 비교하는 단계부터 다시 반복한다.
- 만약 존재하지 않다면 그 위치에 새로운 노드 값을 넣는다.
- 만약 작다면, 비교 노드값(초기에는 루트값)에 왼쪽 값이 있나 확인한다.
- 만약 존재한다면 그 노드로 이동해 비교하는 단계부터 다시 반복한다.
- 만약 존재하지 않다면 그 위치에 새로운 노드 값을 넣는다.
- 만약 크다면, 비교 노드값(초기에는 루트값)에 오른쪽 값이 있나 확인한다.
- 삽입 이후에 전체 트리의 출력을 반환한다.
find method 소개
- 루트가 존재하는지 확인한다.
- 존재하지 않다면, False를 반환한다.
- 존재한다면, 새로운 노드가 루트값과 동일하다면 True를 반환한다.
- 만약 동일하지 않다면 큰지 작은지 비교한다.
- 만약 크다면, 비교 노드값(초기에는 루트값)에 오른쪽 값이 있나 확인한다.
- 만약 존재한다면 그 노드로 이동해 비교하는 단계부터 다시 반복한다.
- 만약 존재하지 않다면 False를 반환한다.
- 만약 작다면, 비교 노드값(초기에는 루트값)에 왼쪽 값이 있나 확인한다.
- 만약 존재한다면 그 노드로 이동해 비교하는 단계부터 다시 반복한다.
- 만약 존재하지 않다면 False를 반환한다.
- 만약 크다면, 비교 노드값(초기에는 루트값)에 오른쪽 값이 있나 확인한다.
- 삽입 이후에 전체 트리의 출력을 반환한다.
method 구현
# 이진탐색트리 구현
class Node:
# construcotr
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BinarySearchTree:
# constructor
def __init__(self):
self.root = None
# instance method
def insert(self, val):
newNode = Node(val)
if self.root is None:
self.root = newNode
return self
else:
current = self.root
while(True):
if val is current.val:
return 'Undefined'
if val < current.val:
if current.left is None:
current.left = newNode
return self
current = current.left
if val > current.val:
if current.right is None:
current.right = newNode
return self
current = current.right
# instance method
def find(self, val):
if self.root is None:
return False
current = self.root
found = False
while(current and not found):
if val < current.val:
current = current.left
elif val > current.val:
current = current.right
else:
found = True
if not found:
return 'Undefined'
return current
# 선언
tree = BinarySearchTree()
print('\n--- insert fcn---')
# insert 수행
print(tree.insert(0))
print(tree.insert(1))
print(tree.insert(5))
print(tree.insert(8))
print(tree.insert(13))
print(tree.insert(11))
print(tree.insert(0))
print('\n--- find fcn---')
# find 수행
print(tree.find(0))
print(tree.find(3))
print(tree.find(11))
트리: 빅오 복잡도
- Insertion: O(log N)
- Searching: O(log N)
반응형
'내 생각 > 강의' 카테고리의 다른 글
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 24 (0) | 2023.09.25 |
---|---|
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 23 (0) | 2023.08.23 |
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 21 (0) | 2023.08.08 |
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 20 (0) | 2023.07.27 |
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스_Section 19 (0) | 2023.07.25 |
Comments