๐Ÿ—๏ธ Algorithm/๐Ÿ”ท Python

[Python] ํŒŒ์ด์ฌ ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)

Dbswnstjd 2023. 3. 22. 20:10

์šฐ์„ ์ˆœ์œ„ ํ (Priority Queue)

 

โœ”  ์šฐ์„ ์ˆœ์œ„ ํ?

ํ์™€ ์Šคํƒ์ด๋‚˜ ๋น„์Šทํ•œ ์ž๋ฃŒํ˜•์ด์ง€๋งŒ, ๊ฐ ์›์†Œ๋“ค์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋Š” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋ณด๋‹ค ๋จผ์ € ์ฒ˜๋ฆฌ๋œ๋‹ค. ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค๋ฉด, ๋จผ์ € ๋“ค์–ด์˜จ ์›์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํž™(Heap)์ด๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ตœ์†Œํ•œ ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ์ด ์ง€์›๋˜์–ด์•ผ ํ•œ๋‹ค. 

  • ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜ (Push)
  • ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋ฅผ ํ์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ (Pop)

 

โœ”  ํž™(Heap) ์ด๋ž€?

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree)๋กœ, ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’์ด ํ•ญ์ƒ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜(Max Heap), ์ž‘์•„์•ผ(Min Heap) ํ•œ๋‹ค. ํž™์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, ํž™ ์ •๋ ฌ์„ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ์— ์žˆ๋Š” ๊ฐ’์ด ์ตœ๋Œ€๊ฐ’, ํ˜น์€ ์ตœ์†Œ๊ฐ’์ด๋ฉฐ, ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์˜ ์œ„์น˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์กฐ๊ฑด๋งŒ ๋งž์ถ”๋ฉด ๋œ๋‹ค. 

 

์ตœ๋Œ€ํž™
์ตœ์†Œํž™

 

โœ” ์šฐ์„ ์ˆœ์œ„ ํ์˜ Push

  • ๋งจ ๋ ์œ„์น˜์— ๊ฐ’์„ ์ €์žฅ
  • ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜๋ฉฐ, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ง€ ํ™•์ธ
    • ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์„œ๋กœ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ

โœ”์šฐ์„ ์ˆœ์œ„ ํ์˜ Pop

  • ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฐ’์„ ์‚ญ์ œ
  • ๋งจ ๋์˜ ๋…ธ๋“œ๋ฅผ ๋น„์–ด์žˆ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋Œ์–ด์˜ด
  • ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค๊ณผ ๊ฐ’์„ ๋น„๊ต, ์œ„์น˜ ๋ณ€๊ฒฝ
    • ์œ„์น˜๋ฅผ ๋งŒ์กฑํ•  ๋•Œ๊นŒ์ง€ ์ž์‹ ๋…ธ๋“œ์™€ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๊นŒ์ง€ ์ด๋™

 

์ฐธ์กฐ https://velog.io/@mein-figur/Python%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%ED%81%90-heapq