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

2021. 9. 6. 08:00ใ†์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„/์ž๋ฃŒ๊ตฌ์กฐ

728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ Heap ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ํ™•์ธ ํ•˜๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค๊ป˜์„œ๋Š” ์ฃผ๋‹ˆํ•˜๋ž‘์˜ Git hub์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”!




 


 

 

๐Ÿ“Œ Heap ๊ตฌ์กฐ


 

    ๐Ÿ“ Heap (ํž™)์ด๋ž€?

Data์—์„œ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ Complete Binary Tree (์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ)์ธ ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿผ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ์š”? Node๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ์ตœ ํ•˜๋‹จ ์™ผ์ชฝ Node๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ต๋‹ˆ๋‹ค!

 

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

 

          ๐Ÿ‘‰ ํž™์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด $O(n)$์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ์ด์— ๋ฐ˜ํ•ด, ํž™์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์œผ๋ฉด, $O(logn)$์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ์šฐ์„  ์ˆœ์œ„ ํ์™€ ๊ฐ™์ด ์ตœ๋Œ€๊ฐ’ ๋˜๋Š” ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„์•ผ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ๋“ฑ์— ํ™œ์šฉ

 

 

 

 

    ๐Ÿ“ Heap ๊ตฌ์กฐ

 

ํž™์€ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ(์ตœ๋Œ€ ํž™, Max Heap)์™€ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ(์ตœ์†Œ ํž™, Min Heap)๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ž๋‹ˆ๋‹ค!

  1. ๊ฐ Node์˜ ๊ฐ’์€ ํ•ด๋‹น Node์˜ ์ž์‹ Node๊ฐ€ ๊ฐ€์ง„ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค(์ตœ๋Œ€ ํž™์˜ ๊ฒฝ์šฐ).
    • ์ตœ์†Œ ํž™์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ Node์˜ ๊ฐ’์€ ํ•ด๋‹น Node์˜ ์ž์‹ Node๊ฐ€ ๊ฐ€์ง„ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
  2. ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ๊ฐ–์Œ

 

          ๐Ÿ‘‰ ํž™๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ 

  • ๊ณตํ†ต์  : ํž™๊ณผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ
  • ์ฐจ์ด์  : ํž™์€ ๊ฐ Node์˜ ๊ฐ’์ด ์ž์‹ Node๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค(Max Heap์˜ ๊ฒฝ์šฐ).
    • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ Node ๊ธฐ์ค€ ์™ผ์ชฝ ์ž์‹ Node์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘๊ณ , ๋‹ค์Œ ๋ถ€๋ชจ Node, ๋‹ค์Œ ๋ถ€๋ชจ Node ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ Node ๊ฐ’์ด ๊ฐ€์žฅ ํฌ๋‹ค.
    • ํž™์€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์ธ ์ž์‹ ๋…ธ๋“œ์—์„œ ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์ด ์˜ค๋ฅธ์ชฝ์— ์™€์•ผ ํ•œ๋‹ค๋ผ๋Š” ์กฐ๊ฑด์ด ์—†๋‹ค.
      • ํž™์˜ ๋ถ€๋ชจ Node ๊ธฐ์ค€ ์™ผ์ชฝ ๋ฐ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์ด ํด์ˆ˜๋„ ์™ผ์ชฝ์ด ํด์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํƒ์ƒ‰์„ ์œ„ํ•œ ๊ตฌ์กฐ, ํž™์€ ์ตœ๋Œ€ / ์ตœ์†Œ๊ฐ’ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

 

 

 

 

 

๐Ÿ“Œ Heap ๋™์ž‘


