Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

基本介绍

常用经典哈希函数Go语言实现,提供uint32uint64类型的哈希函数。

使用方式

Code Block
languagego
import "github.com/gogf/gf/v2/encoding/ghash"

...

接口文档

https://

...

...

...

基准测试

Code Block
languagexml
goos: 

...

darwin
goarch: amd64
pkg: github.com/gogf/gf/v2/encoding/ghash

...


cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Benchmark_BKDR
Benchmark_BKDR-12      	

...

39315165	        

...

26.

...

88 ns/op

...


Benchmark_BKDR64
Benchmark_BKDR64-12    	

...

62891215	        

...

22.

...

61 ns/op

...

Benchmark_SDBM
Benchmark_SDBM-12      	

...

49689925	        25.40

...

 ns/op

...


Benchmark_SDBM64
Benchmark_SDBM64-12    	

...

48860472	        

...

24.

...

38 ns/op

...


Benchmark_RS
Benchmark_RS-12        	

...

39463418	        

...

25.

...

52 ns/op

...


Benchmark_RS64
Benchmark_RS64-12     	

...

53318370	        

...

19.

...

45 ns/op

...

Benchmark_JS
Benchmark_JS-12        	

...

53751033	        

...

23.

...

20 ns/op

...


Benchmark_JS64
Benchmark_JS64-12      	

...

62440287	        

...

19.

...

25 ns/op

...


Benchmark_PJW
Benchmark_PJW-12       	

...

42439626	        

...

27.

...

85 ns/op

...

Benchmark_PJW64
Benchmark_PJW64-12     	

...

37491696	        33.

...

28 ns/op

...

Benchmark_ELF
Benchmark_ELF-12       	

...

38034584	        

...

31.

...

74 ns/op

...


Benchmark_ELF64
Benchmark_ELF64-12     	

...

44047201	        

...

27.

...

58 ns/op

...

Benchmark_DJB
Benchmark_DJB-12       	

...

46994352	        

...

22.

...

60 ns/op

...

Benchmark_DJB64
Benchmark_DJB64-12     	

...

61980186	        

...

19.

...

19 ns/op

...


Benchmark_AP
Benchmark_AP-12        	

...

29544234	        

...

40.

...

58 ns/op

...

Benchmark_AP64
Benchmark_AP64-12      	

...

28123783	        

...

42.

...

48 ns/op

重复测试

测试结果与测试内容有关联性和随机性,我这里通过uint64数值的范围遍历来进行简单的重复性测试,本身不够严谨,因此仅供趣味性参考。

Code Block
languagego
package main

import (
	"encoding/binary"
	"fmt"
	"math"

	"github.com/gogf/gf/v2/encoding/ghash"
)

func main() {
	var (
		m    = make(map[uint64]struct{})
		b    = make([]byte, 8)
		ok   bool
		hash uint64
	)
	for i := uint64(0); i < math.MaxUint64; i++ {
		binary.LittleEndian.PutUint64(b, i)
		hash = ghash.PJW64(b)
		if _, ok = m[hash]; ok {
			fmt.Println("repeated found:", i)
			break
		}
		m[hash] = struct{}{}
	}
}

测试结果如下:

哈希函数重复位置备注
AP648388640
BKDR6433536
DJB648448
ELF644096
JS64734
PJW642
RS64-32G Memory OOM
SDBM64-32G Memory OOM




Panel
titleContent Menu

Table of Contents