ν(Heap)
0. μμ½
μ΅μ ν ꡬννκΈ°
1. κ°μ
μμ μ΄μ§ νΈλ¦¬μ μΌμ’ μΈ νμ λν΄ μ 리νλ€.
μ°Έκ³ ν λ§ν μ½λ© ν μ€νΈ λ¬Έμ
2. μ°μ μμ νλ?
νμ λν΄ μ΄ν΄λ³΄κΈ° μ μ°μ μμ νμ λν΄ λ¨Όμ μ΄ν΄λ³΄μ. μ°μ μμ νμ λ¨Όμ μ΄ν΄λ³΄λ μ΄μ λ νμ΄ μ°μ μμ νλ₯Ό ꡬννκΈ° μν΄ κ³ μλ μμ μ΄μ§ νΈλ¦¬ ννμ μλ£κ΅¬μ‘°μ΄κΈ° λλ¬Έμ΄λ€.
ν(Queue): λ¨Όμ λ€μ΄μ€λ λ°μ΄ν°κ° λ¨Όμ λκ°λ FIFO νμμ μλ£κ΅¬μ‘°
μ°μ μμ ν(Priority Queue): λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° μλλΌ, μ°μ μμκ° λμ λ°μ΄ν°κ° λ¨Όμ λκ°
μ£Όμ ν΄μΌν μ μ μ°μ μμ νλ μλ£κ΅¬μ‘°κ° μλ κ°λ μ΄λΌλ κ²μ΄λ€. λν μ°μ μμ νκ° νμ΄λΌλ κ²λ μλλ€. μ¦, μ°μ μμ νλΌλ κ°λ μ μ μ©νκΈ° μν΄ ν μλ£κ΅¬μ‘°λ₯Ό μ¬μ©νλ€λ κ²μΌλ‘ μ΄ν΄νλλ‘ νμ.
μ°μ μμ νλ λ°°μ΄, μ°κ²° 리μ€νΈ, νμΌλ‘ ꡬνμ΄ κ°λ₯νλ€. μ΄ μ€ νμΌλ‘ ꡬννλ κ²μ΄ κ°μ₯ ν¨μ¨μ μ΄λ€.
μ°μ μμ νμ μ¬μ© μ¬λ‘λ μλμ κ°λ€.
μλ¬Όλ μ΄μ μμ€ν
λ€νΈμν¬ νΈλν½ μ μ΄
μ΄μ 체μ μμμ μμ μ€μΌμ₯΄λ§
3. νμ΄λ?
μμ μ΄μ§ νΈλ¦¬μ μΌμ’
μ¬λ¬ κ° μ€, μ΅λκ°κ³Ό μ΅μκ°μ λΉ λ₯΄κ² μ°Ύμλ΄λλ‘ λ§λ€μ΄μ§ μλ£κ΅¬μ‘°
μΌμ’ μ λ°μ λ ¬ μν(λμ¨ν μ λ ¬ μν)λ₯Ό μ μ§
ν° κ°μ΄ μμ λ 벨μ μκ³ μμ κ°μ΄ νμ λ 벨μ μλ€λ μ λ
μ€λ³΅λ κ°μ νμ©(μ΄μ§ νμ νΈλ¦¬μμλ μ€λ³΅λ κ°μ νμ©νμ§ μμ)
4. νμ μ’
λ₯
μ΅λ ν(max heap)
λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ ν¬κ±°λ κ°μ μμ μ΄μ§ νΈλ¦¬
μ΅μ ν(min heap)
λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ μκ±°λ κ°μ μμ μ΄μ§ νΈλ¦¬
5. ν ꡬννκΈ°
νμ ꡬν νκΈ° μ λͺ κ°μ§ μ¬νμ μ§κ³ λμ΄κ°μ.
νμ μ μ₯νλ νμ€μ μΈ μλ£κ΅¬μ‘°λ‘ λ°°μ΄μ μ΄μ©νλ€.
ꡬνμ μ½κ² νκΈ° μν΄ λ°°μ΄μ 첫 λ²μ§Έ μΈλ±μ€μΈ 0μ μ¬μ©λμ§ μλλ€.
νΉμ μμΉμ λ Έλ λ²νΈλ μλ‘μ΄ λ Έλκ° μΆκ°λμ΄λ λ³νμ§ μλλ€.
λΆλͺ¨ λ Έλμ μμ λ Έλμ κ΄κ³
μΌμͺ½ μμμ μΈλ±μ€ = (λΆλͺ¨μ μΈλ±μ€) * 2
μ€λ₯Έμͺ½ μμμ μΈλ±μ€ = (λΆλͺ¨μ μΈλ±μ€) * 2 + 1
λΆλͺ¨μ μΈλ±μ€ = Math.floor(μμμ μΈλ±μ€ / 2)
μμ λ΄μ©μ λ°νμΌλ‘ μ΅μ νμ ꡬννλ€.
5-1. νμ κΈ°λ³Έ ꡬ쑰
this.heap
μ λ°°μ΄λ‘ μ΄μ©νμ¬ μ μΈμ νκ³ μ²« λ²μ§Έ μμλ null
λ‘ μ μ₯νλ€.
5-2. νμ μμ μΆκ°νκΈ°
μ΅μ νμ λΆλͺ¨ λ Έλκ° μ μΌ μμμΌ νλ€. νμ¬ λ Έλμ λΆλͺ¨ λ Έλμ κ°μ λΉκ΅νμ¬ λΆλͺ¨ λ Έλμ κ°μ΄ ν¬λ€λ©΄ κ·Έ λμ μλ‘ λ°κΎΈμ΄ μ€λ€.
λ§μ½ νμ¬ λ Έλμ μΈλ±μ€κ° 1μ΄κ±°λ νμ¬ λ Έλκ° λΆλͺ¨ λ Έλ λ³΄λ€ κ°μ΄ μλ€λ©΄ λ°λ³΅λ¬Έ λ μ΄μ μ€νλμ§ μλλ€.
5-3. νμ μμ μ κ±°νκΈ°
κ°μ₯ μμ μμλ νμ
this.heap[1]
μ μμΉνλ€. μ΄λ₯Όvalue
μ ν λΉνλ€.κ°μ λ¨Όμ ν΄μΌ ν κ³Όμ μ λ°°μ΄μ
this.heap
μ λ§μ§λ§ μμλ₯Όroot
μμΉμ λ°°μΉνλ κ²μ΄λ€.루νΈλ§ μλ μν©
μμμ μ΄λ μμ΄ λ°λ‘
value
λ₯Ό λ°ννλ€.
μΌμͺ½ μμ νλλ§ μλ μν©
μΌμͺ½ μμμ κ°κ³Ό νμ¬ μΈλ±μ€μ κ°μ λΉκ΅νμ¬ μΌμͺ½ μμμ κ°μ΄ λ μμΌλ©΄ λ κ°μ κ°μ μλ‘ λ°κΎΌλ€.
μΌμͺ½ μμκ³Ό μ€λ₯Έμͺ½ μμμ΄ λͺ¨λ μλ κ²½μ°
μλμ λ°λ³΅λ¬Έμ μ€ννλ€.
μΌμͺ½ μμκ³Ό μ€λ₯Έμͺ½ μμμ κ° μ€ νλλΌλ νμ¬ μΈλ±μ€μ κ° λ³΄λ€ μμΌλ©΄ λ°λ³΅λ¬Έμ κ³μ μ€νλλ€. μ¦, λΆλͺ¨μ κ°μ΄ μμλ€μ κ° λ³΄λ€ μμμ ΈμΌ λ°λ³΅λ¬Έμ μ’ λ£λλ€.
μΌμͺ½ μμκ³Ό μ€λ₯Έμͺ½ μμμ κ°μ λΉκ΅νμ¬ λ μμ κ°μ κ°μ§λ μΈλ±μ€λ₯Ό
min_index
μ ν λΉνλ€. μ΄λ μ€λ₯Έμͺ½ μμμ κ°μ΄ μλ€λ©΄ λΉκ΅ κ°μ νμfalse
κ° λλ―λ‘ μ΄μ μ μ μν΄μΌ νλ€.λΆλͺ¨μ κ°κ³Ό μμμ κ°(λ μμ)μ λΉκ΅νμ¬ λΆλͺ¨μ κ° λ³΄λ€ μμμ κ°μ΄ λ μμΌλ©΄ λ κ°μ κ°μ μλ‘ λ°κΎΌλ€.
λ€μ λΉκ΅λ₯Ό μν΄ κ°κ°μ κ°λ€μ λ°κΎΌλ€.
6. Conclusion
μ΄λ² νμ μμλ₯Ό μ κ±°νλ κ³Όμ μ μ 리νλ©΄μ ν΄λΉ μκ³ λ¦¬μ¦μ μ¬μ©ν΄ νΈλ¦¬μ μμλ₯Ό μμ νλ κ²λ κ°λ₯νμ§ μμκΉλΌλ μκ°μ νμλ€. μ§κΈκΉμ§ λ΄€λ μλ£κ΅¬μ‘° μ€ κ°μ₯ λ©μλκ° κΈΈμλ κ² κ°λ€. νΉν μμμ μμ κ° κΈΈμλλ° μ κΈ°ν κ²μ λ°°μ΄, μ°κ²° 리μ€νΈλ₯Ό μ¬μ©νμ¬ μ°μ μμ νλ₯Ό ꡬννλ κ²λ³΄λ€ νμΌλ‘ ꡬννλ κ²μ΄ μκ° λ³΅μ‘λ μΈ‘λ©΄μμ ν¨μ¨μ μΈ λ©΄μ 보μΈλ€λ κ²μ΄λ€. μ½λμ μμ μ€μνμ§ μκ³ μΌλ§λ ν¨μ¨μ μΌλ‘ μμλ₯Ό μΆκ°, μμ νλ λ°μ μλ€λ κ²μ κΉ¨λ«κ² λμλ€. κ³Όμ° μ΄λ° ν μλ£κ΅¬μ‘°κ° μ½λ© ν μ€νΈ λ¬Έμ μμ μ΄λ»κ² μ μ©μ΄ λμλμ§ κΆκΈνλ€.
μ°Έκ³
[μλ£κ΅¬μ‘°] ν(heap)μ΄λ [μλ£κ΅¬μ‘°] μ°μ μμ νμ ν (Priority Queue & Heap) [μλ£κ΅¬μ‘°] JSλ‘ κ΅¬ννλ HEAP
π 2022-09-12
Last updated