ํด์ ํ ์ด๋ธ (Hash Table) ?
- ํค(Key)์ ๋ฐ์ดํฐ(Value)๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- Key๋ฅผ ํตํด ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ผ๋ฏ๋ก, ๋น ๋ฅธ ์๋
- ํ์ด์ฌ์์๋ ๋์ ๋๋ฆฌ(Dictionary) ํ์ ์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ
- ๋ณดํต ๋ฐฐ์ด๋ก ๋ฏธ๋ฆฌ Hash Table ์ฌ์ด์ฆ๋งํผ ์์ฑ ํ ์ฌ์ฉ (๊ณต๊ฐ๊ณผ ํ์ ์๊ฐ ๋ง๋ฐ๊พธ๋ ๊ธฐ๋ฒ)
๊ด๋ จ ์ฉ์ด
- ํด์(Hash) : ์์ ๊ฐ์ ๊ณ ์ ๊ธธ์ด๋ก ๋ณํํ๋ ๊ฒ
- ํด์ ํ ์ด๋ธ(Hash Table) : ํค ๊ฐ์ ์ฐ์ฐ์ ์ํด ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ํด์ฑ ํจ์(Hashing Function) : Key์ ๋ํด ์ฐ์ ์ฐ์ฐ์ ์ด์ฉํด, ๋ฐ์ดํฐ ์์น๋ฅผ ์ฐพ์ ์ ์๋ ํจ์
- ํด์ ๊ฐ(Hash Value), ํด์ ์ฃผ์(Hash Address) : Key๋ฅผ ํด์ฑ ํจ์๋ก ์ฐ์ฐํด์, ํด์ ๊ฐ์ ์์๋ด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด์ ํ ์ด๋ธ์์ ํด๋น Key ์ ๋ํ ๋ฐ์ดํฐ ์์น๋ฅผ ์ผ๊ด์ฑ์๊ฒ ์ฐพ์ ์ ์์
- ์ฌ๋กฏ(Slot) : ํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ
ํด์ ํ ์ด๋ธ ํน์ง
- ์ฅ์
- ๋ฐ์ดํฐ ์ ์ฅ/์ฝ๊ธฐ ์๋๊ฐ ๋น ๋ฅด๋ค (๋น ๋ฅธ ๊ฒ์ ์๋)
- ํค์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์๋์ง(์ค๋ณต) ํ์ธ ์ฌ์
- ๋จ์
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ฅ๊ณต๊ฐ์ด ์ข ๋ ๋ง์ด ํ์ํ๋ค
- ์ฌ๋ฌ ํค์ ํด๋นํ๋ ์ฃผ์๊ฐ ๋์ผํ ๊ฒฝ์ฐ, ์ถฉ๋์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ณ๋์ ์๋ฃ๊ตฌ์กฐ ํ์
- ์ฃผ์ ์ฉ๋
- ๊ฒ์์ด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ
- ์ ์ฅ, ์ญ์ , ์ฝ๊ธฐ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ
- ์บ์ ๊ตฌํ(์ค๋ณต ํ์ธ์ด ์ฝ๊ธฐ ๋๋ฌธ์)
hash_table = list([0 for i in range(8)]) #python list comprehension
def get_key(data):
return hash(data)
def hash_function(key):
return key % 8
def save_data(data, value):
hash_address = hash_function(get_key(data))
hash_table[hash_address] = value
def read_data(data):
hash_address = hash_function(get_key(data))
return hash_table[hash_address]
save_data('Dave', '0102030200')
save_data('Andy', '01033232200')
read_data('Dave') #'0102030200'
hash_table #['0102030200', 0, 0, 0, 0, 0, 0, '01033232200']
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Data Structure] hash() ํด์ ํจ์ (1) | 2024.01.29 |
---|---|
[Data Structure] ์ถฉ๋(Collision) ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ : ํด์ ํจ์ (0) | 2024.01.26 |
[Algorithm] ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋ : ์๊ฐ ๋ณต์ก๋ / Big-O (๋น ์ค) ํ๊ธฐ๋ฒ (1) | 2024.01.26 |
[Data Structure] ๋งํฌ๋ ๋ฆฌ์คํธ (Linked List) (1) | 2024.01.26 |
[Data Structure] ๋ฐฐ์ด(array) / ํ(queue) / ์คํ(stack) (1) | 2024.01.26 |