์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ : ์๋ฃ๊ตฌ์กฐ 01 ์ด๋ก
[์๋ฃ๊ตฌ์กฐ 02 ์ฝ๋] ํฌ์คํธ์์๋ C++ ์ธ์ด๋ก ์๋ฃ๊ตฌ์กฐ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ์ดํด ๋ด ๋๋ค.
๐ฃ๏ธ ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฐจ์ด์ ์ด ๋ญ์ง ์๋๋๋ก ์ค๋ช ํด์ฃผ์ค๋์?
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ฐฐ์ด์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฏธ๋ฆฌ ํ ๋น๋ ํฌ๊ธฐ๋งํผ ์ ์ฅํฉ๋๋ค. ๊ทธ๋์ ํน์ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ์ ์ฆ์ ์ ๊ทผ (random access `O(1)`) ํ ์ ์์ด์ ์ฝ๋ ์๋๊ฐ ๋น ๋ฆ ๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ ์ญ์ ๋๋ ์ฝ์ ์ ์์๋ค์ ์ธ๋ฑ์ค๋ฅผ ์์ ํด์ผ ํด์ ๋น๊ต์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
๋ฐ๋ฉด์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๋ ธ๋๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์์ ์ผ๋ก ์ ์ฅํ์ฌ ๋ ผ๋ฆฌ์ ์ฐ์์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๊ฐ ๋ ธ๋๋ ๋ฐ์ดํฐ์ ๋ค์ ๋ ธ๋์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๊ณ ์์ด์ ์์ ์ ๊ทผ์ ํ์ง ๋ชปํ๊ณ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฏ๋ก ํ ๋ฒ์ ํน์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ณ ํด๋น ์ธ๋ฑ์ค์ ๋๋ฌํ๊ธฐ๊น์ง `O(n)`์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ์ ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์ ๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋์ด์ `O(1)`์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ๋ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์์ ๋์๋ `O(1)`์ด๊ณ , ์ค์ง์ ์ผ๋ก ์ถ๊ฐ/์ญ์ ํ๋ ค๋ ์ธ๋ฑ์ค๊น์ง ๋๋ฌํ๋ ๋ฐ `O(n)`์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
๋ฐฐ์ด์ ์ฃผ๋ ์ฅ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ append ๊ฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ผ๋ ๋จ์ ์ด ์์ต๋๋ค. ๋ฐฐ์ด์ ์ ์ธ์์ fixed size๋ฅผ ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํฉ๋๋ค. ์ฆ, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ง ์๋๋ผ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด์ ๋ฐ๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ Runtime ์ค์์๋ size ๋ฅผ ๋๋ฆฌ๊ณ ์ค์ผ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ ์์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ฏธ๋ฅผ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋์ initial size ๋ฅผ ๊ณ ๋ฏผํ ํ์๊ฐ ์๊ณ , ํ์ํ ๋งํผ memory allocation์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์์ต๋๋ค.
๐ฃ๏ธ ์คํ๊ณผ ํ๋ ์ด๋ค ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉํ๋์?
์คํ์, ์ ์ ํ์ถ์ ํน์ฑ์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์คํ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด / ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ฃผ๋ก ๋ฐฐ์ด์ ํตํด ๊ตฌํํฉ๋๋ค. ์คํ์ด ์ค์ ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์ '๋ค๋ก๊ฐ๊ธฐ' ๊ธฐ๋ฅ์ด๋, ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์คํ ์์ญ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ํจ์๋ฅผ ์ํํ ํ ๋์๊ฐ์ผ ํ๋ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
ํ๋, ์ ์ ์ ์ถ์ ํน์ฑ์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด / ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ฃผ๋ก ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ํตํด ๊ตฌํํฉ๋๋ค. ํ๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ํ๋ฆฐํฐ ํ, CPU ์ค์ผ์ค๋ง์ Ready Queue ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๐ฃ๏ธ ์ฐ์ ์์ ํ๋ ๋ฌด์์ธ๊ฐ์?
์ ์ ์ ์ถ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ์ ๋ค๋ฅด๊ฒ, ์ฐ์ ์์๊ฐ ๋์ ์์๋ถํฐ ์ฐ์ ์ ์ผ๋ก ๋น ์ ธ๋์ค๊ฒ ๋๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ ์์๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ค. ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํด ์ ๋ ฌํ๊ฑฐ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฐ์ ์์ ํ๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํ์ผ๋ก ๊ตฌํํ ์ ์์ผ๋จ, ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ์ฃผ๋ก ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ์ด ๋ชจ๋ `O(logN)` ์ด ๋ณด์ฅ๋ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ๊ตฌํํฉ๋๋ค.
๐ฃ๏ธ ํ์ด๋ ๋ฌด์์ธ๊ฐ์?
ํ์ ์์ ์ด์งํธ๋ฆฌ์ ํ ์ข ๋ฅ๋ก, ์ต๋ ํ๊ณผ ์ต์ ํ์ด ์์ต๋๋ค. ์ต๋ ํ์ ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๋ค๋ ์กฐ๊ฑด์ ๊ฐ์ต๋๋ค. ์ต์ ํ์ ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ต๋๋ค. ์ต๋ ํ๊ณผ ์ต์ ํ์ ์ด์ฉํด ๊ฐ๊ฐ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด์ ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ฑฐ๋, ํ ์ ๋ ฌ์ ํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๐ฃ๏ธ ํ์ ์ฝ์ ,์ญ์ ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์!
๋ ์ฐ์ฐ ๋ชจ๋ ๋ชจ๋ ํธ๋ฆฌ์ ๋์ด๋งํผ ์ฆ `O(logN)` ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ์๋ `O(logN)` ์ด ๋ณด์ฅ๋ฉ๋๋ค.
ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๋๋, ํ์ ๋งจ ๋์์ ์ด๋ฃจ์ด์ง๋๋ค. ๋ถ๋ชจ ๋ ธ๋์ ์ฐ์ ์์(์ต๋๊ฐ ๋๋ ์ต์๊ฐ)๋ฅผ ๋น๊ตํด ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฉด ์์น๋ฅผ ๋ฐ๊พธ๋ฉด์ ๋ฃจํธ ๋ ธ๋๊น์ง ๋น๊ตํฉ๋๋ค.
ํ์์ ๋ฐ์ดํฐ ์ญ์ ๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ์ฐ์ฐ์ ๋๋ค. ์ฆ, ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ ํ๊ฒ ๋ฉ๋๋ค. ์ญ์ ํ ํ์๋ ๋ฃจํธ ๋ ธ๋ ์๋ฆฌ์ ํ์ ๋ง์ง๋ง ๋ ธ๋(๋ง์ง๋ง ๋ ๋ฒจ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ๋ ธ๋)๋ฅผ ์ฎ๊ธด ํ ํ์ ์ฌ์ ๋ ฌํฉ๋๋ค.
์ฝ์ ๋ฐ ์ญ์ ๋ฅผ ํ๋ฉด ํ์ ๊ตฌ์กฐ๊ฐ ๋ฌด๋์ง๊ฒ ๋๋๋ฐ, ๋ค์ Heap ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ Heapify ๋ผ๊ณ ํฉ๋๋ค.
๐ฃ๏ธ ํ์ด ํ ์ ์๋ ๊ฒ์ ๊ท ํ์ด์งํธ๋ฆฌ๊ฐ ํ ์ ์์ง ์๋์?
๊ณตํต์ : ํ๊ณผ ๊ท ํ ์ด์ง ํธ๋ฆฌ ๋ชจ๋ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ์ด๋ฉฐ, ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ์ด ๋ก๊ทธ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์ฐจ์ด์ : ํ์ ํธ๋ฆฌ์ ์ต์๋จ(๋ฃจํธ)์ ์๋ ์์์ ๋ํ ๋น ๋ฅธ ์ ๊ทผ(์ต๋๊ฐ ๋๋ ์ต์๊ฐ)์ ์ค์ ์ ๋ ๋ฐ๋ฉด, ๊ท ํ ์ด์ง ํธ๋ฆฌ๋ ํธ๋ฆฌ ๋ด์ ๋ชจ๋ ์์์ ๋ํ ๋น ๋ฅธ ๊ฒ์์ ์ค์ ์ ๋ก๋๋ค.
ํน์ ์ํฉ์์, ์๋ฅผ ๋ค์ด ์ฐ์ ์์ ํ ๊ตฌํ ์, ํ๊ณผ ๊ท ํ ์ด์ง ํธ๋ฆฌ๋ ์ํธ ๋์ฒด ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๊ฐ ๊ฐ์ง ํน์ฑ์ ๋ฐ๋ผ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ๊ณผ ๊ท ํ ์ด์ง ํธ๋ฆฌ๋ ๋ ๋ค ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฃ ๊ตฌ์กฐ์ด์ง๋ง, ๊ฐ๊ฐ์ ํน์ฑ๊ณผ ์ต์ ํ๋ ์ฉ๋๊ฐ ๋ค๋ฆ ๋๋ค. ํ์ ์ต๋๊ฐ ๋๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๋ ๋ฐ ์ต์ ํ๋์ด ์๊ณ , ๊ท ํ ์ด์ง ํธ๋ฆฌ๋ ํธ๋ฆฌ ๋ด์ ๋ชจ๋ ์์์ ๋ํ ๋น ๋ฅธ ๊ฒ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์ ์ ํฉํฉ๋๋ค. ๋ฐ๋ผ์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ ์ ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๐ฃ๏ธ ์ด์งํ์ํธ๋ฆฌ ์ฝ์ , ์ญ์ ๊ณผ์ ์ ์ด๋ป๊ฒ ์ด๋ค์ง๋์?
์ฝ์ : ๋ฃจํธ ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฐ์ ๋น๊ตํด ๋๊ฐ๋ฉด์ ์ฝ์ ํ ์๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฐฉ์์ ๋๋ค. ์ถ๊ฐํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ๋น๊ตํ๋ ๋ ธ๋๋ณด๋ค ๊ฐ์ด ํฐ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋์ ๋น๊ต๋ฅผ ์ํํ๊ณ , ์์ ๊ฒฝ์ฐ๋ ์ผ์ชฝ ์์ ๋ ธ๋์ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค.
์ญ์ : ์์๋ ธ๋์ ๊ฐ์์ ๋ฐ๋ผ 3๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
- ์์ ๋ ธ๋๊ฐ ์๋ค: ํด๋น ๋ ธ๋๋ง ์ญ์ ํ๋ฉด ๋๋ค.
- ์์ ๋ ธ๋๊ฐ 1๊ฐ: ์์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋ ธ๋์ ์์น๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค.
- ์์ ๋ ธ๋๊ฐ 2๊ฐ: ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์, ์ญ์ ํ ๋ ธ๋ ์์น๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค. ๋๋ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ญ์ ํ ๋ ธ๋ ์์น๋ก ์ฎ๊ฒจ๋ ๋๋ค.
๐ฃ๏ธ ์ด์ง ํ์ ํธ๋ฆฌ, ํฌํ ์ด์ง ํธ๋ฆฌ, ์์ ์ด์ง ํธ๋ฆฌ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
์ด์ง ํธ๋ฆฌ๋ ์์ ๋ ธ๋๋ฅผ ์ต๋ 2๊ฐ๊น์ง ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค. 3๊ฐ์ง ๋ชจ๋ ์ด์ง ํธ๋ฆฌ์ด์ง๋ง, ์๋ก ๋ค๋ฅธ ํน์ง์ด ์์ต๋๋ค.
- ๋จผ์ ์ด์ง ํ์ ํธ๋ฆฌ๋ ๋ชจ๋ ๋ ธ๋์ ๋ํด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๊ณ , ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ ธ๋๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ต๋๋ค. ๋ฐ์ดํฐ์ ๋น ๋ฅธ ๊ฒ์์ ์ํด ๋ง๋ค์ด์ง ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
- ํฌํ ์ด์ง ํธ๋ฆฌ๋ ํธ๋ฆฌ์ ๋ง์ง๋ง ๋ ๋ฒจ๊น์ง ๋ชจ๋ ๋ ธ๋๊ฐ ์ฑ์์ ธ ์์ต๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ์์ ์ด์ง ํธ๋ฆฌ๋ ํธ๋ฆฌ์ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ ๋๋จธ์ง ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์ฑ์์ ธ ์์ผ๋ฉฐ, ๋ง์ง๋ง ๋ ๋ฒจ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ธ๋๊ฐ ์ฑ์์ ธ ์์ต๋๋ค.
๐ฃ๏ธ ์ด์ง ํ์ ํธ๋ฆฌ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ ๋ฌด์์ด๊ณ , ์ด๋ฅผ ๋ณด์ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๋ฌด์์ธ๊ฐ์?
ํ๊ท ์ ์ผ๋ก `O(logN)`์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ด์ง ํ์ ํธ๋ฆฌ์์ ๋ถ๊ท ํ์ด ๋ฐ์ํ๋ฉด ์๊ฐ ๋ณต์ก๋ ๋ฉด์์ ํจ์จ์ ์ด์ง ๋ชปํ๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ํธํฅ๋์ด ์๋ ์ต์ ์ ๊ฒฝ์ฐ์ `O(n)`์ ์๊ฐ ๋ณต์ก๋๊ฐ ์์๋ ์ ์์ต๋๋ค.
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋ฐฉ๋ฒ์ด ๊ท ํ ์ด์ง ํธ๋ฆฌ ํ์ ํธ๋ฆฌ์ ๋๋ค. ๋ํ์ ์ธ ์๋ก, ๋ ๋-๋ธ๋ ํธ๋ฆฌ์ AVL ํธ๋ฆฌ๊ฐ ์์ต๋๋ค.
๐ฃ๏ธ ํธ๋ฆฌ์ ๊ทธ๋ํ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๊ทธ๋ํ๋ ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๋ฐฉํฅ ๊ทธ๋ํ์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ชจ๋ ์กด์ฌํ๋ฉฐ, ์ฌ์ดํด์ ์์ ์๋, ์์ ์๋ ์์ต๋๋ค. ๋ํ, ๊ณ์ธต ๊ด๊ณ๊ฐ ์์ต๋๋ค. ๋ฐ๋ฉด์ ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ํ ์ข ๋ฅ๋ก, ๋ฐฉํฅ์ฑ์ด ์์ผ๋ฉด์ ์ฌ์ดํด์ด ์กด์ฌํ์ง ์์ต๋๋ค. ๋ํ, ๊ณ์ธต ๊ด๊ณ๊ฐ ์์ด์ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ผ๋ ๊ด๊ณ์ฑ๊ณผ ๋ฃจํธ ๋ ธ๋๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํฉ๋๋ค.
๊ทธ๋ํ๋ ํธ๋ฆฌ๋ณด๋ค ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ ์ ๋๋ค. ์ฆ, ํธ๋ฆฌ๋ ๊ทธ๋ํ๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ผ๋ ๋ชจ๋ ๊ทธ๋ํ๋ฅผ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค.
๐ฃ๏ธ BFS์ DFS์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๋ ๊ทธ๋ํ ๋ชจ๋ ํ์์ ์ํํ ๋ ์ฌ์ฉํฉ๋๋ค.
BFS๋ ๋๋น ์ฐ์ ํ์์ผ๋ก, ํ๋์ ๋ ธ๋์์ ์์ํด ๊ฐ๊น์ด ๋ ธ๋๋ค์ ๋จผ์ ํ์ํฉ๋๋ค. ํ๋ก ๊ตฌํํ ์ ์๊ณ , ๋น๊ฐ์ค์น ๊ทธ๋ํ์์ ๊ฐ ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์์ต๋๋ค. (์: ์๋ฌธ)
DFS๋ ๊น์ด ์ฐ์ ํ์์ผ๋ก, ํ๋์ ๋ ธ๋์์ ์์ํด ์ต๋ ๊น์ด๊น์ง ํ์์ ์ํํฉ๋๋ค. ์คํ ๋๋ ์ฌ๊ท ํจ์๋ก ๊ตฌํํ ์ ์์ต๋๋ค. (์: ๋น๋ฐ)
๐ฃ๏ธ ํด์ ํ ์ด๋ธ์ด๋ ๋ฌด์์ธ๊ฐ์?
ํด์ ํ ์ด๋ธ์ ํค์ ๊ฐ ์์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ํด์ ํจ์๋ก ํค์ ๋ํ ํด์๋ฅผ ์ป์ ์ ์๋๋ฐ, ํด์๋ ํด์ ํ ์ด๋ธ์์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ์ธ๋ฑ์ค์ ๋๋ค. ํด์ ํ ์ด๋ธ์ `O(1)`์ด๋ผ๋ ๋น ๋ฅธ ์๊ฐ ์์ ํด์ ํจ์๋ฅผ ํตํด ์ํ๋ ๊ฐ์ ์ ๊ทผํ ์ ์๋ ํน์ง์ด ์์ต๋๋ค. ํ์ง๋ง ์๋ก ๋ค๋ฅธ ํค๋ฅผ ๋ฃ์์ ๋ ๋์ผํ ๊ฐ์ด ๋์ค๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค๋ ๋จ์ ๋ ์์ต๋๋ค.
๐ฃ๏ธ ํด์ ํ ์ด๋ธ์ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ ์ด๋ป๊ฒ `O(1)`์ ์ ์งํ ์ ์๋์?
ํด์ ํ ์ด๋ธ์ ํค๋ก ์ ๊ทผํ๋ฉด, ํด์ ํจ์์ ํค ๊ฐ์ ์ง์ด ๋ฃ์ด์ ๋์จ ํด์ ๊ฐ์ ์ ์ฅ์์ ์ธ๋ฑ์ค๋ก ํ์ฉํฉ๋๋ค. ํด๋น ์ธ๋ฑ์ค์ ๊ฐ์ ์ ์ฅํ๋ฏ๋ก, ํด์ ํจ์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ์ธํ๋ฉด ์๊ฐ ๋ณต์ก๋ `O(1)`์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
๐ฃ๏ธ ํด์ ํ ์ด๋ธ์ ์ด์ฉํ ๋ ํด์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ ์๋์? ๐
ํด์ ํ ์ด๋ธ์ ์ ๊ทผํ๋ ํค ๊ฐ์ ๋ฌดํํ๊ณ , ํด์ ํจ์๋ฅผ ํตํด ๋์จ ํด์ ๊ฐ์ ์ ํํฉ๋๋ค. ๊ฐ์ด ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์.
์๋ก ๋ค๋ฅธ ํค์ ๋ํด ๊ฐ์ ํด์๊ฐ์ ๊ฐ์ง๋ 'ํด์ ์ถฉ๋' ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก Chaining ๋ฐฉ์๊ณผ Open Addressing ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ฒด์ด๋์ ๊ฐ์ ํด์๊ฐ ๋์ค๋ ํค์ ๊ฐ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ธ๋ฑ์ค์ ๋ฒํท์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํด, ์ด๋ฏธ ๊ฐ์ด ์กด์ฌํ๋๋ผ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ํด๋น ๊ฐ์ ์ฝ์ ํฉ๋๋ค. ํด์ ํ ์ด๋ธ์ ์ ์ฅ ๊ณต๊ฐ์ ๋ํ ์ ์ฝ์ ์ ๊ฒ ๋ฐ์ง๋ง, ํ๋์ ํด์์ ๋ ธ๋๊ฐ ๋๋ฌด ๋ง์์ง ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
- ๊ฐ๋ฐฉ ์ฃผ์๋ฒ์ ํด์ ์ถฉ๋ ๋ฐ์ ์ ๋น์ด ์๋ ๊ณต๊ฐ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ํน์ ํ ๊ฐ๊ฒฉ๋งํผ ์ด๋ ํ ๋น์ด์๋ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ธ๋ถ์ ์ผ๋ก๋ ์ ํ ์กฐ์ฌ๋ฒ, ์ด์ฐจ ์กฐ์ฌ๋ฒ, ์ด์ค ํด์ฑ์ด ์์ต๋๋ค.
์ถ์ฒ https://www.nossi.dev/436b3b11-fa77-4dcc-9d24-f6b034d6770e
๐ฃ๏ธ ์ฒด์ด๋, ๊ฐ๋ฐฉ์ฃผ์๋ฒ์ ์ฅ๋จ์ ์ ๋น๊ตํด์ฃผ์๊ฒ ์ด์?
์ฒด์ด๋ ๋ฐฉ์
์ฅ์
1) ํ์ ๋ ์ ์ฅ์(Bucket) ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
2) ํด์ ํจ์(Hash Function) ์ ์ ํํ๋ ์ค์์ฑ์ด ์๋์ ์ผ๋ก ์ ๋ค.
3) ์๋์ ์ผ๋ก ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ๋ฏธ๋ฆฌ ๊ณต๊ฐ์ ์ก์ ๋์ ํ์๊ฐ ์๋ค.
๋จ์
1) ํ Hash์ ์๋ฃ๋ค์ด ๊ณ์ ์ฐ๊ฒฐ๋๋ค๋ฉด(์ ๋ฆผ ํ์) ๊ฒ์ ํจ์จ์ ๋ฎ์ถ ์ ์๋ค.
2) ์ธ๋ถ ์ ์ฅ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ค.
3) ์ธ๋ถ ์ ์ฅ ๊ณต๊ฐ ์์ ์ ์ถ๊ฐ๋ก ํด์ผ ํ๋ค.
๊ฐ๋ฐฉ์ฃผ์๋ฒ ๋ฐฉ์
์ฅ์
1) ๋ ๋ค๋ฅธ ์ ์ฅ๊ณต๊ฐ ์์ด ํด์ํ ์ด๋ธ ๋ด์์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
๋จ์
1) ํด์ ํจ์์ ์ฑ๋ฅ์ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ข์ง์ฐ์ง๋ฉ๋๋ค.
2) ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋๋ฉด ๊ทธ์ ํด๋นํ๋ ์ ์ฅ์๋ฅผ ๋ง๋ จํด์ผ ํฉ๋๋ค.
Reference