/** * File: simple_hash.kt * Created Time: 2024-01-25 * Author: curtishd (1023632660@qq.com) */ package chapter_hashing const val MODULUS = 10_0000_0007 /* 加法雜湊 */ fun addHash(key: String): Int { var hash = 0L for (c in key.toCharArray()) { hash = (hash + c.code) % MODULUS } return hash.toInt() } /* 乘法雜湊 */ fun mulHash(key: String): Int { var hash = 0L for (c in key.toCharArray()) { hash = (31 * hash + c.code) % MODULUS } return hash.toInt() } /* 互斥或雜湊 */ fun xorHash(key: String): Int { var hash = 0 for (c in key.toCharArray()) { hash = hash xor c.code } return hash and MODULUS } /* 旋轉雜湊 */ fun rotHash(key: String): Int { var hash = 0L for (c in key.toCharArray()) { hash = ((hash shl 4) xor (hash shr 28) xor c.code.toLong()) % MODULUS } return hash.toInt() } /* Driver Code */ fun main() { val key = "Hello 演算法" var hash: Int = addHash(key) println("加法雜湊值為 $hash") hash = mulHash(key) println("乘法雜湊值為 $hash") hash = xorHash(key) println("互斥或雜湊值為 $hash") hash = rotHash(key) println("旋轉雜湊值為 $hash") }