[μλ£κ΅¬μ‘°] νΈλ¦¬(Tree)μ μ°μ μμ ν(Priority Queue)
2024. 10. 27. 11:44γμλ£κ΅¬μ‘°
728x90
π νΈλ¦¬(Tree)
- νΈλ¦¬λ κ°κ³λμ κ°μ΄ κ³μΈ΅μ μΈ κ΅¬μ‘°λ₯Ό ννν λ μ¬μ©ν μ μλ μλ£κ΅¬μ‘°
- λ무(tree)μ ννλ₯Ό λ€μ§μ κ²κ³Ό κ°μ΄ μκΉ
- λ£¨νΈ λ Έλ (root node) : λΆλͺ¨κ° μλ μ΅μμ λ Έλ
- λ¨λ§ λ Έλ (leaf node): μμμ΄ μλ λ Έλ
- νΈλ¦¬μμλ λΆλͺ¨μ μμ κ΄κ³κ° μ±λ¦½νλ€.
- νμ κ΄κ³: 5 κ°μ κ°μ§λ λ Έλμ 23 κ°μ κ°μ§λ λ Έλμ¬μ΄μ κ΄κ³
- κΉμ΄(depth): λ£¨νΈ λ Έλμμμ κΈΈμ΄(length)
- μ΄λ κΈΈμ΄λ μΆλ° λ Έλμμ λͺ©μ μ§ λ ΈλκΉμ§ κ±°μ³μΌ νλ κ°μ μ μλ₯Ό μλ―Έ
- νΈλ¦¬μ λμ΄(height)λ λ£¨νΈ λ Έλμμ κ°μ₯ κΉμ λ ΈλκΉμ§μ κΈΈμ΄λ₯Ό μλ―Έ
π μ΄μ§ νΈλ¦¬(Binary Tree)
- μ΄μ§ νΈλ¦¬λ μ΅λ 2κ°μ μμμ κ°μ§ μ μλ νΈλ¦¬λ₯Ό λ§ν¨
π μ°μ μμ ν(Priority Queue)
- μ°μ μμμ λ°λΌμ λ°μ΄ν°λ₯Ό μΆμΆνλ μλ£κ΅¬μ‘°
- μ°μ μμ νλ μΌλ°μ μΌλ‘ ν(heap)μ μ΄μ©ν΄ ꡬν
- μ»΄ν¨ν° μ΄μ체μ , μ¨λΌμ κ²μ λ§€μΉ λ±μμ νμ©
μλ£κ΅¬μ‘° | μΆμΆλλ λ°μ΄ν° |
μ€ν(Stack) | κ°μ₯ λμ€μ μ½μ λ λ°μ΄ν° |
ν(Queue) | κ°μ₯ λ¨Όμ μ½μ λ λ°μ΄ν° |
μ°μ μμ ν(Priority queue) | κ°μ₯ μ°μ μμκ° λμ λ°μ΄ν° |
- μ°μ μμ νλ λ€μν λ°©λ²μΌλ‘ ꡬν κ°λ₯
μ°μ μμ ν ꡬνλ°©μ | μ½μ μκ° | μμ μκ° |
리μ€νΈ μλ£ν | O(1) | O(N) |
ν (Heap) | O(log N) | O(log N) |
- μΌλ°μ μΈ ννμ νλ μ νμ μΈ κ΅¬μ‘°
- λ°λ©΄μ μ°μ μμ νλ μ΄μ§νΈλ¦¬ (binary queue)ꡬ쑰λ₯Ό μ¬μ©ν¨ (λΉμ νμ μΈ μλ£κ΅¬μ‘°)
π ν¬ν μ΄μ§ νΈλ¦¬(Full Binary Tree)
- ν¬ν μ΄μ§ νΈλ¦¬λ 리ν λ Έλλ₯Ό μ μΈν λͺ¨λ λ Έλκ° λ μμμ κ°μ§κ³ μλ νΈλ¦¬
π μμ μ΄μ§ νΈλ¦¬(Complete Binary Tree)
- μμ μ΄μ§ νΈλ¦¬λ λͺ¨λ λ Έλκ° μΌμͺ½ μμλΆν° μ°¨κ·Όμ°¨κ·Ό μ±μμ§ νΈλ¦¬
π λμ΄ κ· ν νΈλ¦¬(Height Balanced Tree)
- μΌμͺ½ μμ νΈλ¦¬μ μ€λ₯Έμͺ½ μμ νΈλ¦¬μ λμ΄κ° 1 μ΄μ μ°¨μ΄ λμ§ μλ νΈλ¦¬
π ν (Heap)
- νμ μμλ€ μ€μμ μ΅λκ° νΉμ μ΅μκ°μ λΉ λ₯΄κ² μ°Ύμλ΄λ μλ£κ΅¬μ‘°
- μ΅λ ν(max heap): κ°μ΄ ν° μμλΆν° μΆμΆ
- μ΅μ ν(min heap): κ°μ΄ μμ μμλΆν° μΆμΆ
- νμ μμμ μ½μ κ³Ό μμ λ₯Ό μν΄ O(log N)μ μνμκ°μ μꡬ
- λ¨μν Nκ°μ λ°μ΄ν°λ₯Ό νμ λ£μλ€κ° λͺ¨λ κΊΌλ΄λ μμ μ μ λ ¬κ³Ό λμΌ - O(NlogN)
π μ΅λ (Max Heap)
- μ΅λ ν(max heap)μ λΆλͺ¨ λ Έλκ° μμ λ Έλλ³΄λ€ κ°μ΄ ν° μμ μ΄μ§ νΈλ¦¬λ₯Ό μλ―Έ
- κ·Έλμ μ΅λ νμ λ£¨νΈ λ Έλλ μ 체 νΈλ¦¬ μ€ κ°μ₯ ν° κ°μ κ°μ§λ€
π ν (Heap)μ νΉμ§
- νμ μμ μ΄μ§ νΈλ¦¬ μλ£κ΅¬μ‘°λ₯Ό λ°λ₯Έλ€
- νμμλ μ°μ μμκ° λμ λ Έλκ° λ£¨νΈ(root)μ μμΉνλ€
- μ΅λ ν(max heap)
- λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ ν¬λ€
- λ£¨νΈ λ Έλκ° κ°μ₯ ν¬λ©°, κ°μ΄ ν° λ°μ΄ν°κ° μ°μ μμλ₯Ό κ°μ§λ€
- μ΅μ ν(min heap)
- λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ μλ€
- λ£¨νΈ λ Έλκ° κ°μ₯ μμΌλ©°,κ°μ΄ μμ λ°μ΄ν°κ° μ°μ μμλ₯Ό κ°μ§λ€
π μ΅μ ν κ΅¬μ± ν¨μ : Heapify
- νμ μλ‘μ΄ μμκ° μ½μ
λ λ
- (μν₯μ) λΆλͺ¨λ‘ κ±°μ¬λ¬ μ¬λΌκ°λ©°, λΆλͺ¨λ³΄λ€ μμ μ΄ λ μμ κ²½μ°μ μμΉλ₯Ό κ΅μ²΄
- μλ‘μ΄ μμκ° μ½μ λμμ λ O(log N)μ μκ° λ³΅μ‘λλ‘ ν μ±μ§μ μ μ§
- νμ μλ‘μ΄ μμκ° μμ λ λ (1)
- μμκ° μ κ±°λμ λ O(log N)μ μκ° λ³΅μ‘λλ‘ ν μ±μ§μ μ μ§ν μ μμ
- μμλ₯Ό μ κ±°ν λλ κ°μ₯ λ§μ§λ§ λ Έλκ° λ£¨νΈ λ Έλμ μμΉμ μ€λλ‘ν¨
- λ£¨νΈ λ Έλλ₯Ό μμ νκ³ λ§μ§λ§ λ Έλκ° λ£¨νΈ λ Έλμ μμΉμ μ΄
- νμ μλ‘μ΄ μμκ° μμ λ λ (2)
- μμκ° μ κ±°λμμ λ ν μ±μ§μ μ μ§νλλ‘ ν¨
- μ΄ν λ£¨νΈ λ Έλμμ νν₯μμΌλ‘(λ μμ μμ λ Έλλ‘) heapify()λ₯Ό μ§νν¨
π ν(Heap)μ νΉμ§
- νμ μ½μ κ³Ό μμ μ°μ°μ μνν λλ₯Ό κ³ λ €ν΄λ³΄μ
- μ§κ΄μ μΌλ‘, κ±°μ¬λ¬ κ° λλ§λ€ μ²λ¦¬ν΄μΌ νλ λ²μμ ν¬ν¨λ μμμ κ°μκ° μ λ°μ© μ€μ΄λ λ€
- λ°λΌμ μ½μ κ³Ό μμ μ λν μκ° λ³΅μ‘λλ O(logN)μ΄λ€
μ°μ μμ ν λΌμ΄λΈλ¬λ¦¬
var PriorityQueue = require('priorityqueuejs');
var queue = new PriorityQueue(function(a, b) {
return a.cash - b.cash;
});
queue.enq({ cash: 250, name: 'Valentina' });
queue.enq({ cash: 300, name: 'Jano' });
queue.enq({ cash: 150, name: 'Fran' });
queue.size(); // 3
queue.peek(); // { cash: 300, name: 'Jano' }
queue.deq(); // { cash: 300, name: 'Jano' }
queue.size(); // 2
https://github.com/ndb796/priorityqueuejs/tree/master
μΆμ²: https://fastcampus.co.kr/dev_online_upjscodingtest
728x90
'μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ£κ΅¬μ‘°] κ·Έλν(Graph)μ νν (0) | 2024.10.27 |
---|---|
[μλ£κ΅¬μ‘°] ν(Queue) (1) | 2024.10.27 |
[μλ£κ΅¬μ‘°] μ€ν(Stack) (0) | 2024.10.27 |
[μλ£κ΅¬μ‘°] λ°°μ΄(Array)κ³Ό 리μ€νΈ(List) (0) | 2024.10.27 |
μλ£κ΅¬μ‘° (0) | 2024.10.25 |