如果您发现运行时不适用于给定大小的数据,那么是时候做一些更好的事情了。一些 Ad-Hawk 散列可能是遍历您获取的批次并将其存储在集合字典中,其中键是每个字母的数量/某个桶大小。这会将您的推文划分为更合理的集合,并允许根据您的存储桶大小将线性时间的操作减少某个常数因子。定义你的 has 向量将决定结果数据对象的行为。例如,如果您只使用字母字符,那么在具有足够大的桶大小的情况下,带有额外引号和表情符号的克隆可能会在同一个桶中。另一方面,如果你对推文中不同的确实得到的数量进行散列,你可能不会看到太大的影响。
setOfTweets = ['this is a tweet #Twitter','this is another tweet.']
alphabetLetters=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
MyHash={} # not actually a pythonic hash
for k in setofTweets:
counts = {'a': 0, 'c': 0, 'b': 0, 'e': 0, 'd': 0, 'g': 0, 'f': 0, 'i': 0, 'h': 0, 'k': 0, 'j': 0, 'm': 0, 'l': 0, 'o': 0, 'n': 0, 'q': 0, 'p': 0, 's': 0, 'r': 0, 'u': 0, 't': 0, 'w': 0, 'v': 0, 'y': 0, 'x': 0, 'z': 0}
twiddle = False
for k2 in k:
try:
counts[k2.lower()]+=1
except(KeyError):
twiddle = !twiddle
key = tuple([counts[k]/3 for k in alphabetLetters])
try:
MyHash[key].add(k)
except(KeyError):
MyHash[key]=set()
MyHash[key].add(k)
我不想将其称为线性过滤器,因为桶上的负载因子将大于 1。但是当数据很大时,它绝对比一个大集合快。