μλ νμΈμ~
μ€λμ μ°κ²° 리μ€νΈμ μ΄μ΄μ ν΄μ ν μ΄λΈμ μ 리νλ €κ³ ν©λλ€ : )
[ LinkedList ν¬μ€ν ]
ν΄μ ν μ΄λΈμ (Key, Value)λ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘°μ λλ€.
ν΄μ ν μ΄λΈμ λ΄λΆμ μΌλ‘ λ°°μ΄μ μ΄μ©ν΄ μ μ₯νκ³ μμΌλ©°
Keyκ°μ ν΄μ ν¨μλ₯Ό μ μ©ν΄ μ μ₯ν μΈλ±μ€λ₯Ό κ²°μ ν©λλ€.
λ°λΌμ μ½μ , μμ , μ‘°ν λ±μ΄ O(1)μ μκ° λ³΅μ‘λλ₯Ό κ°κ³ μμ΅λλ€.
νν μ°λ¦¬κ° μκ³ μλ λμ λλ¦¬κ° μ΄ μ€μ νλλ‘ λ΄λΆμ μΌλ‘
ν΄μν μ΄λΈμ μ¬μ©νκ³ μμ΅λλ€.
ν΄μ ν μ΄λΈ ꡬν
- λ°°μ΄μ μμ±ν©λλ€.
var myHashTable: [Int?] = .init(repeating: nil, count: 4) // 4κ°
ν΄μ ν¨μ
- ν€κ°μ΄ ν΄μ ν¨μμ λ‘μ§μ ν΅ν΄ μΈλ±μ€ κ°μ κ²°μ ν©λλ€.
- λνμ μΌλ‘ 3κ°μ§κ° μ‘΄μ¬ν©λλ€.
1. λλμ μ μ΄μ©νλ λ°©λ² : μ λ ₯κ°μ ν μ΄λΈμ ν¬κΈ°λ‘ λλμ΄ κ³μ°νκΈ°
- μ£Όμ = μ λ ₯κ° % ν μ΄λΈμ ν¬κΈ°
- ν μ΄λΈμ ν¬κΈ°λ₯Ό μμλ‘ μ νκ³ 2μ μ κ³±μμ λ¨Ό κ°μ μ¬μ©νλ©΄ ν¨μ¨μ΄ μ’λ€κ³ μλ €μ§ λ°©λ²
2. κ³±μ μ μ΄μ©νλ λ°©λ² : μ«μλ‘ λ Keyκ° Kμ 0κ³Ό 1 μ¬μ΄μ μ€μ A, λ³΄ν΅ 2μ μ κ³±μμΈ mμ μ¬μ©νμ¬ κ³μ°.
- h(k)=(k * A * mod 1) × m
3. Digit Folding : κ° Keyμ λ¬Έμμ΄μ ASCII μ½λλ‘ λ°κΎΈκ³ κ°μ ν©ν λ°μ΄ν°λ₯Ό ν μ΄λΈ λ΄μ μ£Όμλ‘ μ¬μ©νλ λ°©λ²μ΄λ€.
- κ°μ₯ 보νΈμ μΌλ‘ μλ €μ§ λλμ λ°©λ²μΌλ‘ μ§ννκ² μ΅λλ€.
private func myHashFunc(key: Int) -> Int {
return key % 4 // ν΄μ ν
μ΄λΈμ΄ 0,1,2,3μ indexλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έ!
}
μ΄ ν΄μν¨μλ₯Ό ν΅ν΄ λμ¨ κ°μ μ΄μ©ν΄ Indexλ₯Ό κ²°μ ν μ μκ² λκ³ μ΄λ₯Ό νμ©ν΄ κ°μ μ μ₯νκ² λ©λλ€.
ν΄μ ν μ΄λΈμ μ μ₯νλ ν¨μ
// λΆκΈ°μ²λ¦¬, μμΈμ²λ¦¬λ₯Ό κ³ λ €νμ§ μκ³ κ°λ¨νκ² κ΅¬ν
func storeValue(value: Int, key: Int) {
let hashAddress = hash(key: key) // μμ ν΄μν¨μλ₯Ό ν΅ν΄ μ£Όμλ₯Ό μ°ΎκΈ°
hashTable[hashAddress] = value // ν΄λΉ μ£Όμμ value λ£κΈ°!
}
ν΄μ ν μ΄λΈμμ κ°μ κ°μ§κ³ μ€λ ν¨μ
func getValue(key: Int) -> Int? {
let hashAddress = hash(key: key)
return hashTable[hashAddress]
}
μ΄λ κ² λ κ°μ§ ν¨μλ₯Ό ꡬννκ³ λλ©΄
ν΄μ ν μ΄λΈμ κΈ°λ³Έμ μΈ κΈ°λ₯μ ν μ μμ΅λλ€.
νμ§λ§
λ§μ½ ν΄μ± μκ³ λ¦¬μ¦μ ν΅ν΄ λμ¨ μΈλ±μ€ κ°μ΄ κ°μ κ²½μ°μλ μ΄λ»κ² λ κΉμ?
Key | 1 | 2 | 3 | 5 |
Value | 2 | 3 | 4 | 5 |
HashAddress | 1 | 2 | 3 | 1 |
μμ νμ²λΌ Keyκ°μ΄ 1κ³Ό 5μΈ κ²½μ°, λͺ¨λ 1λ²μ§Έ μΈλ±μ€μ λ€μ΄κ°κ² λ κ²λλ€.
μ΄λ₯Ό ν΄μ ν μ΄λΈμ μΆ©λμ΄λΌκ³ λ§ν©λλ€.
ν΄μ ν μ΄λΈ μΆ©λ ν΄κ²° λ°©λ²
첫 λ²μ§Έ, Chaining κΈ°λ²
- μ΄λ―Έ ν΄λΉ μΈλ±μ€μ μμκ° μ‘΄μ¬νλ€λ©΄ μ΄λ₯Ό λ€μ μ°μμ μΌλ‘ μ΄μ΄ λΆμ΄λ κΈ°λ²μ λλ€.
- μΌμ μ ν¬μ€ν μμ λ°°μ λ μ°κ²° 리μ€νΈλ₯Ό νμ©νλ λ°©λ²μΌλ‘ κ·Έμ€μμλ λ¨λ°©ν₯ μ°κ²°λ¦¬μ€νΈλ₯Ό μ¬μ©ν©λλ€.
- 1λ²μ§Έ μ£Όμμ (1,2)μ λ Έλκ° μμ κ²½μ° μ΄ λ Έλμ nextλ₯Ό (5,5)λ‘ μ€μ ν΄ μ£Όλ©΄ λ©λλ€.
- [ HashAddress : 1 ] - [1,2] → [5,5]
λ λ²μ§Έ, Linear Probing ( Close Hashing ) κΈ°λ²
- Linear νκ² μμλλ‘ λ€μ λΉ κ³΅κ°μ μ°Ύκ³ κ°μ μ μ₯νλ λ°©λ²μ λλ€.
- Chaining κΈ°λ²μ²λΌ Table μ΄μΈμ 곡κ°μ λ λ§λ€μ§ μκΈ° λλ¬Έμ Close Hashingμ΄λΌκ³ λ λΆλ¦ λλ€.
μ΄ μΈμλ ν΄μμ μ μ₯μμ νμ μ κ³±μΌλ‘ μ€μ νλ λ°©μμΈ Qudratic Probing, ν΄μλ κ°μ νλ² λ ν΄μ±νλ λ°©μμΈ Double Hashing Probingμ΄ μμ΅λλ€.
ν΄μ ν μ΄λΈμ λν΄μ κ°λ¨νκ² μ λ¦¬ν΄ λ΄€μ΅λλ€.
κ·ΈλΌ μ΄λ§ ππ» ππ» ππ»
μ°Έκ³ μλ£
κ°μ¬ν©λλ€ π
'μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μλ£κ΅¬μ‘° - ν(Heap) (0) | 2023.01.30 |
---|---|
[Swift] μλ£κ΅¬μ‘° - μ΄μ§ νμνΈλ¦¬ ( Binary Search Tree ) (0) | 2022.05.14 |
[Swift] μλ£κ΅¬μ‘° - λ¨λ°©ν₯ / μλ°©ν₯ μ°κ²° 리μ€νΈ(Linked List) (2) | 2022.04.20 |
[Swift] μλ£κ΅¬μ‘° - ν(Queue) (0) | 2022.04.19 |
[Swift] μλ£κ΅¬μ‘° - μ€ν(Stack) (0) | 2022.04.18 |