μ΄ κΈμ κ°μΈμ μΈ κ³΅λΆλ₯Ό μν΄ μμ±λ κΈμμ λ°νλλ€.
μ΄ κΈμ λͺ¨λ μΆμ²λ https://jeonyeohun.tistory.com/327 μ΄κ³³μ μμ΅λλ€.
μ°μ μμ ν(Priority Queue)
νμ μ΄μ©ν΄μ κ°μ₯ λμ μ°μ μμμ μλ μμλ₯Ό νμ μ μΌ μ²μμ μμΉμν€λ νΉλ³ν ν
κ°μ₯ μ°μ μμκ° λμ μμκ° νμμ μ κ±°λλ©΄ κ·Έ λ€μ μ°μ μμμ μλ μμκ° νμ 첫 μμλ‘ μ΄λν©λλ€.
νμ λν μ€λͺ μ https://jerry311.tistory.com/55 μ μμ΅λλ€.
μ°μ μμ μ€μ
μ°μ μμ νλ₯Ό μ¬μ©νλ €λ©΄ μ΄λ€ κΈ°μ€μΌλ‘ μ°μ μμλ₯Ό μ ν μ§ μ§μ ν΄μ£Όμ΄μΌ ν©λλ€.
μ§μ
init(_ elements: [T] = [], _ sort: @escaping (T, T) -> Bool) {
heap = Heap(elements: elements, sortFunction: sort)
}
μ΄ λλ¬Έμ μμ±μμ 2κ°μ μΈμλ₯Ό λ°μ Bool κ°μ λ°ννλ ν΄λ‘μ λ₯Ό λ°μμ£Όμ΄μΌ ν©λλ€.
Swiftμμ λ±νΈμ°μ°λ ν¨μμ΄κΈ° λλ¬Έμ μλμ²λΌ μ¬μ©ν μ μμ΅λλ€.
μ¬μ©
var pq = PriorityQueue(<)
μ½μ (push) - O(logN)
μ°μ μμ νμ μ½μ μ νμ μλ‘μ΄ λ Έλλ₯Ό μ½μ νλ κ²κ³Ό λμΌν©λλ€.
νμ μλ‘μ΄ λ Έλλ₯Ό μ½μ νλ©΄ μ΄μ§νΈλ¦¬μ κ°μ₯ λ§μ§λ§ λ Έλλ₯Ό λΆμ΄κ³ λΆλͺ¨λ Έλλ³΄λ€ μ°μ μμκ° μμ λκΉμ§ λΆλͺ¨λ Έλμμ κ΅νμ κ³μ λ°λ³΅νλ©΄μ νΈλ¦¬λ₯Ό κ±°μ¬λ¬ μ¬λΌκ°λ κ³Όμ μ κ±°μ³μΌνμ΅λλ€.
λ°λΌμ νμ μ½μ κ³Ό λμΌν μκ°λ³΅μ‘λμΈ O(logN)μ΄ μꡬλ©λλ€.
mutating func push(_ element: T) {
heap.insert(node: element)
}
μμ (pop) - O(logN)
μ°μ μμ νμ μμ μ°μ° μμλ νμ μμ μ°μ°κ³Ό λμΌν©λλ€.
μ΄λ€ νΉμ μμλ₯Ό μμ νλ κ²μ νμ©λμ§ μκ³ , κ°μ₯ μ°μ μμκ° λμ 루νΈλ Έλλ₯Ό μμ ν΄ λ°νν©λλ€.
νμμ 루νΈλ Έλλ₯Ό μμ νλ κ²μ 루νΈλ Έλμ λ§μ§λ§ 리νλ Έλμ κ°μ κ΅νν λ€μ 리νλ Έλλ₯Ό μ κ±°ν΄ λ°ννκ³ λ£¨νΈλ Έλλ‘λΆν° νμ μ¬μ‘°μ ν΄μ£Όλ κ²μΌλ‘ μ΄λ£¨μ΄μ§λλ€.
λ°λΌμ νμ μμ μ λμΌν μκ°λ³΅μ‘λμΈ O(logN)μ΄ μꡬλ©λλ€.
μ 체 μ½λ
struct PriorityQueue<T: Comparable> {
var heap: Heap<T>
init(_ elements: [T] = [], _ sort: @escaping (T, T) -> Bool) {
heap = Heap(elements: elements, sortFunction: sort)
}
var count : Int {
return heap.count
}
var isEmpty : Bool {
return heap.isEmpty
}
func top () -> T? {
return heap.peek
}
mutating func clear () {
while !heap.isEmpty {
_ = heap.remove()
}
}
mutating func pop() -> T? {
return heap.remove()
}
mutating func push(_ element: T) {
heap.insert(node: element)
}
}
'π» CS > μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] ν(Heap) ꡬνν΄λ³΄κΈ° (0) | 2023.04.11 |
---|---|
[Swift] κ·Έλν(Graph) (0) | 2023.03.29 |
[Swift] λ± κ΅¬νν΄λ³΄κΈ° (0) | 2023.03.29 |
[Swift] μ€ν ꡬνν΄λ³΄κΈ° (0) | 2023.03.29 |
[Swift] ν(Queue) ꡬννκΈ° (0) | 2023.03.24 |