YS's develop story

Hash Table (ν•΄μ‹œ ν…Œμ΄λΈ”) 정리 λ³Έλ¬Έ

Data Structure

Hash Table (ν•΄μ‹œ ν…Œμ΄λΈ”) 정리

Yusang 2021. 7. 23. 16:50

 πŸ‘¨πŸΌ‍πŸ’» Hash Table (ν•΄μ‹œ ν…Œμ΄λΈ”) 정리 With Python

πŸ₯ Hash Tableμ΄λž€? 

ν‚€(key)에 데이터(Value)λ₯Ό μ €μž₯ν•˜λŠ” 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.

Keyλ₯Ό 톡해 λ°”λ‘œ 데이터λ₯Ό 받을 수 μžˆμœΌλ―€λ‘œ, 속도가 맀우 λΉ λ¦…λ‹ˆλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” λ”•μ…”λ„ˆλ¦¬ νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

πŸ‹ κ°„λ‹¨ν•œ ν•΄μ‹œ μ˜ˆμ‹œ 

hashTable = [0 for i in range(20)]


def hashFunction(key):
    return key % 8


def insertToHashTable(data, value):
    key = ord(data[0])
    hashAddress = hashFunction(key)
    hashTable[hashAddress] = value


def getFromHashTable(data):
    key = ord(data[0])
    hashAddress = hashFunction(key)
    return hashTable[hashAddress]

해쉬 ν…Œμ΄λΈ”μ€ μœ„μ™€ 같이 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 μƒμ„±λœ ν•΄μ‹œ μ£Όμ†Œμ— 맞게 데이터가 μ €μž₯λ˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

μ΄λ•Œ 킀값이 λ™μΌν•˜κ²Œ 생성될 경우 ν•΄μ‹œ 좩돌이 일어날 수 μžˆλŠ”λ° 

μ•„λž˜μ—μ„œ μžμ„Ένžˆ μ‚΄νŽ΄λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€.

λ˜ν•œ 맀우 κ°„λ‹¨ν•˜κ²Œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό κ΅¬μ„±ν•˜μ˜€μ§€λ§Œ

μ΄λ ‡κ²Œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό κ΅¬μ„±ν•˜μ—¬μ„œλŠ” μ•ˆλ˜κ³  μ€‘λ³΅λœ 킀값이 λ‚˜μ˜€μ§€ μ•Šλ„λ‘ 쒋은 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό

κ΅¬μ„±ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€ 

 

insertToHashTable("밍ꡬ리","01012340811")
insertToHashTable("쌈무","01056780811")
insertToHashTable("μ•ˆλŒ•λŒ•","01099990811")

print(getFromHashTable("밍ꡬ리"))
print(getFromHashTable("쌈무"))
print(getFromHashTable("μ•ˆλŒ•λŒ•"))

좜λ ₯ μ˜ˆμ‹œ

 

🍊 해쉬 ν…Œμ΄λΈ”μ˜ μž₯단점 및 μ£Όμš” μš©λ„ 

μ£Όμš” μš©λ„

 

μΊμ‹œ κ΅¬ν˜„ μ‹œ 해쉬 ν…Œμ΄λΈ”μ΄ μ‚¬μš©λ©λ‹ˆλ‹€. -> 쀑볡 확인이 맀우 쉽기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

μΊμ‹œλŠ” λ°μ΄ν„°λ‚˜ 값을 미리 볡사해 λ†“λŠ” μž„μ‹œ μž₯μ†Œλ₯Ό λ§ν•©λ‹ˆλ‹€.

μΊμ‹œλŠ” μΊμ‹œμ˜ μ ‘κ·Ό μ‹œκ°„μ— λΉ„ν•΄ μ›λž˜ 데이터λ₯Ό μ ‘κ·Όν•˜λŠ” μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” κ²½μš°λ‚˜ 값을 λ‹€μ‹œ κ³„μ‚°ν•˜λŠ” μ‹œκ°„μ„ μ ˆμ•½ν•˜κ³  싢은 κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€.

(ex λ˜‘κ°™μ€ μ‚¬μ΄νŠΈλ₯Ό λ‹€μ‹œ λ„μšΈ λ•Œλ§ˆλ‹€ μ‚¬μ΄νŠΈμ˜ λͺ¨λ“  이미지λ₯Ό λ‹€μ‹œ λΆˆλŸ¬μ˜€λŠ” 것은 맀우 느릴 κ²ƒμž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 이미지 쀑 λ³€ν•˜μ§€ μ•Šμ€ 이미지 일뢀λ₯Ό μΊμ‹œμ— μ €μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.)

 

πŸ‰ 해쉬 좩돌 및 ν•΄κ²° 방법 

ν•΄μ‹œ ν•¨μˆ˜μ— μ˜ν•˜μ—¬ μƒμ„±λœ ν‚€ 값이 동일할 경우 같은 데이터가 같은 곡간에 μ €μž₯되게 λ˜λŠ”

ν•΄μ‹œ 좩돌이 μΌμ–΄λ‚˜κ²Œ λ©λ‹ˆλ‹€.

λ¬Όλ‘  같은 ν‚€ 값이 μƒμ„±λ˜μ§€ μ•Šλ„λ‘ 쒋은 ν•΄μ‹œ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜μ§€λ§Œ

해쉬 좩돌이 λ°œμƒν•  μ‹œ ν•΄κ²° 방법은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

 

1. Chaining 기법

 

2. Linear Probing 기법

 

🍈 μ‹œκ°„ λ³΅μž‘λ„ 

'Data Structure' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Heap (νž™) 정리  (0) 2021.07.28
Tree (트리) 정리  (0) 2021.07.27
Linked List (λ§ν¬λ“œ 리슀트) 정리  (0) 2021.07.23
Stack (μŠ€νƒ) 정리  (0) 2021.07.22
Queue (큐) 정리  (0) 2021.07.22
Comments