2021. 9. 6. 08:01ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๋ฃ๊ตฌ์กฐ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฃ๊ตฌ์กฐ์์ Heap ๊ตฌ์กฐ์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ๋ ๊ฒ์ด์์.
์ด๋ฒ ํผ๋๋ Heap์ ๋๋ฒ์งธ ํผ๋ ์ ๋๋ค. 1ํธ์ ์ ๋ณด์ ๋ถ๋ค์ [์๋ฃ๊ตฌ์กฐ] Heap (1)์ ๊ด์ฌ์ ์ฃผ์ธ์!
๋ํ, ์์ค ์ฝ๋์ ๋ํด์ ํ์ธ ํ๊ณ ์ถ์ผ์ ๋ถ๋ค๊ป์๋ ์ฃผ๋ํ๋์ Git hub์ ๊ด์ฌ์ ์ฃผ์ธ์!
๐ Heap ์ญ์ (Max Heap ์์)
๐ Heap Class ๊ตฌํ
๐ Delete ์ฒซ๋ฒ์งธ
ํ์ ์ต์๋จ Node (Root Node)๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๊ฒ์ด์์.
์๋ํ๋ฉด ํ์ ๋ณธ๋ ์ฉ๋๊ฐ ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ Root Node์ ๋์ ๋ค ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋ฐ๋ก ๊บผ๋ด ์ธ ์ ์๋๋ก ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ด์์.
def pop(self): # heap์ ์๋ Data ๊บผ๋ด๊ธฐ(์ญ์ ) Method
if len(self.heap_array) <= 1: # ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1๋ณด๋ค ์๋ค๋ ๊ฒ์ Data๊ฐ ์๋ค๋ ์๋ฏธ
return None # ๋ฐฐ์ด์ Data๊ฐ ์์ผ๋ฏ๋ก, ์ฐ์ฐ ๋ถ๊ฐ None์ ๋ฐํํ๋ค.
returned_data = self.heap_array[1] # 0์ธ๋ฑ์ค๋ฅผ ์ฐ์ง ์๊ณ , 1๋ฒ์ Root Node์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ์ธ
# Root Node์ Data๋ฅผ ๊บผ๋ด๋ฉด ์ต์ด ๋งจ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ๊ฐ์ Root Node๋ก ์ฌ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ๊ตฌํ
self.heap_array[1] = self.heap_array[-1] # 0๋ฒ ์ธ๋ฑ์ค๋ ์ฐ์ง ์๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ 1๋ฒ ์ธ๋ฑ์ค๋ก ์ฎ๊ธด๋ค.
retrun returned_data
๐ Delete ๋๋ฒ์งธ
์๋จ Data ์ญ์ ๊ฐ ๋๋ฉด ๊ฐ์ฅ ์ตํ๋จ๋ถ ์ผ์ชฝ์ ์์นํ Node (์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ๋ Node)๋ฅผ Root Node๋ก ์ด๋ ์ํจ๋ต๋๋ค!
Root Node์ ๊ฐ์ด ์๊ธฐ ์์ ํน์ ์์๋ค ๋ณด๋ค ์๋ค๋ฉด Root Node์ Child Node ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง Node์ Root Node์ ์์น๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ์ฐ์ฐ์ด ํ์ํ ๊ฒ์ด์์. (Swap)
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์ ๋ฃ์ด์ค๋ค.
print("heap ๋ฐฐ์ด์ ์
๋ ฅ๋ ๊ฐ์ \"" + str(heap.heap_array) + "\" ์
๋๋ค.\n") # List์ ๋ค์ด์๋ ๊ฐ๋ค์ ์ถ๋ ฅํด ๋ณธ๋ค.
# ๊ฒฐ๊ณผ : [None, 20, 10, 15, 5, 4, 8]
print("heap ๋ฐฐ์ด์์ ๊บผ๋ธ ๊ฐ์ \"" + str(heap.pop()) + "\" ์
๋๋ค.") # heap ๊ฐ์ฒด์ pop Method๋ฅผ ํธ์ถํ์ฌ Root Node๋ฅผ ๊บผ๋ธ๋ค.
# ๊ฒฐ๊ณผ : heap ๋ฐฐ์ด์์ ๊บผ๋ธ ๊ฐ์ "20" ์
๋๋ค.
print("heap์์ Root Node๋ฅผ ๋บ ๋ค ๋ค์ด์๋ ๊ฐ์ \"" + str(heap.heap_array) + "\" ์
๋๋ค.")
# ๊ฒฐ๊ณผ : heap์์ Root Node๋ฅผ ๋บ ๋ค ๋ค์ด์๋ ๊ฐ์ "[None, 15, 10, 8, 5, 4]" ์
๋๋ค.
๐ Heap ์๊ฐ ๋ณต์ก๋
ํธ๋ฆฌ์ ๋์ด (depth)๋ฅผ h๋ผ๊ณ ํ๊ธฐ ํ์ ๋, n ๊ฐ์ Node๋ฅผ ๊ฐ์ง๋ Heap์ Data ์ฝ์ , ์ฝ์ ์์ ์ต์ ์ ๊ฒฝ์ฐ Root Node์์ Leaf (์ตํ๋จ Node)๊น์ง ๋น๊ต๋ฅผ ํด์ผํ ์๋ ์๋ ๊ฒ์ด์์! ์ด ๋๋ฌธ์ $h = log2n$์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ $O(logn)$์ธ ๊ฒ์ด์์.
๐ก์ฐธ๊ณ :
๋น ์ค (Big O) ํ๊ธฐ๋ฒ์์ $logn$์์์ $log$์ ๋ฐ์ 10์ด ์๋๋ผ 2์ด๋ค.
ํ๋ฒ ์คํ์๋ง๋ค, 50%์ ์คํ ํ์๋ฅผ ์ค์ธ๋ค๋ ๊ฒ์ด๊ณ , ๊ทธ ๋ง์ธ ์ฆ, 50%์ ์คํ ์๊ฐ์ ๋จ์ถ ์ํฌ ์ ์๋ค๋ ๊ฒ์ด๋ค.
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] Heap (1) (0) | 2021.09.06 |
---|---|
[์๋ฃ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(1) (0) | 2021.08.29 |
[์๋ฃ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(2) (0) | 2021.08.29 |
[์๋ฃ๊ตฌ์กฐ] 05. Hash Table (0) | 2021.08.27 |
[์๋ฃ๊ตฌ์กฐ] 04. Linked List (0) | 2021.08.15 |