๐Ÿ“š Computer Science/Data Structure

[์ž๋ฃŒ๊ตฌ์กฐ] ํž™(Heap)

hyebin (Helia) 2023. 3. 13. 15:41
๋ฐ˜์‘ํ˜•

ํž™(Heap)

  • ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’๋“ค ์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’์ด๋‚˜ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐ˜์ •๋ ฌ์ƒํƒœ(๋А์Šจํ•œ ์ •๋ ฌ์ƒํƒœ) ์œ ์ง€
    • ํฐ ๊ฐ’์ด ์ƒ์œ„์— ์žˆ๊ณ  ์ž‘์€ ๊ฐ’์ด ํ•˜์œ„์— ์žˆ๋Š” ์ •๋„
  • ์ค‘๋ณต๋œ ๊ฐ’ ํ—ˆ์šฉ

ํž™์˜ ์ข…๋ฅ˜

  • ์ตœ๋Œ€ ํž™(max heap)
    • ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ
  • ์ตœ์†Œ ํž™(min heap)
    • ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’ ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ด์ง„ํŠธ๋ฆฌ

ํž™์˜ ํ™œ์šฉ

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ
  • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด
  • ์šด์˜ ์ฒด์ œ์—์„œ์˜ ์ž‘์—… ์Šค์ผ€์ฅด๋ง
  • ์ˆ˜์น˜ ํ•ด์„์ ์ธ ๊ณ„์‚ฐ

ํž™์˜ ๊ตฌํ˜„

  • ํž™์„ ์ €์žฅํ•˜๋Š” ํ‘œ์ค€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด
  • ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ 0์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
  • ํŠน์ • ์œ„์น˜์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด๋„ ๋ณ€ํ•˜์ง€ ์•Š์Œ
    • (ex ๋ฃจํŠธ ๋…ธ๋“œ(1)์˜ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋Š” ํ•ญ์ƒ 3)
  • ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ด€๊ณ„
    • ์™ผ์ชฝ ์ž์‹ index = (๋ถ€๋ชจ index) * 2
    • ์˜ค๋ฅธ์ชฝ ์ž์‹ index = (๋ถ€๋ชจ index) * 2 + 1
    • ๋ถ€๋ชจ index = (์ž์‹ index) / 2

ํž™์˜ ์‚ฝ์ž…

  1. ํž™์— ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด, ์ผ๋‹จ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ํž™์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์ด์–ด์„œ ์‚ฝ์ž…
  2. ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋“ค๊ณผ ๊ตํ™˜ํ•ด์„œ ํž™์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑ์‹œํ‚ด

(์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%9E%99Heap)

 

ํž™์˜ ์‚ญ์ œ

  1. ์ตœ๋Œ€ ํž™์—์„œ ์ตœ๋Œ“๊ฐ’์€ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋ฏ€๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ
    • ์ตœ๋Œ€ ํž™(max heap)์—์„œ ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์ตœ๋Œ“๊ฐ’์„ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  2. ์‚ญ์ œ๋œ ๋ฃจํŠธ ๋…ธ๋“œ์—๋Š” ํž™์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ด
  3. ํž™์„ ์žฌ๊ตฌ์„ฑ

(์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://velog.io/@emplam27/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%9E%99Heap)

 

ํž™ ์ •๋ ฌ(heap sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋ฃจํŠธ์— ์œ„์น˜ํ•˜๋Š” ํŠน์ง•์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๊ฐ€์žฅ ํฐ ๊ฐ’์ธ ๋ฃจํŠธ๋ฅผ ๊บผ๋‚ด๋Š” ์ž‘์—… ๋ฐ˜๋ณตํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋Š˜์–ด๋†“์œผ๋ฉด ๋ฐฐ์—ด ์ •๋ ฌ ์™„๋ฃŒ
  • ์‹œ๊ฐ„๋ณต์žก๋„๋Š” 
  • ๋™์ž‘ ๊ณผ์ •
      1. root๋ฅผ ๊บผ๋ƒ„
      2. ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ root๋กœ ์ด๋™
      3. ์ž๊ธฐ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ž์‹ ์š”์†Œ์™€ ์ž๋ฆฌ๋ฅผ ๊ตํ™˜ํ•˜๋ฉฐ ๋‚ด๋ ค๊ฐ€๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณต
        • ์ด๋•Œ ์ž์‹์˜ ๊ฐ’์ด ์ž๊ธฐ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๋ฆฌํ”„(leaf)์— ๋‹ค๋‹ค๋ฅด๋ฉด ์ข…๋ฃŒ

(์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://velog.io/@emplam27/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-%ED%9E%99%EC%A0%95%EB%A0%ACHeap-Sort)

 

๋ฐ˜์‘ํ˜•