作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下是我为实现 Flajolet and Martin’s Algorithm
而编写的代码.我使用 Jenkins 哈希函数
生成数据的 32 位哈希值
。该程序似乎遵循了该算法,但偏离了大约 20%。我的数据集包含超过 200,000 条唯一记录,而程序输出大约 160,000 条唯一记录。请帮助我理解我所犯的错误。哈希函数按照 Bob Jerkins' website 实现.
import numpy as np
from jenkinshash import jhash
class PCSA():
def __init__(self, nmap, maxlength):
self.nmap = nmap
self.maxlength = maxlength
self.bitmap = np.zeros((nmap, maxlength), dtype=np.int)
def count(self, data):
hashedValue = jhash(data)
indexAlpha = hashedValue % self.nmap
ix = hashedValue / self.nmap
ix = bin(ix)[2:][::-1]
indexBeta = ix.find("1") #find index of lsb
if self.bitmap[indexAlpha, indexBeta] == 0:
self.bitmap[indexAlpha, indexBeta] = 1
def getCardinality(self):
sumIx = 0
for row in range(self.nmap):
sumIx += np.where(self.bitmap[row, :] == 0)[0][0]
A = sumIx / self.nmap
cardinality = self.nmap * (2 ** A)/ MAGIC_CONST
return cardinality
最佳答案
如果您在 Python2 中运行它,那么计算 A 的除法可能会导致 A 被更改为整数。
如果是这种情况,您可以尝试更改:
A = sumIx / self.nmap
到
A = float(sumIx) / self.nmap
关于python - 在 python 中实现 Flajolet 和 Martin 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096761/
我试图理解这个草图,但无法理解。如果我错了,请纠正我,但基本上,假设我有一个文本数据..单词..我有一个散列函数..它接受一个单词并创建一个整数散列,然后我将该散列转换为二进制位向量?正确的..然后我
以下是我为实现 Flajolet and Martin’s Algorithm 而编写的代码.我使用 Jenkins 哈希函数 生成数据的 32 位哈希值。该程序似乎遵循了该算法,但偏离了大约 20%
我是一名优秀的程序员,十分优秀!