DOing
[์๋ฃ๊ตฌ์กฐ] ํด์ฌ ํ ์ด๋ธ with Python ๋ณธ๋ฌธ
๐ก ํด์ฌ ํ ์ด๋ธ?
: ํด์ํ ์ด๋ธ์ ํค์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๊ตฌ์กฐ์ด๋ค.
: ํค๋ฅผ ํด์ํจ์๋ก ์ฐ์ฐํ์ฌ ํด์ ๊ฐ์ ์์๋ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํค์ ๋ํ ๋ฐ์ดํฐ๊ฐ์ ์์๋ผ ์ ์๋ค.
: ์ฆ, ํค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์์๋ผ ์ ์์ด ์๋๊ฐ ํ๊ธฐ์ ์ผ๋ก ๋นจ๋ผ์ง๋ค.
: ํ์ด์ฌ์ ๋์ ๋๋ฆฌ ํ์ ์ด ๋ฐ๋ก ํด์ํ ์ด๋ธ๊ตฌ์กฐ๋ก ๊ตฌํ ๋์ด์๋ค.
๐ก ํด์ฌ ํ ์ด๋ธ ๊ตฌํํ๊ธฐ
class Dict:
def __init__(self):
self.items = [None] * 8
def put(self, key, value):
index = hash(key) % len(self.items)
self.items[index] = value
def get(self, key):
index = hash(key) % len(self.items)
return self.items[index]
my_dict = Dict()
my_dict.put("test", 3)
print(my_dict.get("test")) # 3์ด ๋ฐํ
๐ก ํด์ฌ ํ ์ด๋ธ์ ํน์ง
[ ์ฅ์ ]
1) ํค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์์๋ผ ์ ์์ด ์ ์ฅ/์ฝ๊ธฐ ์๋๊ฐ ๊ต์ฅํ ๋นจ๋ผ์ง๋ค.
-> ๋ฐฐ์ด์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์์๋ค์ ํ๋์ฉ ํ์ํด์ผํ๋ค.
2) ํด์๋ ํค์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธ์ด ์ฌ์(์ค๋ณต ์ฒดํฌ)
[ ๋จ์ ]
1) ์ ์ฅ ๊ณต๊ฐ์ด ๋ง์ด ํ์ํ๋ค.
-> ๊ณต๊ฐ๊ณผ ํ์์๊ฐ์ ๋ง๋ฐ๊พธ๋ ๊ธฐ๋ฒ์ด๋ค.
2) ๋ฐ์ดํฐ ๊ณต๊ฐ์ ์๊ฒ ์ก์ผ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
-> ํค์ ํด๋นํ๋ ์ฃผ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ, ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ณ๋์ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค.
-> ํ๋จ์ ํด์ํ ์ด๋ธ์ ์ถฉ๋ ํด๊ฒฐ ์ฐธ๊ณ
[ ์ฃผ์ ์ฉ๋ ]
1) ๊ฒ์์ด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ
2) ์ ์ฅ/์ญ์ /์ฝ๊ธฐ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ
3) ์บ์ฌ ๊ตฌํ์(์ค๋ณต ์ฒดํฌ๊ฐ ๋น ๋ฅด๊ฒ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ)
๐ก ํด์ ํ ์ด๋ธ์ ์ถฉ๋ ํด๊ฒฐ
1) Open hashing(๊ฐ๋ฐฉ ํด์)
: ์ถฉ๋์ด ๋ฐ์ํ ๋ฐ์ดํฐ์ ๋ํด์๋ ํด์ํ ์ด๋ธ ๋ฐ์ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
open hashing์ ๋ํ์ ์ธ ์๋ channing๊ธฐ๋ฒ์ด ์๋ค.
channing ๊ธฐ๋ฒ์์๋ ์ถฉ๋์ด ์ผ์ด๋๋ฉด linked list๋ฅผ ์ด์ฉํด์ ๋ค์ ์ฐ๊ฒฐ์์ผ ์ ์ฅํ๋ค.
์ด๋ ์ผ๋งํผ ์ถฉ๋์ด ์ผ์ด๋ ์ง๋ฅผ ๋ชฐ๋ผ์ ๋ฐฐ์ด์ด ์๋ linked list๋ฅผ ์ด๋ค.
2) Linear Probing(ํ์ ํด์)
: ํด์ ํ ์ด๋ธ์ ๋น ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
: hash address์ ๋ค์๋ถํฐ ๋งจ ์ฒ์ ๋์ค๋ ๋น๊ณต๊ฐ์ ์ ์ฅํ๋ค.
: ์ ์ฅ๊ณต๊ฐ ํ์ฉ๋๋ฅผ ๋์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ก ํด์ ํ ์ด๋ธ์ ์๊ฐ๋ณต์ก๋
1) ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ O(1)
2) ์ต์ ์ ๊ฒฝ์ฐ(์ถฉ๋์ด ๋ชจ๋ ์ผ์ด๋๋ ๊ฒฝ์ฐ) O(n)
ํ์ง๋ง ํด์ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ๋ํ๊ณ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ผ๊ณ ํ ์ ์๋ค.
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ฐ์ ์์ ํ, ํ (0) | 2021.05.19 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ with Python (0) | 2021.05.18 |
์๊ฐ ๋ณต์ก๋ - ๋น ์คํ๊ธฐ๋ฒ (0) | 2021.05.18 |
[์๋ฃ๊ตฌ์กฐ] ๋ฆฌ์คํธ with Python (0) | 2021.05.18 |
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด with Python (0) | 2021.05.18 |