mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	feat: add rust codes for simple_hash (#724)
This commit is contained in:
		@ -89,6 +89,11 @@ path = "chapter_stack_and_queue/array_deque.rs"
 | 
			
		||||
name = "linkedlist_deque"
 | 
			
		||||
path = "chapter_stack_and_queue/linkedlist_deque.rs"
 | 
			
		||||
 | 
			
		||||
# Run Command: cargo run --bin simple_hash
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "simple_hash"
 | 
			
		||||
path = "chapter_hashing/simple_hash.rs"
 | 
			
		||||
 | 
			
		||||
# Run Command: cargo run --bin hash_map
 | 
			
		||||
[[bin]]
 | 
			
		||||
name = "hash_map"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								codes/rust/chapter_hashing/simple_hash.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								codes/rust/chapter_hashing/simple_hash.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,71 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: simple_hash.rs
 | 
			
		||||
 * Created Time: 2023-09-07
 | 
			
		||||
 * Author: night-cruise (2586447362@qq.com)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* 加法哈希 */
 | 
			
		||||
fn add_hash(key: &str) -> i32 {
 | 
			
		||||
    let mut hash = 0_i64;
 | 
			
		||||
    const MODULUS: i64 = 1000000007;
 | 
			
		||||
 | 
			
		||||
    for c in key.chars() {
 | 
			
		||||
        hash = (hash + c as i64) % MODULUS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hash as i32
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
/* 乘法哈希 */
 | 
			
		||||
fn mul_hash(key: &str) -> i32 {
 | 
			
		||||
    let mut hash = 0_i64;
 | 
			
		||||
    const MODULUS: i64 = 1000000007;
 | 
			
		||||
 | 
			
		||||
    for c in key.chars() {
 | 
			
		||||
        hash = (31 * hash + c as i64) % MODULUS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hash as i32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 异或哈希 */
 | 
			
		||||
fn xor_hash(key: &str) -> i32 {
 | 
			
		||||
    let mut hash = 0_i64;
 | 
			
		||||
    const MODULUS: i64 = 1000000007;
 | 
			
		||||
 | 
			
		||||
    for c in key.chars() {
 | 
			
		||||
        hash ^= c as i64;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    (hash & MODULUS) as i32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 旋转哈希 */
 | 
			
		||||
fn rot_hash(key: &str) -> i32 {
 | 
			
		||||
    let mut hash = 0_i64;
 | 
			
		||||
    const MODULUS: i64 = 1000000007;
 | 
			
		||||
 | 
			
		||||
    for c in key.chars() {
 | 
			
		||||
        hash = ((hash << 4) ^ (hash >> 28) ^ c as i64) % MODULUS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    hash as i32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Driver Code */
 | 
			
		||||
fn main() {
 | 
			
		||||
    let key = "Hello 算法";
 | 
			
		||||
 | 
			
		||||
    let hash = add_hash(key);
 | 
			
		||||
    println!("加法哈希值为 {hash}");
 | 
			
		||||
 | 
			
		||||
    let hash = mul_hash(key);
 | 
			
		||||
    println!("乘法哈希值为 {hash}");
 | 
			
		||||
 | 
			
		||||
    let hash = xor_hash(key);
 | 
			
		||||
    println!("异或哈希值为 {hash}");
 | 
			
		||||
 | 
			
		||||
    let hash = rot_hash(key);
 | 
			
		||||
    println!("旋转哈希值为 {hash}");
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user