mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
/**
 | 
						|
 * 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)")
 | 
						|
    }
 | 
						|
}
 |