๊ฐœ๋ฐœ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ด€๋ จ

[Hash Table] Hash Table์„ ๊ตฌํ˜„ํ•ด๋ณด์ž

๋ฉ๋ฉ์ฝฉ 2022. 8. 23. 21:14

Hash Table

https://zzong-a.tistory.com/196

 

[์ž๋ฃŒ๊ตฌ์กฐ] Hash / Hash Table in Python

์ž๋ฃŒ๊ตฌ์กฐ๋ž€ ์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ ํšจ์œจ์ ์ธ ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •์„ ๊ฐ€๋Šฅ์ผ€ํ•˜๋Š” ์ž๋ฃŒ์˜ ์กฐ์ง, ๊ด€๋ฆฌ, ์ €์žฅ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ๋ชจ์ž„, ๋˜ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”

zzong-a.tistory.com

์˜ˆ์ „์— ํŒŒ์ด์ฌ์œผ๋กœ ๊ธฐ๋กํ•ด๋‘” Hash Table์ด ์žˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์œ„ ๊ฒŒ์‹œ๊ธ€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.!

 

๋Œ€๋žต ๋ช‡์ค„๋กœ ์š”์•ฝํ•ด๋ณด์ž๋ฉด,

[key, value] ---- (Hash Func์— key๋ฅผ ๋„ฃ์–ด์„œ ์•”ํ˜ธํ™”!) -----> [Hash Table, value]

key๋ฅผ hash ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผ์‹œ์ผœ ์•”ํ˜ธํ™”๋ฅผ ํ•ด์„œ hash table์— ์ €์žฅ์‹œ์ผœ๋’€์Œ !

๊ทผ๋ฐ ์šฐ๋ฆฌ๋Š” value๋ฅผ ์•Œ๊ณ ์‹ถ์œผ๋‹ˆ๊นŒ ์•”ํ˜ธํ™”ํ•œ ๋ฐฉ์‹ ๊ทธ๋Œ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ์‹ถ์€ value์˜ Key๋ฅผ ํ•ด์‹œํ•จ์ˆ˜์— ๋„ฃ์–ด์„œ ์•”ํ˜ธํ™” ๋งค์นญ๋œ ๊ฐ’์— ์žˆ๋Š” value๋ฅผ ์ฝ์–ด์˜ค๋ฉด ๋ ! 

 

 

๊ทธ๋ ‡๋‹ค๋ฉด swift ์—์„œ hash table์„ ์•Œ์•„๋ณด์งœ!

import Foundation

var hashTable: [String?] = .init(repeating: nil, count: 3)

//์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ•ด์‹œํ•จ์ˆ˜
func hash(key: Int) -> Int {
    return key % 3
}

func updateValue(_ value: String, forKey key: String) {
    guard let key = UnicodeScalar(key)?.value else { return } //key๊ฐ’์„ String -> Int(Unicode์ด์šฉ)
    let hashAddr = hash(key: Int(key))
    hashTable[hashAddr] = value
}

func getValue(forKey key: String) -> String? {
    guard let key = UnicodeScalar(key)?.value else { return nil }
    let hashAddr = hash(key: Int(key))
    return hashTable[hashAddr]
}

updateValue("์žฌ์„", forKey: "์œ ")
updateValue("๋ช…์ˆ˜", forKey: "๋ฐ•")
print(getValue(forKey: "์œ ")!)
print(getValue(forKey: "๋ฐ•")!)

 

์œ„์˜ ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋‹จ์ˆœํ•œ ๋‚˜๋จธ์ง€ 

key "์œ "์™€ "์ด"๋Š” ๊ฐ™์€ ํ•ด์‹œ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด๋ฒ„๋ฆฐ๋‹ค. 

๋”ฐ๋ผ์„œ key- Value๊ฐ€ ๋ฎ์–ด์”Œ์–ด์ง€๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ... ์œ„์˜ ๊ฒŒ์‹œ๊ธ€์—๋„ ์„ค๋ช…ํ•ด๋’€๋˜ Hash collision ์ธ ๊ฒƒ์ด๋‹น.

 

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 1. chaining ๊ธฐ๋ฒ• 2. Linear Probing ๊ธฐ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๋ฐ ํ•œ๋ฒˆ ์•Œ์•„๋ณด์ž ! ์–ด๋ ต๋‹ค! ํž˜๋‚ด์ž!!!!!!1 

(์ˆ˜์ •ํ• ๊ฑฐ์ž„ !! ์ž ์‹œ๋Œ€๊ธฐ )