gpt4 book ai didi

python - 在 python 中实现 Flajolet 和 Martin 算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:27 27 4
gpt4 key购买 nike

以下是我为实现 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com