โ๐ป ๋์์ ์๋ถ๋ถ์ ๊ธฐ๋ณธ ๋ด์ฉ์ด๊ณ , ๋ค์ ๊ณต๋ถํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ์ ๋ฆฌ์ ์กฐ๊ธ ์ํํจ์ด ์์๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ ์ณค๋ ์ฝ๋ฉ ํ ์คํธ์์ CS ์ง์ ์ค ์ ํ ์ ๋ ฌ๊ณผ ๋ฒ๋ธ ์ ๋ ฌ์ ๋ํด ๋ฌผ์ด๋ณด๋ ๋ฌธ์ ๊ฐ ๋์๋ค. ์! ๋ง์นจ ๋์์ 4์ฅ๊ณผ 5์ฅ์ด ๋ฒ๋ธ ์ ๋ ฌ๊ณผ ์ ํ ์ ๋ ฌ์ ๋ํด ์์ธํ๊ฒ ์ค๋ช ํ๊ณ ์์ด์ ํด๋น ๋ฌธ์ ๋ฅผ ๋ง์ถ ์ ์์๋ค. ์ญ์ ๊ณต๋ถ๋ ๊ธฐ๋ณธ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๋ค์ ๊นจ๋ฌ์๋ค. ๊ธฐ๋กํ์ง ์์ผ๋ฉด ๊น๋จน์ ๊ฒ ๊ฐ์์ ๋์จํด์ง์ง ๋ง์๋ ๋ค์ง์ผ๋ก ์ฌ๊ธฐ ๊ธฐ๋กํ๋ค.
- ๋ฐฐ์ด์ด ์ ๋ ฌ๋์ด ์์ง ์๋ค๋ฉด ์ปดํจํฐ๋ ์ ํ ๊ฒ์์ ํด์ผ ํ๋ฏ๋ก ํน์ ๊ฐ์ด ๋ฐฐ์ด ๋ด์ ์กด์ฌํ๋์ง ๊ฒ์ํ๊ธฐ ์ํด O(N)์ ์ํ ๋จ๊ณ๊ฐ ํ์ํ๋ค.
- ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ผ๋ฉด ์ปดํจํฐ๊ฐ ์ด์ง ๊ฒ์์ ์ํํ ์ ์์ผ๋ฏ๋ก O(log N)์ ์ํ ๋จ๊ณ๊ฐ ํ์ํ๋ค.
- ๊ทธ๋ฌ๋ ์ฌ์ค ๋ ์ข์์ง ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ O(1)๋ง์ ์ฐพ์๋ผ ์ ์๋ ํด์ ํ ์ด๋ธ์ด๋ผ๋ ํน์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์๋ณธ๋ค.
- ๊ทธ๋ฆฌ๊ณ ํด์ ํ ์ด๋ธ์ ์ด๋์ ์ฌ์ฉํ๋ฉด ์ข์์ง์ ๋ํด ์์๋ณธ๋ค.
1. ํด์ ํ ์ด๋ธ
- ๋น ๋ฅธ ์ฝ๊ธฐ
- ํด์ ํ ์ด๋ธ์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฐ๋ค.
- ํด์, ๋งต, ํด์ ๋งต, ๋์ ๋๋ฆฌ, ์ฐ๊ด ๋ฐฐ์ด ๋ฑ๋ฑ…
- ํด์ ํ ์ด๋ธ์ ๊ฐ ๋ฃฉ์ ์ ๋ฑ ํ ๋จ๊ณ๋ง ๊ฑธ๋ฆฐ๋ค. ์ฆ, ํ๊ท ํจ์จ์ฑ์ด O(1)์ด๋ค.
2. ํด์ ํจ์๋ก ํด์ฑ
- ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ๋ ๊ณผ์ ์ ํด์ฑ(Hashing)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ํ, ๊ธ์๋ฅผ ํน์ ์ซ์๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉํ ์ฝ๋๋ฅผ ํด์ ํจ์(Hash function)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ํด์ ํจ์๊ฐ ์ ํจํ๊ธฐ ์ํด์๋ ๋ฑ ํ ๊ฐ์ง ๊ธฐ์ค์ ์ถฉ์กฑํด์ผ ํ๋ค. ํด์ ํจ์๋ ๋์ผํ ๋ฌธ์์ด์ ํด์ ํจ์์ ์ ์ฉํ ๋๋ง๋ค ํญ์ ๋์ผํ ์ซ์๋ก ๋ณํํด์ผ ํ๋ค.
- ์ฆ ๋์, ํ์ฌ ์๊ฐ์ ๊ณ์ฐ์ ๋ฃ์ด ์ฌ์ฉํ๋ ํด์ ํจ์๋ ์ ํจํ์ง ์๋ค.
4. ํด์ ํ ์ด๋ธ ๋ฃฉ์
- ํด์ ํ ์ด๋ธ์์ ํญ๋ชฉ์ ๋ฃฉ์ ํ ๋๋ ํค๋ฅผ ์ฌ์ฉํด ์ฐ๊ด๋ ๊ฐ์ ์ฐพ๋๋ค.
- ์ปดํจํฐ๋ ๊ฐ๋จํ ๋ ๋จ๊ณ๋ฅผ ์คํํ๋ค.
- ๋ฃฉ์ ํ๋ ํค๋ฅผ ํด์ฑํ๋ค.
- ํด์ฑ ๊ฒฐ๊ณผ์ ํด๋นํ๋ ์ ์ ์ฐพ์๊ฐ์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๋ค.
- ํด์ ํ ์ด๋ธ์์ ๊ฐ ๊ฐ์ ์์น๋ ํค๋ก ๊ฒฐ์ ๋๋ค.
- ์ฆ ํค ์์ฒด๋ฅผ ํด์ฑํด ํค์ ์ฐ๊ด๋ ๊ฐ์ด ๋์ฌ์ผ ํ๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ฐํ๋ค.
- ํค๊ฐ ๊ฐ์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ฏ๋ก ์ด ์๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฃฉ์ ์ด ์์ฃผ ์ฌ์์ง๋ค.
4.1 ๋จ๋ฐฉํฅ(One - directional) ๋ฃฉ์
- ํด์ ํ ์ด๋ธ์์ ํ ๋จ๊ณ๋ง์ ๊ฐ์ ์ฐพ๋ ๊ธฐ๋ฅ์ ๊ทธ ๊ฐ์ ํค๋ฅผ ์ ๋๋ง ๊ฐ๋ฅํ๋ค.
- ์ฆ, ํค๋ฅผ ๋ชจ๋ฅธ ์ฑ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ํด์ ํ ์ด๋ธ ๋ด ๋ชจ๋ ํค/๊ฐ ์์ ๊ฒ์ํ๋ ์๋ฐ์ ์๊ณ ์ด๋ O(N)์ด๋ค.
- ๊ฐ์ ์๋ฆฌ๋ก ํค๋ฅผ ์ฌ์ฉํด ๊ฐ์ ์ฐพ์ ๋๋ง O(1) ๋ฃฉ์ ์ด ๊ฐ๋ฅํ๋ค.
- ๊ฑฐ๊พธ๋ก ๊ฐ์ ์ด์ฉํด ์ฐ๊ด๋ ํค๋ฅผ ์ฐพ์ ๋๋ ํด์ ํ ์ด๋ธ์ ๋น ๋ฅธ ๋ฃฉ์ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋ค.
- ๊ฐ์ผ๋ก๋ ํค์ ์์น๋ฅผ ์์๋ด์ง ๋ชปํ๋ ์ ๋ถ ํ๋ ๊ฒ ์ธ์๋ ํค๋ฅผ ์ฐพ์ ๋ฐฉ๋ฒ์ด ์๋ค.
- ๊ทธ๋ ๋ค๋ฉด ํค๋ ์ด๋์ ์ ์ฅ๋ ๊น?
- ์ธ์ด์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ด๋ค ์ธ์ด๋ ๊ฐ ๋ฐ๋ก ์์ ํค๋ฅผ ์ ์ฅํ๋ค.
- ๋๋ถ๋ถ์ ์ธ์ด๋ ์ด๋ฏธ ์กด์ฌํ๋ ํค์ ํค/๊ฐ ์์ ์ ์ฅํ๋ ค ํ๋ฉด ํค๋ ๊ทธ๋๋ก ๋๊ณ ๊ธฐ์กด ๊ฐ๋ง ๋ฎ์ด์ด๋ค.
5. ์ถฉ๋ ํด๊ฒฐ
- ํด์ ํ ์ด๋ธ์ ์ ๋ง ๊ทผ์ฌํ์ง๋ง ๋ฌธ์ ๋ ์๋ค.
- ์ด๋ฏธ ์ฑ์์ง ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ถฉ๋(collision)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ถฉ๋์ ํด๊ฒฐํ๋ ๊ณ ์ ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ ๋ถ๋ฆฌ ์ฐ๊ฒฐ๋ฒ(separate chaining)์ด๋ค.
- ์ถฉ๋์ด ๋ฐ์ํ์ ๋ ์ ์ ํ๋์ ๊ฐ์ ๋ฃ๋ ๋์ ๋ฐฐ์ด๋ก์ ์ฐธ์กฐ๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ปดํจํฐ๊ฐ ํค ํด์ฑ์ ํตํด ํ์ธํ ์ ์ด ๋ฐฐ์ด์ ์ฐธ์กฐํ ๊ฒฝ์ฐ ๋ค์์ ๊ฐ์ด ๋ค์ด ์๋ ๋ฐฐ์ด์ ์ ํ ๊ฒ์ํด์ผ ํ๋ฏ๋ก ๊ฒ์ ๋จ๊ณ๊ฐ ๋ ๊ฑธ๋ฆฐ๋ค.
- ๋ง์ฝ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํด์ ํ ์ด๋ธ์ ํ ์ ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค๋ฉด ํด์ ํ ์ด๋ธ์ ๋ฐฐ์ด๋ณด๋ค ๋์ ๊ฒ ์๋ค.
- ๋ฐ๋ผ์ ์ต์ ์ ๊ฒฝ์ฐ ํด์ ํ ์ด๋ธ ๋ฃฉ์ ์ฑ๋ฅ์ ์ฌ์ค์ O(N)์ด๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํด์ ํ ์ด๋ธ์ ์ถฉ๋์ด ๊ฑฐ์ ์๋๋ก, O(N)์ด ์๋ O(1) ์๊ฐ ๋ด์ ์ผ๋ฐ์ ์ผ๋ก ๋ฃฉ์ ์ ์ํํ๋๋ก ๋์์ธํด์ผ ํ๋ค.
6. ํจ์จ์ ์ธ ํด์ ํ ์ด๋ธ ๋ง๋ค๊ธฐ
- ๊ถ๊ทน์ ์ผ๋ก ํด์ ํ
์ด๋ธ์ ๋ค์ ์ธ ์์ธ์ ๋ฐ๋ผ ํจ์จ์ฑ์ด ์ ํด์ง๋ค.
- ํด์ ํ ์ด๋ธ์ ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๊ฐ
- ํด์ ํ ์ด๋ธ์์ ์ผ๋ง๋ ๋ง์ ์ ์ ์ธ ์ ์๋๊ฐ
- ์ด๋ค ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋๊ฐ
- ํด์ ํจ์๊ฐ ์ ํจ์จ์ฑ์ ์ข์ฐํ๋์ง ์์๋ณด์.
- ์๋ฅผ ๋ค์ด, ํด์ ํ ์ด๋ธ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ด 20๊ฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
- ์ฌ์ฉํ๋ ํด์ ํจ์๋ 0๋ถํฐ 9๊น์ง์ ์ซ์๋ฅผ ๋ฐํํ๋ค๋ฉด, ๋๋จธ์ง 10๊ฐ์ ์ ์ ์ฌ์ฉ๋์ง ์๋๋ค.
- ์ฆ, ์ข์ ํด์ ํจ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ํค๋ ํจ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋๊ฒ ํผ๋จ๋ฆด์๋ก ์ถฉ๋์ด ์ ๋ค.
6.1 ํ๋ฅญํ ์ถฉ๋ ์กฐ์
- ์ถฉ๋ ํ์๊ฐ ์ค์ด๋ค์๋ก ํด์ ํ ์ด๋ธ์ ํจ์จ์ฑ์ด ๋์์ง๋ค.
- ์ด๋ก ์ ์ถฉ๋์ ํผํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ํด์ ํ ์ด๋ธ์ ๋ง์ ์ ์ ๋๋ ๊ฒ์ด๋ค.
- ํ์ง๋ง ์ถฉ๋์ ํผํ๋ ๊ฒ ์ธ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ก์๋จน์ง ์๋๋ก ๊ท ํ์ ๋ง์ถฐ์ผ ํ๋ค.
- ์ข์ ํด์ ํ ์ด๋ธ์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ์ง ์์ผ๋ฉด์ ๊ท ํ์ ์ ์งํ๋ฉฐ ์ถฉ๋์ ํผํ๋ค.
- ์ถฉ๋ ์กฐ์ ์ ์ํด ์ปดํจํฐ ๊ณผํ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝํ์ ๊ธฐ๋ฐํ ๊ท์น์ ์ธ์ ๋ค.
- ํด์ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํด์ ํ ์ด๋ธ์ ์ ๊ฐ์ ๋น์จ์ ๋ถํ์จ(load factor)์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ด์์ ์ธ ๋ถํ์จ์ 0.7์ด๋ค.
- ํด์ ํ ์ด๋ธ ๋ด๋ถ๋ ๋๋ถ๋ถ ์ฌ์ฉ์๊ฐ ์ฐ๊ณ ์๋ ์ปดํจํฐ ์ธ์ด๊ฐ ๊ด๋ฆฌํ๋ค.
- ์ปดํจํฐ ์ธ์ด๋ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ, ํด์ ํจ์์ ์ข ๋ฅ, ํ์ฅ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค.
8. ํด์ ํ ์ด๋ธ๋ก ์๋ ์ฌ๋ฆฌ๊ธฐ
- ํด์ ํ ์ด๋ธ์ ์์ผ๋ก ๋ ๋ฐ์ดํฐ์ ์ ๋ง์ง๋ง ์์ด ์๋ ๋ฐ์ดํฐ๋ผ๋ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋ค ๋ ์ฐ์ผ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ด ์๋ค๊ณ ํ์.
- array = [ 61, 30, 90, 11, 54, 38, 72 ]
- ์ด ๋ฐฐ์ด ๋ด์์ ํน์ ์๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ N๋จ๊ณ์ ์ ํ ๊ฒ์์ ์ํํด์ผ ํ๋ค.
- ๊ทธ๋ฌ๋ ์ด ๋ฐฐ์ด์ ์์๋ฅผ ํค๋ก ํ๋ ํด์ ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค๋ฉด
- map = (61, true), (30, true), (90, true), (11, true), (54, true), (38, true), (72, true) map[61] = true
- ํ ๋จ๊ณ๋ง์ ์ซ์ 61์ ๋ฃฉ์ ํ ์ ์๋ค.
- ์ฆ, ๋ฐฐ์ด์ ํด์ ํ ์ด๋ธ๋ก ๋ณํํ๋ฉด O(N) ๊ฒ์์ด O(1) ๊ฒ์์ผ๋ก ๋ฐ๋๋ค.
- ํด์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ ์ด ๊ธฐ๋ฒ์ ๋ฐฐ์ด์ ์ฌ๋ฌ ๋ฒ ๊ฒ์ํด์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฃผ ์ฐ์ธ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐฐ์ด์ ๊ฐ์ ๊ณ์ ๊ฒ์ํด์ผ ํ๋ค๋ฉด ๋งค ๊ฒ์์๋ง ์ต๋ N๋จ๊ณ์ฉ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํค๋ก ํด์ ํ ์ด๋ธ์ ๋ฃฉ์ ํด์ ์ด๋ค ์์์ ๊ฐ(์ด๊ธฐํ๋ ๊ฐ)์ ๋ฐ๋๋ค๋ฉด ๊ทธ ํค๊ฐ ํด์ ํ ์ด๋ธ์ ์กด์ฌํ๋ค๋ ๋ป์ด๋ค.
9. ๋ง๋ฌด๋ฆฌ
- ํด์ ํ ์ด๋ธ์ O(1) ์ฝ๊ธฐ์ ์ฝ์ ์ ์ฝ๊ฒ ๋ฐ๋ผ์ก์ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ค.
- ๋ฐฐ์ด๊ณผ ํด์ ํ ์ด๋ธ์ ํตํด ํจ์จ์ฑ๊ณผ ์๋๋ฅผ ์ค์ฌ์ผ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ถ์ํด ๋ณด์๋ค.
- ๊ทธ๋ฌ๋ ์๋ ์ธ์ ์ฅ์ ์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ๋ ์๋ค.
- ๋ค์ ์ฅ์์๋ ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์๋ณธ๋ค.
'๐๏ธ ์ฑ & ๊ฐ์ ์ ๋ฆฌ > ๐๏ธ ๋๊ตฌ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10์ฅ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ ์ฌ๊ท์ ๋ฐ๋ณต (0) | 2022.12.05 |
---|---|
9์ฅ ์คํ๊ณผ ํ๋ก ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ (0) | 2022.11.18 |
6์ฅ ๊ธ์ ์ ์ธ ์๋๋ฆฌ์ค ์ต์ ํ (0) | 2022.11.04 |
5์ฅ ๋น ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ต์ ํ (0) | 2022.11.03 |
4์ฅ ๋น ์ค๋ก ์ฝ๋ ์๋ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.11.02 |