diff --git a/codes/rust/Cargo.toml b/codes/rust/Cargo.toml index 3db952084..160f9134c 100644 --- a/codes/rust/Cargo.toml +++ b/codes/rust/Cargo.toml @@ -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" diff --git a/codes/rust/chapter_hashing/simple_hash.rs b/codes/rust/chapter_hashing/simple_hash.rs new file mode 100644 index 000000000..bb6299ca7 --- /dev/null +++ b/codes/rust/chapter_hashing/simple_hash.rs @@ -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}"); +} \ No newline at end of file