Data๋ฅผ ํž™ ๊ตฌ์กฐ์— ์‚ฝ์ž…, ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์„ ์šฐ๋ฆฌ ํ•œ๋ฒˆ ์ดํ•ด ํ•ด ๋ณด์•„์š”!

 

 

 

    ๐Ÿ“ Heap์— Data ์‚ฝ์ž… - ๊ธฐ๋ณธ ๋™์ž‘

ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฏ€๋กœ, ์‚ฝ์ž…ํ•  Node๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ผ์ชฝ ์ตœํ•˜๋‹จ๋ถ€ Node๋ถ€ํ„ฐ Data๊ฐ€ ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

          ๐Ÿ‘‰ ์‚ฝ์ž…ํ•  Data๊ฐ€ Heap์˜ Data๋ณด๋‹ค ํด ๊ฒฝ์šฐ? (Max Heap ์˜ˆ์‹œ)

๋จผ์ € ์‚ฝ์ž…๋œ Data๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ์— ๋งž์ถ”์–ด ์ตœํ•˜๋‹จ๋ถ€ ์™ผ์ชฝ Node๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ด์—์š”.

์ฑ„์›Œ์ง„ Node ์œ„์น˜์—์„œ, ๋ถ€๋ชจ Node๋ณด๋‹ค ๊ฐ’์ด ํด ๊ฒฝ์šฐ, ๋ถ€๋ชจ Node์™€ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณต(Swap)ํ•ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค!

 

20์ด๋ผ๋Š” Data๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ, ์ตœ์ดˆ ์ตœํ•˜๋‹จ ์™ผ์ชฝ Node๋ถ€ํ„ฐ Node๊ฐ€ ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ด์—์š”. 5, 4๋ผ๋Š” Data๋ฅผ ๊ฐ€์ง„ Node๊ฐ€ ์žˆ์œผ๋‹ˆ ๊ทธ ๋‹ค์Œ ๋นˆ ๊ณต๊ฐ„์— 20์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋’ค 20๊ณผ ๋ถ€๋ชจ Node์˜ ๊ฐ’์„ ๋น„๊ต๋ฅผ ํ•˜๋Š”๋ฐ, ๋ถ€๋ชจ Node์˜ ๊ฐ’์ด ๋” ์ž‘๋‹ค๋ฉด ์„œ๋กœ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—์š”.

 

๊ทธ๋Ÿฐ ๋’ค ๋˜ ์ƒ์œ„ ๋ถ€๋ชจ Node์™€ ๊ฐ’์„ ๋น„๊ต๋ฅผ ํ•˜๋Š”๋ฐ, ๋ถ€๋ชจ Node๊ฐ€ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ๋ณ€ํ™” ์—†์ด ๊ฐ€๋งŒํžˆ ์žˆ๊ณ , ๋์ด ๋‚˜๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋˜ ํ•œ๋ฒˆ์˜ ์œ„์น˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

    ๐Ÿ“ Heap์— Data ์‚ญ์ œ (Max Heap ์˜ˆ์‹œ)

์‚ญ์ œ๋Š” ์ตœ์ƒ๋‹จ Node (Root Node)๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜ ์ ์ธ ๊ฒƒ์ด์—์š”.

์™œ๋ƒํ•˜๋ฉด ํž™์˜ ์šฉ๋„๋Š” ์ตœ๋Œ€๊ฐ’ ๋˜๋Š” ์ตœ์†Œ๊ฐ’์„ Root Node์— ๋†“๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ, Heap์€ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿผ ์ด์ œ Root Node๊ฐ€ ๋น„์› ๋‹ค๋ฉด ๋‹ค์Œ ์ž‘์—…์œผ๋กœ ์ƒ๋‹จ์˜ Data ์‚ญ์ œ ์‹œ, ๊ฐ€์žฅ ์ตœํ•˜๋‹จ๋ถ€ ์™ผ์ชฝ์— ์œ„์น˜ํ•œ Node(์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•œ Node)๋ฅผ Root Node๋กœ ์ด๋™ ์‹œํ‚จ๋‹ต๋‹ˆ๋‹ค!

