mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-01 03:24:24 +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)")
 | |
|     }
 | |
| }
 | 
