์๋ฃ๊ตฌ์กฐ(15)
-
[์๋ฃ๊ตฌ์กฐ] ํ(Heap) ๊ตฌํ(์ฝ์ , ์ญ์ )
ํ ๊ตฌํ ์ผ๋ฐ์ ์ผ๋ก ํ ๊ตฌํ์ ๋ฐฐ์ด์ ํ์ฉ ํ ๊ตฌํ์ ํธ์๋ฅผ ์ํด, ๋ฃจํธ ๋ ธ๋ ์ธ๋ฑ์ค๋ฅผ 1๋ก ์ง์ ํจ ๋ถ๋ชจ ๋ ธ๋ ์ธ๋ฑ์ค = (์์ ๋ ธ๋ ์ธ๋ฑ์ค) // 2 ์ผ์ชฝ ์์ ๋ ธ๋ ์ธ๋ฑ์ค = (๋ถ๋ชจ ๋ ธ๋ ์ธ๋ฑ์ค) * 2 ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋ ์ธ๋ฑ์ค = (๋ถ๋ชจ ๋ ธ๋ ์ธ๋ฑ์ค) * 2 + 1 ํ ๋ฐ์ดํฐ ์ฝ์ ๊ตฌํ # ํ ํด๋์ค ๊ตฌํ class Heap: def __init__(self, data): self.heap_array = list() self.heap_array.append(None) self.heap_array.append(data) # ์ธ๋ฑ์ค 1๋ฒ๋ถํฐ ๋ฐ์ดํฐ๊ฐ ์ฝ์ # ์ฝ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋น๊ตํด์, ์ฝ์ ๋ ๋ ธ๋๊ฐ ์๋ก ์ด๋ํด์ผ ํ๋์ง ๊ฒฐ์ def move_up(self, inserted_idx): if in..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] ํ(Heap)์ด๋?
ํ์ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง ๋ณํ๋ ํํ์ ์ ์ฑ ์ ์ฑํํ๋ค. ํ(Heap) ์ ์ ๋ฐ์ดํฐ์์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์งํธ๋ฆฌ(Complete Binary Tree) ํน์ง > ํ์ ์ด์ฉํด ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ฐพ๋ ๊ฒ์ O(logn)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง (cf. ๋ฐฐ์ด โ O(n)) ํ์ฉ > ์ฐ์ ์์ ํ์ ๊ฐ์ด, ์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์์ผ ํ๋ ์๋ฃ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ํ์ฉ๋จ ํ์ ๊ตฌ์กฐ ๋ถ๋ฅ ์ต๋ ํ(Max Heap): ์ต๋๊ฐ์ ๊ตฌํ๊ธฐ ์ํ ๊ตฌ์กฐ ์ต์ ํ(Min Heap): ์ต์๊ฐ์ ๊ตฌํ๊ธฐ ์ํ ๊ตฌ์กฐ ์กฐ๊ฑด ๊ฐ ๋ ธ๋์ ๊ฐ์ ํด๋น ๋ ธ๋๊ฐ ๊ฐ์ง ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์(์ต๋ ํ์ ๊ฒฝ์ฐ) โ ๋ฃจํธ ๋ ธ๋๊ฐ ์ต๋๊ฐ์ ๊ฐ์ง ์์ ์ด์ง ํธ๋ฆฌ์ ํํ(๋ ธ๋๋ฅผ ์ฝ์ ํ ๋ ์ผ์ชฝ ๋ ธ๋๋ถํฐ ์ฐจ๋ก..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_4 ํธ๋ฆฌ
** ์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ๋ณต์ก๋ ํธ๋ฆฌ์ ๋์ด(Depth)๋ฅผ h๋ผ๊ณ ํ๋ฉด, ์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ๋ณต์ก๋๋ O(h) n๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ค๋ฉด, h = log(n) ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์, ์๊ฐ๋ณต์ก๋๋ O(log(n)) ๋์์ ํ๋ฒ ์คํ ํ ๋๋ง๋ค ๊ฐ๋ฅํ ์ ํ์ง๊ฐ ๋ฐ์ผ๋ก ์ค์ฌ์ง๊ธฐ ๋๋ฌธ์, ์คํ์๊ฐ ์ญ์ ๋ฐ์ผ๋ก ๋จ์ถ์ํฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ** ์ด์ง ํ์ ํธ๋ฆฌ์ ๋จ์ ํธ๋ฆฌ๊ฐ ๊ท ํ ์กํ ์์ ๊ฒฝ์ฐ, ํ๊ท ์๊ฐ๋ณต์ก๋ O(log(n)) ์ต์ ์ ๊ฒฝ์ฐ, ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋์ผํ ์ฑ๋ฅ์ ๊ฐ๊ฒ ๋๊ณ ์๊ฐ๋ณต์ก๋๋ O(n)
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_3 ํธ๋ฆฌ
** ํธ๋ฆฌ ๋ ธ๋ ์ญ์ 3๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋ ์ ์๊ฐ 1) Leaf ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค์ง ์๋๋ก ํ๋ค 2) Child ๋ ธ๋๊ฐ 1๊ฐ์ธ ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ์ญ์ ํ ๋ ธ๋์ Child ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค 3) Child ๋ ธ๋๊ฐ 2๊ฐ์ธ ๋ ธ๋ ์ญ์ ์ - ์ญ์ ํ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ์ค, ๊ฐ์ฅ ์์ ๊ฐ์ ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค. or - ์ญ์ ํ ๋ ธ๋์ ์ผ์ชฝ ์์ ์ค, ๊ฐ์ฅ ํฐ ๊ฐ์ ์ญ์ ํ ๋ ธ๋์ Parent ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค. **ํ์ด์ฌ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํธ๋ฆฌ ๊ตฌํ ---> (์ฝ์ ), (ํ์), ์ญ์ class BinarySearchTree: def __init__(self, head): s..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_2 ํธ๋ฆฌ
** ํ์ด์ฌ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํธ๋ฆฌ ๊ตฌํ ---> ์ฝ์ , ํ์, (์ญ์ ) 1) ๋ ธ๋ ํด๋์ค ๊ตฌํ class Node: def __init__(self, value): self.value = value self.left = None self.right = None 2) ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌํ class BinarySearchTree: def __init__(self, head): self.head = head # ์ฝ์ def insert(self, value): self.current_node = self.head # ๋น๊ต๋์์ผ๋ก, ํค๋๋ถํฐ ์์ while True: if value value: self.current_node = self.current_node.left # ์ด๋ else: self.c..
2021.05.30 -
[์๋ฃ๊ตฌ์กฐ] #7_1 ํธ๋ฆฌ
ํธ๋ฆฌ ๊ตฌํ์ ๋ก์ง์ด ๋ง์ด ๋ค์ด๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ๋๋์ ์ค๋ค. ๊ตฌํํ๊ธฐ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ์๋ฃ๊ตฌ์กฐ ์ค์์ ๋ฉด์ ์์ ์์ฃผ ์ง๋ฌธ์ด ๋์ค๋ ํธ์ด๋ค. ** ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ Node์ Branch๋ฅผ ์ด์ฉํด์, ์ฌ์ดํด์ ์ด๋ฃจ์ง ์๋๋ก ๊ตฌ์ฑํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค์ฌ์ฉ ์: ์ด์ง ํธ๋ฆฌ์ ํํ๋ก, ํ์(๊ฒ์) ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ์ํด ๋ง์ด ์ฌ์ฉ๋จ ** ์ฉ์ด ์ ๋ฆฌ Node: ํธ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ ์์. (๋ฐ์ดํฐ + ์ฐ๊ฒฐ ๋ ธ๋์ Branch ์ ๋ณด) ๋ฃจํธ ๋ ธ๋: ํธ๋ฆฌ ๋งจ ์์ ์๋ ๋ ธ๋ ๋ ๋ฒจ: ์ด๋ค ๋ ธ๋๊ฐ ์์นํ ํธ๋ฆฌ์ ์ธต Parent Node: ์ด๋ค ๋ ธ๋์ ์์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋ Child Node: ์ด๋ค ๋ ธ๋์ ํ์ ๋ ๋ฒจ์ ์๋ ๋ ธ๋ Leaf Node: Child ๋ ธ๋๋ฅผ ๊ฐ์ง์ง ์๋ ๋ ธ๋ Sibling (Brothe..
2021.05.30