package main
import (
"flag"
"fmt"
"strconv"
)
var lpower = []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173}
var maxLen = len(lpower)
func getHashStr(hash int) string {
if hash < 10 {
return "0" + strconv.Itoa(hash)
} else {
return strconv.Itoa(hash)
}
}
func Hash(str string, count int) int {
s_sum := 0
for i := 0; i < len(str); i++ {
realInd := i % maxLen
s_sum = s_sum + (int(str[i]) * lpower[realInd])
}
return s_sum % count
}
func SHash(str string, count int) string {
sum := Hash(str, count)
if sum >= 0 && sum <= count-1 {
return getHashStr(sum)
} else {
return ""
}
}
func main() {
var str string
var count int
flag.StringVar(&str, "str", "xxx", "hash str")
flag.IntVar(&count, "count", 10, "hash table count")
flag.Parse()
v := SHash(str, count)
fmt.Println("str:", str, "hash:", v)
}
golang实现:计算hash
于 2023-04-25 17:05:38 首次发布