์ค์ํํธ๋ก ๊ตฌํํ๋ ์๋ฃ๊ตฌ์กฐ 6: ์ฐ์ ์์ ํ(Priority Queue)
์ฐ์ ์์ ํ(Priority Queue)
์ฐ์ ์์ ํ๋ ํ์ ์ด์ฉํด์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ์๋ ์์๋ฅผ ํญ์ ์ ์ผ ์ฒ์์ ์์น์ํค๋ ํน๋ณํ ํ์ ๋๋ค. ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ์์๊ฐ ํ์์ ์ ๊ฑฐ๋๋ฉด ๊ทธ ๋ค์ ์ฐ์ ์์์ ์๋ ์์๊ฐ ํ์ ์ฒซ ์์๋ก ์ด๋ํฉ๋๋ค.
์ฌ์ค ์ฐ์ ์์ ํ๋ ํ์ด ์ ๋ถ์ธ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ํ์ ์์ง ๋ชจ๋ฅด์ ๋ค๋ฉด ์๋ ํฌ์คํธ๋ฅผ ๋จผ์ ์ฝ์ด์ฃผ์ธ์!
์ฐ์ ์์ ์ค์
์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ฐ์ ์์๋ฅผ ์ ํ ์ง ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
init(_ elements: [T] = [], _ sort: @escaping (T, T) -> Bool) {
heap = Heap(elements: elements, sortFunction: sort)
}
์ด ๋๋ฌธ์ ์ด๋ ๊ฒ ์์ฑ์์ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ Bool ๊ฐ์ ๋ฐํํ๋ ํด๋ก์ ๋ฅผ ๋ฐ์์ฃผ์ด์ผ ํฉ๋๋ค. ์ค์ํํธ์์ ๋ฑํธ์ฐ์ฐ๋ ์ญ์ ํจ์์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
var pq = PriorityQueue(<)
์ฝ์ (push) - O(logN)
์ฐ์ ์์ ํ์ ์ฝ์ ์ ํ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ํ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ฉด ์ด์งํธ๋ฆฌ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ ธ๋๋ฅผ ๋ถ์ด๊ณ ๋ถ๋ชจ๋ ธ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ์์ ๋๊น์ง ๋ถ๋ชจ๋ ธ๋์์ ๊ตํ์ ๊ณ์ ๋ฐ๋ณตํ๋ฉด์ ํธ๋ฆฌ๋ฅผ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ์ต๋๋ค.
๋ฐ๋ผ์ ํ์ ์ฝ์ ๊ณผ ๋์ผํ ์๊ฐ๋ณต์ก๋์ธ O(logN)์ด ์๊ตฌ๋ฉ๋๋ค.
mutating func push(_ element: T) {
heap.insert(node: element)
}
์ญ์ (pop) - O(logN)
์ฐ์ ์์ ํ์ ์ญ์ ์ฐ์ฐ ์ญ์๋ ํ์ ์ญ์ ์ฐ์ฐ๊ณผ ๋์ผํฉ๋๋ค. ์ด๋ค ํน์ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ํ์ฉ๋์ง ์๊ณ , ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ๋ฃจํธ๋ ธ๋๋ฅผ ์ญ์ ํด ๋ฐํํฉ๋๋ค. ํ์์ ๋ฃจํธ๋ ธ๋๋ฅผ ์ฌ์ ํ๋ ๊ฒ์ ๋ฃจํธ ๋ ธ๋์ ๋ง์ง๋ง ๋ฆฌํ๋ ธ๋์ ๊ฐ์ ๊ตํํ ๋ค์ ๋ฆฌํ๋ ธ๋๋ฅผ ์ ๊ฑฐํด ๋ฐํํ๊ณ ๋ฃจํธ๋ ธ๋๋ถํฐ ํ์ ์ฌ์กฐ์ ํด์ฃผ๋ ๊ฒ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
๋ฐ๋ผ์ ํ์ ์ญ์ ์ ๋์ผํ ์๊ฐ๋ณต์ก๋์ธ O(logN)์ด ์๊ตฌ๋ฉ๋๋ค.
mutating func pop() -> T? {
return heap.remove()
}
์ ์ฒด ์ฝ๋
์๋ฃ๊ตฌ์กฐ ์๋ฆฌ์ฆ์ ์ฝ๋๋ค์ ์ด ๋ ํฌ์์ ๋ชจ๋ ํ์ธํ ์ ์์ด์!
'๐ฎ ์จ-์์ค > ๐ฆด ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote