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
(์์ ํ ๊ฑฐ์ !! ์ ์๋๊ธฐ )
'๊ฐ๋ฐ > ์๊ณ ๋ฆฌ์ฆ ๊ด๋ จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Linked List] Linked List๋ฅผ ๊ตฌํํด๋ณด์ง (0) | 2022.08.23 |
---|---|
[Stack] Stack ์ ๊ตฌํํด๋ณด์ (0) | 2022.08.23 |
[Queue] Queue๋ฅผ ๊ตฌํํด๋ณด์ (1) | 2022.08.23 |
์๊ณ ๋ฆฌ์ฆ ํ๊ธฐ ์ฑ๋ฆฐ์ง ๋์ ! (0) | 2022.08.09 |
1์ผ 1์๊ณ ๋ฆฌ์ฆ ํ๊ธฐ ์ฑ๋ฆฐ์ง ๋์ ! 2์ผ์ฐจ (0) | 2022.08.04 |