golang的原生字符串哈希函数是完美的吗?

我在golang的源代码中发现了这个函数,并想知道它是否真的是一个完美的哈希函数。这是测试的正确方法吗?



package main


import (

    "fmt"

    "strconv"

    "unsafe"

)


//go:linkname strhash runtime.strhash

func strhash(p unsafe.Pointer, h uintptr) uintptr


const seed = 666

func main() {

    m := make(map[uintptr]string)

    for i := 0; i < 1000000000; i++ {

        key := strconv.Itoa(i)

        hash := strhash(unsafe.Pointer(&key), seed)

        _, exist := m[hash]

        if exist {

            fmt.Println("collision")

            break

        }

        m[hash] = key

    }


    fmt.Println("finish")

}


温温酱
浏览 113回答 1
1回答

红糖糍粑

据我所知,事实并非如此。它使用 AES 指令来创建哈希。您可能想查看类似&nbsp;https://github.com/cespare/mph&nbsp;的东西。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go