日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang bloom filter实现

發布時間:2024/1/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang bloom filter实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

package main

import (
?? ?"fmt"
?? ?"math"
)

type BloomFilter struct {
?? ?MLength ? int64 ? //過濾器長度
?? ?MArr ? ? ?[]int64 //過濾器數組
?? ?NCount ? ?int64 ? //插入元素個數
?? ?FalseRate float64 //誤報率
?? ?KHash ? ? int ? ? //hash函數個數
}

//數學公式
// k = ln2 * m /n
// m = - n log p / (log2 )^2

func main() {

?? ?bf := NewBloomFilter(0.0001, 100)
?? ?fmt.Println(bf)
?? ?bf.set([]byte("zhuang"))
?? ?bf.set([]byte("jing"))
?? ?bf.set([]byte("peng"))

?? ?fmt.Println(bf.check([]byte("aa")))
?? ?fmt.Println(bf)
}

func NewBloomFilter(falseRate float64, size int64) *BloomFilter {
?? ?m, k := getFilterParam(falseRate, size)

?? ?return &BloomFilter{
?? ??? ?MLength: ? m,
?? ??? ?MArr: ? ? ?make([]int64, m),
?? ??? ?NCount: ? ?size,
?? ??? ?FalseRate: falseRate,
?? ??? ?KHash: ? ? k,
?? ?}
}

func getFilterParam(falseRate float64, size int64) (int64, int) {

?? ?m := -1 * math.Log(falseRate) * float64(size) / (math.Ln2 * math.Ln2)
?? ?k := m * math.Ln2 / float64(size)
?? ?return int64(m), int(k)
}

func (bf *BloomFilter) set(data []byte) {
?? ?for i := 0; i < bf.KHash; i++ {
?? ??? ?index := bf.hashFun(data, i)
?? ??? ?bf.MArr[index] = 1
?? ?}
}

func (bf *BloomFilter) check(data []byte) bool {
?? ?for i := 0; i < bf.KHash; i++ {
?? ??? ?index := bf.hashFun(data, i)
?? ??? ?if bf.MArr[index] == 0 {
?? ??? ??? ?return false
?? ??? ?}
?? ?}
?? ?return true
}
func (bf *BloomFilter) hashFun(data []byte, count int) int64 {
?? ?hash := int64(5381)
?? ?for i := 0; i < len(data); i++ {
?? ??? ?hash = hash*33 + int64(data[i]) + int64(count)
?? ?}

?? ?res := hash % (bf.MLength - 1)
?? ?return int64(math.Abs(float64(res)))
}
?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的golang bloom filter实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。