TIL - Queue, Tree & Heap
๐ย ๊ณต๋ถ ๋ด์ฉ
Queues
Queue?
- FIFO (First In First Out)
- operations
- enqueue
- dequeue
- ์ ํ ๋ฐฐ์ด์ผ๋ก ๊ตฌํ:
O(n)-> ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋๊ฒ์ด ๋ ์ข์
- ์ ํ ๋ฐฐ์ด์ผ๋ก ๊ตฌํ:
Circular Queues
- ๋ฐฐ์ด์ ํ์ชฝ ๋๊ณผ ๋ค๋ฅธ์ชฝ ๋์ด ๋ฟ์ ์๋ ๋ชจ์ต
- ์์์ ๊ฐ์๊ฐ ์ ํด์ ธ์์
front / rear ํฌ์ธํฐ๋ฅผ ๊ธฐ์ตํ๊ณ , dequeue๋ ์์ ์ ์ฅ์๋ ์ฌํ์ฉ- ์ ํ ๋ฐฐ์ด์ผ๋ก ๊ตฌํํ๋๊ฒ์ด ๋ ์ข์
Priority Queues
- ์์๋ค ์ฌ์ด์ ์ฐ์ ์์๋ฅผ ๋ฐ๋ฆ
- ์ฐ์ ์์ ๊ตฌํ
- ์์๋ฅผ ๋ฃ์ ๋ enqueue vs. ์์๋ฅผ ๊บผ๋ผ ๋ dequeue
- ๋ฃ์ ๋(enqueue) ์ฐ์ ์์์ ๋ฐ๋ผ ์ ๋ ฌํ๋๊ฒ์ด ์กฐ๊ธ ๋ ๋์ Time Complexity๋ฅผ ๊ฐ์ง
- ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ์ฉํ๋ ๋ฐ์๋ ๋ ํธ๋ฆฌํจ
- ์์๋ฅผ ๋ฃ์ ๋ enqueue vs. ์์๋ฅผ ๊บผ๋ผ ๋ dequeue
Trees
Tree?
- ๊ตฌ์ฑ
- root node
- interner nodes
- leaf nodes
- ํน์ฑ
- parent node / child node
- ๋ ธ๋์ ์์ค (level) : root node๋ก๋ถํฐ ๊ฑฐ๋ฆฌ
- ๋ ธ๋์ ์ฐจ์ (degree) : ๋ ธ๋์ ์์ ์
- ํธ๋ฆฌ์ ๋์ด(height) ๋๋ ๊น์ด(depth) : ์ ์ผ ํฐ level + 1
- subtree
- ๊ตฌ์ฑ
Binary Trees
- ๋ชจ๋ node์ degree <= 2
- operations
- size()
- depth()
- ์ํ traversal
- Depth First Traversal : ์ฌ๊ท ํธ์ถ์ ํตํด ๊ตฌํ
- inorder
- preorder
- postorder
- Breadth Tirst Traversal : queue ์ฌ์ฉ!
- level์ด ๋ฎ์ ๋ ธ๋๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธ
- ๊ฐ์ level์ธ ๊ฒฝ์ฐ ๋ถ๋ชจ ๋ ธ๋์ ์์๋ฅผ ๋ฐ๋ฆ
- Depth First Traversal : ์ฌ๊ท ํธ์ถ์ ํตํด ๊ตฌํ
- ํฌํ ์ด์ง ํธ๋ฆฌ (full binary trees)
- ๋ชจ๋ node์ degree == 2
- ์์ ์ด์ง ํธ๋ฆฌ (complete binary trees)
- (depth k)
level k-2๊น์ง๋ full binary tree,level k-1์ ์ผ์ชฝ๋ถํฐ node ์ฑ์์ง
- (depth k)
Binary Search Trees
- ๋ชจ๋ ๋
ธ๋์ ๋ํด ๋ค์ ์ฑ์ง์ ๋ง์กฑํ๋ Binary Tree
- ์ผ์ชฝ subtree’s data < ํ์ฌ node’s data < ์ค๋ฅธ์ชฝ subtree’s data
- ์ฅ๋จ์
- ์ฅ์ : ์์์ ์ถ๊ฐ, ์ญ์ ๊ฐ ํธํจ
- ๋จ์ : ํฐ ๊ณต๊ฐ์ ์์ํจ (์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ)
- operations
- insert()
- remove()
- lookup()
- inorder()
- min(), max()
- ๋ชจ๋ ๋
ธ๋์ ๋ํด ๋ค์ ์ฑ์ง์ ๋ง์กฑํ๋ Binary Tree
Heap
- Heaps?
Binary Tree์ ํ ์ข ๋ฅ (binary heap)
Min / Max heap
- root node๊ฐ ํญ์ ์ต์/์ต๋ ๊ฐ์ ๊ฐ์ง๋ค
- complete binary tree
nnodes -> depthlog(n)+1- insert / remove operation์ Time Complexity :
O(log(n))
- subtree ๋ํ Min / Max heap
Binary Seacrh Tree vs. Heap?
BST Heap ๋ฐ์ดํฐ ์ ๋ ฌ ํฌ๊ธฐ์์๋๋ก ์์ ์ ๋ ฌ ์์ ์ ๋ ฌ X ๋ฐ์ดํฐ ๊ฒ์ O X ์์ ์ด์ง ํธ๋ฆฌ X O ์ฐ์ฐ ์๊ฐ (์ต์ ์ ๊ฒฝ์ฐ) O(n) O(log(n)) ์ ํ ๋ฐฐ์ด๋ก ๊ตฌํ X O operations
- insert()
- remove()
๐ย CHECK
(์ด๋ ต๊ฑฐ๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ ๋ฑ ๋ค์ ํ์ธํ ๊ฒ๋ค)
- ๋
ธ๋์ ์ฐจ์(degree) : # of children
- binary tree : ๋ชจ๋ ๋ ธ๋์ degree๊ฐ ํญ์ 2์ดํ
- leaf nodes : degree 0
- ๋จ์ถ ํ๊ฐ
- ๋จ์ถํ๊ฐ์ ๋ํด ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ
- 2๊ฐ ์ด์์ ๋ ผ๋ฆฌ ์กฐ๊ฑด์์ด ์์ ๊ฒฝ์ฐ์, ์ ์กฐ๊ฑด์ด ๊ณ์ฐํ ๊ฐ์ ์ํด ๊ฒฐ๊ณผ๊ฐ ํ์คํด์ง๋ฉด ๋๋ฒ์งธ ์กฐ๊ฑด์ ํ์ธํ์ง ์์
- False and (), True or () ์ธ ๊ฒฝ์ฐ ๋ฑ์ด ํด๋น๋จ
โย ๋๋ ์
์ด์ ์ ๊ตํ์ด ์์ด์ ๊ทธ๋ฐ์ง, ์ค๋์ ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์ ์ค์๊ฐ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์์ ๋ ๋์ ๋ฐฉ์์ ๋ํด ๊ณ ๋ฏผํ๋ ์ํฉ์ด ๋ง์์ก๋ค.
์ค๋ ์ฃผ๋ก ๊ณ ๋ฏผํ ๋ถ๋ถ์
| |
์ ๋์๋ค.
์ ์๋ ๋ด๊ฐ ํ์ ํ๋ก๊ทธ๋๋ฐ ํ ๋ ์์ฃผ ํ๊ธด ํ๋๋ฐ, ํญ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ด๋ค. ๋ฐ๋ณต๋๋ ๊ธฐ๋ฅ์ ํจ์๋ก ๋นผ๋๊ฐ, ์ ์ฉ๋๋ ๋ณ์๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฌถ์ด์ ๋ฐ๋ณตํ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฐ๋๋ฐ, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ญ๊ฐ ์์๊น ๊ณ ๋ฏผํ๊ณ ์๋ค.
ํ์๋ Complexity๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๋ฌธ์ด ์๋๋ค. ์ค์ ๋ก ์ด operation์ด ์ด๋ป๊ฒ ๊ตฌํ๋๊ณ ์๋์ง, ์ ๊ทธ๋ ๊ฒ ๊ตฌํ๋์๋์ง๊ฐ ๊ถ๊ธํ ๊ฒ์ด๋ค.
์ค์ต ๋ฌธ์ ์์ ์ฐ์ ์์ queue๋ฅผ ๊ตฌํํ ๋, skeleton code์ dequeue ํจ์๋ ๋ง์ง๋ง elements๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก ๋์ด์์๋ค.(getAt(data.size()))
๋๋ ์ฒ์ element๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ผ๋ก ์๊ฐํ๊ณ (getAt(1)) ์ด์ ํด๋นํ๋ enqueue ํจ์๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ ๊น ๋งํ๋ค๊ฐ, ๊ฒฐ๊ตญ์ ๋์น์ฑ๊ณ ํด๊ฒฐํ๋ค.
๊ทธ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ ๊ฒ ๊ตฌํํ๋๊ฒ ๋ ๋์๊ฑด์ง ๊ถ๊ธ์ฆ์ด ๋ค์๊ณ , ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ง๋ง ๊ฒฐํจ์ด ์ ์(?) ์ฝ๋๋ฅผ ์์ฑํ์๋ ์๊ฐ์ด ๋ค์๋ค.
์ค๋์ ์ถ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ด ์๊ณ ์์ง ํ์ง ์์๋๋ฐ, ์ฌ์ด ๋ฌธ์ ๋ค์ด์ง๋ง ์ด ๋๊ฐ์ง๋ฅผ ์๊ฐํ๋ฉด์ ํ๋ ค๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.