๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Coding Interview University] ํž™ / ์šฐ์„ ์ˆœ์œ„ ํ / ์ด์ง„ ํž™ : ์ด๋ก  ๋ฐ ๊ตฌํ˜„ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ/Computer Science

[Coding Interview University] ํž™ / ์šฐ์„ ์ˆœ์œ„ ํ / ์ด์ง„ ํž™ : ์ด๋ก  ๋ฐ ๊ตฌํ˜„

์ง•์ง•์•ŒํŒŒ์นด 2023. 7. 13. 23:40
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” ์ฝ”๋”ฉ์ธํ„ฐ๋ทฐ๋Œ€ํ•™ ๋‹˜์˜ Git๊ณผ ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

๐ŸŒ ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ

: ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ (complete binary tree) ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

: A๊ฐ€ B์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์ด๋ฉด, A์˜ ํ‚ค ๊ฐ’๊ณผ B์˜ ํ‚ค ๊ฐ’ ์‚ฌ์ด์—๋Š” ๋Œ€์†Œ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋œ๋‹ค

: ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ

: ๋ชจ๋“  ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์€ ์ž์‹ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์•„์•ผ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

  • ์ตœ๋Œ€ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํ•ญ์ƒ ํฐ ํž™ ๊ฐ€์ง

 

left : i * 2 + 1
right : i * 2 + 2
parent : (i - 1) / 2

 

  • ์ตœ์†Œ ํž™ : ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํ•ญ์ƒ ์ž‘์€ ํž™ ๊ฐ€์ง

 

๐ŸŒ ํž™(heap) ์ฃผ์š” ๋ฉ”์„œ๋“œ

peek() : ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’ ๋ฆฌํ„ด

size() : ํž™ ์‚ฌ์ด์ฆˆ ๋ฆฌํ„ด

isEmpty() : ํž™ ์‚ฌ์ด์ฆˆ 0 ์ฒดํฌ

 

๐ŸŒ ์šฐ์„ ์ˆœ์œ„ ํ (Priority Queue) ์ž๋ฃŒ๊ตฌ์กฐ

: ํ‰๋ฒ”ํ•œ ํ(queue)๋‚˜ ์Šคํƒ(stack)๊ณผ ๋น„์Šทํ•œ ์ถ•์•ฝ ์ž๋ฃŒํ˜•

: ๊ฐ ์›์†Œ๋“ค์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค

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

  • ์Šคํƒ(stack) - ์›์†Œ๋“ค์€ ํ›„์ž… ์„ ์ถœ ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค
  • ํ(queue) - ์›์†Œ๋“ค์€ ์„ ์ž… ์„ ์ถœ ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ์ž๋ฃŒ๊ตฌ์กฐ

: ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (๊ฐ ๋ ˆ๋ฒจ์— ๋…ธ๋“œ๋“ค์ด ๊ฝ‰ ์ฐจ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ)

: ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ ์ œ์™ธ (์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๋ฉฐ, ์˜ค๋ฅธ์ชฝ์—๋Š” ๋น„์›Œ์งˆ ์ˆ˜ ์žˆ์Œ)

: ๋ฐ˜ ์ •๋ ฌ์ƒํƒœ๋ฅผ ์œ ์ง€

: ๋ถ€๋ชจ,์ž์‹ ๊ฐ„์—๋Š” ๋Œ€์†Œ ๊ด€๊ณ„๊ฐ€ ์žˆ์œผ๋‚˜, ํ˜•์ œ๋“ค ๊ฐ„์—๋Š” ๋Œ€์†Œ ๊ด€๊ณ„๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์Œ

→ ๋ถ€๋ถ„์ˆœ์„œ ํŠธ๋ฆฌ (PartialOrdered Tree)

: ์ค‘๋ณต๋œ ๊ฐ’ ํ—ˆ์šฉ ๊ฐ€๋Šฅ

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ์กฐ๊ฑด

: ๋ฃจํŠธ ๊ฐ’์ด ํ•ญ์ƒ, ์ œ์ผ ํฌ๊ฑฐ(์ตœ๋Œ€ ํž™)๋‚˜ ์ œ์ผ ์ž‘๊ฑฐ(์ตœ์†Œ ํž™)๋‚˜ ํ•ด์•ผ ํ•จ

: ๋ถ€๋ชจ์˜ ๊ฐ’์ด ์ž์‹ ๋ณด๋‹ค ํ•ญ์ƒ ํฌ๋‹ค(์ตœ๋Œ€ ํž™) ๋˜๋Š” ํ•ญ์ƒ ์ž‘๋‹ค(์ตœ์†Œ ํž™) ๋ผ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ ํ•จ

: ํ˜•์ œ ๊ฐ„์—๋Š” ๊ฐ’์˜ ํฌ๊ณ ์ž‘์Œ์ด ์ƒ๊ด€ ์—†์Œ

: ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ ๋Š”, ๊ฐ ๋ ˆ๋ฒจ์˜๋…ธ๋“œ๋“ค์ด ๋ชจ๋‘ ์ฐจ ์žˆ์Œ

: ๋งจ ์•„๋ž˜ ๋ ˆ๋ฒจ์—์„œ๋Š”, ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ฝ‰ ์ฑ„์›Œ์ ธ ์žˆ์Œ

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ์ข…๋ฅ˜

  • ์ตœ๋Œ€ ํž™ (Max-Heap) :๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์„ ๊ฐ–๊ณ , ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ๊ฐ’ ๋ณด๋‹ค ํผ
  • ์ตœ์†Œ ํž™ (Min-Heap) :๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์„ ๊ฐ–๊ณ , ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ๊ฐ’ ๋ณด๋‹ค ์ž‘์Œ

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ์˜ ๋…ธ๋“œ ์œ„์น˜ (์ธ๋ฑ์Šค)

: ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ ์œ„์น˜๋ฅผ i๋ผ๊ณ  ํ•˜๋ฉด, ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ ์œ„์น˜๋Š” i+1, ๋ถ€๋ชจ๋…ธ๋“œ ์œ„์น˜๋Š” i/2

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ์˜ ์˜ˆ์‹œ

: ํž™์ •๋ ฌ,๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์ตœ๋‹จ ๊ฒฝ๋กœ),ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ) ๋“ฑ

: ์—ฌ๋Ÿฌ ์ž๋ฃŒ ์ค‘์—, ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‚˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„, ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ

 

๐ŸŒ ์ด์ง„ ํž™ (Binary Heap) ๊ตฌํ˜„

  • insert(e) : ์š”์†Œ ์‚ฝ์ž…
  • remove() : ๋ฃจํŠธ ๋˜๋Š” ํŠน์ • ์š”์†Œ ์‚ญ์ œ
  • peek() : ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ’ ์ฝ์–ด์˜ค๊ธฐ
  • poll() : ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ’ ์ฝ์–ด์˜ค๋ฉฐ ์‚ญ์ œ
  • isEmpty() : ํž™์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
  • size() : ํž™์— ์ €์žฅ๋œ ์ž๋ฃŒ์˜ ๊ฐœ์ˆ˜ ํ™•์ธ
728x90
๋ฐ˜์‘ํ˜•
Comments