Root Node์˜ ๊ฐ’์ด Child Node๋ณด๋‹ค ์ž‘๋‹ค๋ฉด Root Node์˜ Child Node ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง„ Node์™€ Root Node์™€ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค. (Swap)

 

 

์œ„์— ๊ทธ๋ฆผ์—์„œ 8์ด Root Node๋กœ ์˜ฌ๋ผ๊ฐ„ ๋’ค ๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ธ 15์™€ ๋น„๊ต๋ฅผ ํ•ด์„œ ์ž๊ธฐ ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ๋ฐ, ๋งŒ์•ฝ 15 ๋ฐ‘์— ๋˜๋‹ค๋ฅธ Child Node๊ฐ€ ์žˆ์—ˆ๊ณ , ๊ทธ ์ˆซ์ž๊ฐ€ ๋˜ 8๋ณด๋‹ค ํฌ๋‹ค๋ฉด? ์ด ์ž‘์—…์€ ๋” ๋ฐ˜๋ณต ๋˜๊ฒŒ ๋  ๊ฒƒ์ด์—์š”.

 

 

 

 

๐Ÿ“Œ Heap ๊ตฌํ˜„


    ๐Ÿ“ Heap์— Data ์‚ญ์ œ (Max Heap ์˜ˆ์‹œ)

 

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํž™ ๊ตฌํ˜„์‹œ ๋ฐฐ์—ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!
  • ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๊ฐ€ 0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ, ํž™ ๊ตฌํ˜„์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด, root ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ 1๋กœ ํ•ด๋ณผ ๊ฒƒ์ด์—์š”!
    • ๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) = ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (child node's index) // 2
      (๋‚˜๋ˆ„๊ธฐ 2)
    • ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (left child node's index) = ๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) * 2
    • ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (right child node's index) = (๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) * 2) + 1

 

 

 

 

          ๐Ÿ‘‰ 10์„ ๊ฐ€์ง„ Node(Index Number 2)์˜ ๋ถ€๋ชจ Node Index Number ๊ตฌํ•˜๊ธฐ!

2 // 2

# ๊ฒฐ๊ณผ : 1

 

 

          ๐Ÿ‘‰ 15์„ ๊ฐ€์ง„ Node(Index Number 1)์˜ ์™ผ์ชฝ ์ž์‹ Node Index Number ๊ตฌํ•˜๊ธฐ!

1 * 2

# ๊ฒฐ๊ณผ : 2

 

 

          ๐Ÿ‘‰ 15์„ ๊ฐ€์ง„ Node(Index Number 1)์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ Node Index Number ๊ตฌํ•˜๊ธฐ!

(2 * 2) + 1

# ๊ฒฐ๊ณผ : 5

 

 

 

๐Ÿ“Œ Heap์— Data ์‚ฝ์ž… ๊ตฌํ˜„ (Max Heap ์˜ˆ์‹œ)


    ๐Ÿ“ Heap Class ๊ตฌํ˜„

class Heap:
    def __init__(self, data):  # ์ƒ์„ฑ์ž ์ƒ์„ฑ (data๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.)
        self.heap_array = list()  # heap_array๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค.
        
        # heap_arrary์— ์ตœ์ดˆ 0๋ฒˆ ์ธ๋ฑ์Šค์— None์„ ๋„ฃ๋Š”๋‹ค. (1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ)
        self.heap_array.append(None)
        
        # 1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ data๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ํ•œ๋‹ค.
        self.heap_array.append(data)
        
        
heap = Heap(1)
print(heap.heap_arrary)

# ๊ฒฐ๊ณผ : [None, 1]

 

 

          ๐Ÿ‘‰ Insert Method ๊ตฌํ˜„

์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋ก ๊ตฌํ˜„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

class Heap:
    def __init__(self, data):  # ์ƒ์„ฑ์ž ์ƒ์„ฑ (data๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.)
        self.heap_array = list()  # heap_array๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค.
        
        # heap_arrary์— ์ตœ์ดˆ 0๋ฒˆ ์ธ๋ฑ์Šค์— None์„ ๋„ฃ๋Š”๋‹ค. (1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ)
        self.heap_array.append(None)
        
        # 1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ data๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ํ•œ๋‹ค.
        self.heap_array.append(data)  
        
        
    def insert(self, data):  # ๋ฐฐ์—ด์— Data๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•œ Method
        if len(self.heap_array) == 0:  # ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ผ๋ฉด? ์ฆ‰, ๋ฐฐ์—ด์— Data๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด?
            self.heap_array.append(None)  # ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด 0๋ฒˆ ์ธ๋ฑ์Šค์— None์„ ๋„ฃ์–ด์ค€๋‹ค.
            self.heap_array.append(data)  # ๊ทธ๋Ÿฐ๋’ค 1๋ฒˆ ์ธ๋ฑ์Šค์— Data๊ฐ€ ๋“ค์–ด์˜ค๋„๋ก ํ•œ๋‹ค.
            return True  # ์ฐธ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.
		
        # ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด? ์ž…๋ ฅ๋œ Data๋ฅผ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ์— ์ž…๋ ฅํ•ด ์ค€๋‹ค.
        self.heap_array.append(data)
        return True  # ์ฐธ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

 

 

์‚ฝ์ž…ํ•œ Node๊ฐ€ ์ž์‹ ์˜ ๋ถ€๋ชจ Node๋ณด๋‹ค ๊ฐ€์ง„ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ๋ถ€๋ชจ Node์™€ ์‚ฝ์ž…ํ•œ Node์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์‚ฝ์ž…ํ•œ Node๊ฐ€ Root Node๊ฐ€ ๋˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ Node๋ณด๋‹ค ๊ฐ’์ด ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ๋น™๋น™๋น™~ ๋ฐ˜๋ณต์„ ํ•œ๋‹ต๋‹ˆ๋‹ค!

 

          ๐Ÿ‘‰ ํŠน์ • Node์˜ ๊ด€๋ จ Node์˜ ์œ„์น˜ ์•Œ์•„๋‚ด๊ธฐ!

  • ๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) = ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (child node's index) // 2 
    (๋‚˜๋ˆ„๊ธฐ 2)
  • ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (left child node's index) = ๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) * 2
  • ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (right child node's index) = (๋ถ€๋ชจ ๋…ธ๋“œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ (parent node's index) * 2) + 1

 

 

 

heap = Heap(15)  # ์ตœ์ดˆ heap์— Heap๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ 15๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
heap.insert(10)  # heap๊ฐ์ฒด์— insert Method์— 10์„ ๋„ฃ์–ด์ค€๋‹ค.
heap.insert(8)  # heap๊ฐ์ฒด์— insert Method์— 8์„ ๋„ฃ์–ด์ค€๋‹ค.
heap.insert(5)  # heap๊ฐ์ฒด์— insert Method์— 5์„ ๋„ฃ์–ด์ค€๋‹ค.
heap.insert(4)  # heap๊ฐ์ฒด์— insert Method์— 4์„ ๋„ฃ์–ด์ค€๋‹ค.
heap.insert(20)  # heap๊ฐ์ฒด์— insert Method์— 20์„ ๋„ฃ์–ด์ค€๋‹ค.

# List์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’๋“ค์„ ์ถœ๋ ฅํ•ด ๋ณธ๋‹ค.
print("heap ๋ฐฐ์—ด์— ์ž…๋ ฅ๋œ ๊ฐ’์€ \"" + str(heap.heap_array) + "\" ์ž…๋‹ˆ๋‹ค.\n")  
print("=" * 100 + "\n")



# ๊ฒฐ๊ณผ : [None, 20 , 10, 15, 5, 4, 8]

 

 


 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค

 

728x90
๋ฐ˜์‘ํ˜•