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
n
nodes -> 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 ํจ์๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ ๊น ๋งํ๋ค๊ฐ, ๊ฒฐ๊ตญ์ ๋์น์ฑ๊ณ ํด๊ฒฐํ๋ค.
๊ทธ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ ๊ฒ ๊ตฌํํ๋๊ฒ ๋ ๋์๊ฑด์ง ๊ถ๊ธ์ฆ์ด ๋ค์๊ณ , ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ง๋ง ๊ฒฐํจ์ด ์ ์(?) ์ฝ๋๋ฅผ ์์ฑํ์๋ ์๊ฐ์ด ๋ค์๋ค.
์ค๋์ ์ถ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ด ์๊ณ ์์ง ํ์ง ์์๋๋ฐ, ์ฌ์ด ๋ฌธ์ ๋ค์ด์ง๋ง ์ด ๋๊ฐ์ง๋ฅผ ์๊ฐํ๋ฉด์ ํ๋ ค๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.