You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hello-algo/codes/swift/chapter_hashing/simple_hash.swift

74 lines
1.5 KiB

/**
* File: simple_hash.swift
* Created Time: 2023-07-01
* Author: nuomi1 (nuomi1@qq.com)
*/
/* */
func addHash(key: String) -> Int {
var hash = 0
let MODULUS = 1_000_000_007
for c in key {
for scalar in c.unicodeScalars {
hash = (hash + Int(scalar.value)) % MODULUS
}
}
return hash
}
/* */
func mulHash(key: String) -> Int {
var hash = 0
let MODULUS = 1_000_000_007
for c in key {
for scalar in c.unicodeScalars {
hash = (31 * hash + Int(scalar.value)) % MODULUS
}
}
return hash
}
/* */
func xorHash(key: String) -> Int {
var hash = 0
let MODULUS = 1_000_000_007
for c in key {
for scalar in c.unicodeScalars {
hash ^= Int(scalar.value)
}
}
return hash & MODULUS
}
/* */
func rotHash(key: String) -> Int {
var hash = 0
let MODULUS = 1_000_000_007
for c in key {
for scalar in c.unicodeScalars {
hash = ((hash << 4) ^ (hash >> 28) ^ Int(scalar.value)) % MODULUS
}
}
return hash
}
@main
enum SimpleHash {
/* Driver Code */
static func main() {
let key = "Hello 算法"
var hash = addHash(key: key)
print("加法哈希值为 \(hash)")
hash = mulHash(key: key)
print("乘法哈希值为 \(hash)")
hash = xorHash(key: key)
print("异或哈希值为 \(hash)")
hash = rotHash(key: key)
print("旋转哈希值为 \(hash)")
}
}