π‘ 1. μ°μ μμ ν(Priority Queue)λ?
μ°μ 'ν'λ μ μ μ μΆμ ꡬ쑰λ₯Ό κ°μ§ μ ν μλ£κ΅¬μ‘°μ΄λ€. νμ λ€μ΄μ¨ μμλ₯Ό μ°μ μμλ‘ κ°λ νμΈ κ²μ΄λ€.
μ°μ μμ νλ μΌλ°μ μΌλ‘ λ¨Όμ λ€μ΄μ¨ μμλλ‘ λΉ μ Έλμ€λ κ²μ΄ μλλΌ, ν λ΄λΆμ μμ μ€ κ°μ₯ μ°μ μμκ° κ°μ₯ λμ μμλΆν° λΉ μ Έ λμ€λ νλ₯Ό μλ―Ένλ€.
π‘ 2. μ°μ μμ νλ₯Ό ꡬννλ λ°©λ²
μ°μ μμ νλ₯Ό ꡬννλ λ°©λ²μ μΈ κ°μ§μ΄λ€.
κ°κ° λ°°μ΄(Array)
, μ°κ²°λ¦¬μ€νΈ(LinkedList)
, ν(Heap)
μ μ¬μ©νλ λ°©λ²μΈλ° κ·Έ μ€ μΌλ°μ μΌλ‘ μ°μ μμ νλ₯Ό ꡬννλ λ°©λ²μ Heap
μ μ¬μ©νλ λ°©μμ΄λ€. μ μ°μ μμ νλ₯Ό ꡬνν λ Heap
μ μ¬μ©νλ μ§λ λ°λ‘ μκ°λ³΅μ‘λμ μλ€.
λ€μμ κ°κ°μ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©ν΄ μ°μ μμ νλ₯Ό ꡬννλ λ°©λ²μ΄λ€.
1) λ°°μ΄(Array)
λ₯Ό μ΄μ©ν΄μ μ°μ μμ νλ₯Ό λ§λ€κΈ°.
λ°°μ΄λ‘ μ°μ μμ νλ₯Ό λ§λλ λ°©λ²μ, μ λ ¬λ λ°°μ΄μ μ΄μ©νλ λ°©λ² / μ λ ¬λμ§ μμ λ°°μ΄μ μ΄μ©νλ λ°©λ² 2κ°μ§μ΄λ€.
νλ κΈ°λ³Έμ μΌλ‘ μ½μ κ³Ό μμ μ°μ°μ΄ μμΌλ―λ‘, μ΄ λ κ°μ§ μ°μ°μ μ΄λ»κ² λ§λ€ μ μμμ§ μκ°ν΄λ³΄μ.
- μ λ ¬λ λ°°μ΄λ‘ μ°μ μμ ν λ§λ€κΈ° (μ°μ μμλ₯Ό keyκ°μΌλ‘ μ λ ¬λ λ°°μ΄)
μμ μ κ²½μ°, μ°μ μμ μμλλ‘ μ λ ¬μ΄ λμ΄ μμΌλ―λ‘, κ°μ₯ μμ μμλ₯Ό return νλ©΄ λλ€. λ°λΌμ μμ μ μκ°λ³΅μ‘λλO(1)
μ½μ μ κ²½μ°, μ½μ ν μμμ μ°μ μμκ° μ΄λ μμΉμ λ€μ΄κ°μΌ νλμ§ μμ νλνλ λΉκ΅ν΄μ μ°ΎμμΌ νλ―λ‘, μ΅μ μ κ²½μ° λ°°μ΄μ κΈΈμ΄μΈ Nλ§νΌμ μ°μ°μ΄ νμνλ€. λ°λΌμ μ½μ μ μκ°λ³΅μ‘λλO(N)
- μ λ ¬λμ§ μμ λ°°μ΄λ‘ μ°μ μμ ν λ§λ€κΈ°
μμ μ κ²½μ°, λ°°μ΄ λ΄λΆλ μ λ ¬λμ΄ μμ§ μκΈ° λλ¬Έμ λ°°μ΄ λ΄λΆμ λͺ¨λ μμλ₯Ό λΉκ΅ν΄ κ°μ₯ λμ μ°μ μμμ κ°μ μ°Ύμ μ κ±°ν΄μΌ νλ€. 무쑰건 Nλ²μ μ°μ°μ κ±°μ³μΌ νλ―λ‘ μμ μ μκ°λ³΅μ‘λλO(N)
μ ν΄λΉνλ€.
μ½μ μ κ²½μ°, λ°°μ΄ λ΄λΆλ μ λ ¬λμ΄ μμ§ μκΈ° λλ¬Έμ, λ³λ€λ₯Έ κ·μΉ μμ΄ λ°°μ΄μ λ λΆλΆμ μμλ₯Ό μ½μ νλ©΄ λλ€. λ°λΌμ μ½μ μ μκ° λ³΅μ‘λλO(1)
μ΄λ€.
2) μ°κ²°λ¦¬μ€νΈ(LinkedList)
λ₯Ό μ΄μ©ν΄μ μ°μ μμ νλ₯Ό λ§λ€κΈ°.
μ°κ²°λ¦¬μ€νΈλ‘ μ°μ μμ νλ₯Ό λ§λλ λ°©λ² μμ, μ λ ¬λ μ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©νλ λ°©λ² / μ λ ¬λμ§ μμ μ°κ²°λ¦¬μ€νΈλ₯Ό μ΄μ©νλ λ°©λ² 2κ°μ§μ΄λ€.
λ§μ°¬κ°μ§λ‘ μ½μ κ³Ό μμ μ°μ°μ μ΄λ»κ² λ§λ€ μ μμμ§ μκ°ν΄λ³΄μ.
- μ λ ¬λ μ°κ²°λ¦¬μ€νΈλ‘ μ°μ μμ ν λ§λ€κΈ°
μμ μ κ²½μ°, λ°°μ΄κ³Ό λμΌνκ² κ°μ₯ μμ μμλ₯Ό μ κ±°νλ©΄ λλ€.O(1)
μ½μ μ κ²½μ°, λ°°μ΄κ³Ό λμΌνκ² μ½μ νκ³ μ νλ μμκ° μ΄λ μ리μ λ€μ΄κ°μΌ νλμ§ μ°κ²°λ¦¬μ€νΈ λ΄λΆμ μμλ₯Ό μ§λκ°λ©° νμν΄μΌ νλ€. μ΅μ μ κ²½μ° Nκ°μ μμλ₯Ό λͺ¨λ νμν΄μΌ νκΈ° λλ¬Έμ worst caseμ κ²½μ°O(N)
λ°°μ΄κ³Ό μ·ν μκ°λ³΅μ‘λλ₯Ό κ°μ§λ, μ°κ²°λ¦¬μ€νΈμ νΉμ±μ λ°°μ΄λ³΄λ€ μμ μ μ½μ μ μ°μ°μ΄ λ¨μνκΈ° λλ¬Έμ λ°°μ΄λ³΄λ€λ μ 리νλ€.
- μ λ ¬λμ§ μμ μ°κ²°λ¦¬μ€νΈλ‘ μ°μ μμ ν λ§λ€κΈ°
μμ μ κ²½μ°, λ°°μ΄κ³Ό λμΌνκ² μμ νκ³ μ νλ μμλ₯Ό μ°κ²°λ¦¬μ€νΈ λ΄λΆλ₯Ό λͺ¨λ νμνλ©° μ°Ύμλ΄μΌ νλ€. λ°λΌμ μκ°λ³΅μ‘λλO(N)
μ΄λ€.
μ½μ μ κ²½μ°, μ°κ²°λ¦¬μ€νΈ λ΄λΆμ μλ¬΄λ° κ·μΉμ΄ μμΌλ―λ‘ κ°μ₯ λ£κΈ° μ¬μ΄ μμΉμΈ μμ μ½μ νλ€. λ°λΌμ μκ°λ³΅μ‘λλO(1)
μ΄λ€.
λ°°μ΄κ³Ό λΉμ·ν μκ°λ³΅μ‘λλ₯Ό κ°μ§λ, μ°κ²°λ¦¬μ€νΈμ νΉμ±μ λ°°μ΄λ³΄λ€ μμ μ μ½μ μ μ°μ°μ΄ λ¨μνκΈ° λλ¬Έμ λ°°μ΄λ³΄λ€λ μ 리νλ€.
3) ν(Heap)
μ μ΄μ©ν΄μ μ°μ μμ νλ₯Ό λ§λ€κΈ°
νμ΄ λκΈ° μν 쑰건μ 2κ°μ§μ΄λ€. μμ μ΄μ§νΈλ¦¬μ ꡬ쑰λ₯Ό κ°μ§λ©°, λΆλͺ¨λ Έλμ μμ λ Έλκ°μ 'ν¬κ±°λ κ°μ' νΉμ 'μκ±°λ κ°μ'μ κ·μΉμ κ°μ§κ³ μμ΄μΌ νλ€. μ΄ νμ μ΄μ©ν΄μ μ°μ μμ νλ₯Ό λ§λλ λ°©λ²μ λν΄ μ΄ν΄λ³΄μ.
μμ μ½μ κ³Ό μμ μ κ΄μ μμ νμΈν΄λ³΄λλ‘ νμ.
- HeapμΌλ‘ μ°μ μμ ν λ§λ€κΈ°
μ°μ , μμ νμ΄ λκΈ° μν 쑰건μ λΆλͺ¨λ Έλμ μμ λ Έλκ°μ 'ν¬κ±°λ κ°μ' νΉμ 'μκ±°λ κ°μ'μ κ·μΉμ κ°μ§κ³ μμ΄μΌ λλ€.
λ°λΌμ μ°μ μμκ° κ°μ₯ ν° κ°μ΄ μ€λλ‘ νμ΄ κ΅¬μ±λμ΄ μλ€λ©΄, 루νΈλ Έλμ μλ κ°μ 리ν΄νκ³ , νΈλ¦¬μμ ν΄λΉ λ Έλλ₯Ό μμ νκ³ , λ€μ νμΌλ‘ λ§λ€λ©΄ μμ μ°μ°μ΄ λλ€.
μμ μ°μ° μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°λ€.
1) 루νΈλ Έλμ κ°μ 리ν΄νλ€. (O(1))
2) κ°μ₯ λ§μ§λ§ μΈλ±μ€λ₯Ό κ°μ§ λ Έλλ₯Ό 루νΈλ Έλ μ리μ μμΉμν¨λ€. (O(1))
3) 루νΈλ Έλμ λ μμ λ Έλλ₯Ό λΉκ΅νλ€. λ μμλ Έλ μ€ λΆλͺ¨λ Έλλ³΄λ€ μ°μ μμκ° ν° λ Έλκ° μλ€λ©΄ κ°μ₯ μ°μ μμκ° ν° λ Έλμ μ리λ₯Ό λ³κ²½νλ€. μ리λ₯Ό λ³κ²½ν ν, λ³κ²½ν νμ μμκ³Όλ κ³μ λΉκ΅νλ€. μμλ³΄λ€ μ°μ μμκ° ν¬λ€λ©΄ μ΄ λ°λ³΅μ μ€λ¨νλ€. (O(logN))
μ¬κΈ°μ 3λ²μ κ²½μ°, νΈλ¦¬μ λμ΄ λ§νΌ μ°μ°μ΄ μ§νλκ³ νμ 'μμ μ΄μ§νΈλ¦¬'λΌκ³ νμΌλ―λ‘ worst caseμΈ κ²½μ° λ°μ΄ 2μΈ logNλ²μ μ°μ°μ μννλ€. λ°λΌμ 1~3λ²μ μμλλ‘ μ°μ°μ μ§ννμ λ μμ μ°μ°μ worst caseλO(logN)
μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€.
μ½μ μ°μ° μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°λ€.
1) κ°μ₯ λ§μ§λ§ μΈλ±μ€ λ€μ μΈλ±μ€μ μ½μ νκ³ μ νλ λ Έλλ₯Ό λ£λλ€. (O(1))
2) ν΄λΉ κ°κ³Ό λΆλͺ¨λ Έλμ μ°μ μμλ₯Ό λΉκ΅νλ€. ν΄λΉ κ°(μμλ Έλ)μ΄ λΆλͺ¨λ Έλλ³΄λ€ μ°μ μμκ° λ λλ€λ©΄ μλ‘ μ리λ₯Ό λ³κ²½νλ€. μ리λ₯Ό λ°κΎΌ μ΄νμλ κ·Έ μμ λΆλͺ¨λ Έλμ λΉκ΅νλ©°, λΆλͺ¨λ Έλμ μ°μ μμκ° λ ν΄ λκΉμ§ λ°λ³΅νλ€. (O(logN))
μ½μ μ°μ°λ λ§μ°¬κ°μ§λ‘, worst caseμΈ κ²½μ° μ μΌ λ°μμ 루νΈλ ΈλκΉμ§ μ¬λΌμ¬ μ μμΌλ―λ‘ νΈλ¦¬μ λμ΄λ§νΌ μ°μ°μ΄ λλ€. λ°λΌμ μ½μ μ°μ°λO(logN)
μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€.
4) μκ°λ³΅μ‘λ λΉκ΅ λ° Heap μ ν μ΄μ
μ°μ μμ ν ꡬνμ μ¬μ©ν μλ£κ΅¬μ‘° | worst case μ½μ μ°μ° | worst case μμ |
μ λ ¬λ λ°°μ΄ | O(N) | O(1) |
μ λ ¬λμ§ μμ λ°°μ΄ | O(1) | O(N) |
μ λ ¬λ μ°κ²°λ¦¬μ€νΈ | O(N) | O(1) |
μ λ ¬λμ§ μμ μ°κ²°λ¦¬μ€νΈ | O(1) | O(N) |
Heap μλ£κ΅¬μ‘° | O(logN) | O(logN) |
λ€λ₯Έ μκ³ λ¦¬μ¦μ μ½μ κ³Ό μμ μ°μ°μ΄ O(1), O(N)μΌλ‘ λ μ°μ°κ° μκ°λ³΅μ‘λ νΈμ°¨κ° ν¬λ€.
λ°λ©΄ νμΌλ‘ ꡬνν μ°μ μμ νλ, μ½μ κ³Ό μμ μ°μ° λͺ¨λ νΈλ¦¬μ λμ΄μ λ°λΌ κ²°μ λλ O(logN)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
μκ°λ³΅μ‘λ νΈμ°¨κ° ν¬λ©΄ μμμ μκ³Ό μ°μ°μ μμ΄ λμ΄λ μλ‘ μ°μ° μκ°μ΄ μ€λκ±Έλ¦°λ€.
λ°°μ΄/μ°κ²°λ¦¬μ€νΈμ κ²½μ° λμΌν νμμ μ½μ κ³Ό μμ λ₯Ό νλ©΄ kN + kλ², νμ μ¬μ©ν κ²½μ°μ 2*klogNλ² μ°μ°μ΄ μ§νλλ€.
Nμ κΈ°μΈκΈ°λ logNμ κΈ°μΈκΈ°λ³΄λ€ ν¨μ¬ κ°νλ₯΄κΈ° λλ¬Έμ μμμ μμ΄ λμ΄λλ€λ©΄ μκ°μ΄ ν¨μ¬ λ λ§μ΄ μμλκ² λλ€.
λ°λΌμ μ½μ
κ³Ό μμ λͺ¨λ O(logN)
μ μκ°λ³΅μ‘λκ° λ³΄μ₯λ νμ μ¬μ©νλ κ²μ΄ μ°μ μμ νλ₯Ό ꡬνν λ λ μ 리νλ€.
+ Heapμ λν μμΈν λ΄μ©μ μΆν ν¬μ€ν νλλ‘ νκ² μ΅λλ€.