Standard Bloom Filter

没有用标准做法,而是调用的Python的hash函数再利用过滤器本身size来模

class StandardBloomFilter:

    # @param {int} k an integer
    def __init__(self, k):
        # initialize your data structure here
        self.size = 10 ** 5
        self.array = [False] * self.size
        self.k = k

    # @param {str} word a string
    def add(self, word):
        # Write your code here
        for i in xrange(self.k):
            self.array[hash(word) % (self.size + i)] = True

    # @param {str} word a string
    # @return {bool} True if word is exists in bllom filter or false
    def contains(self, word):
        # Write your code here
        for i in xrange(self.k):
            if not self.array[hash(word) % (self.size + i)]:
                return False

        return True

Counting Bloom Filter

加了一个计数的元素就行了

class CountingBloomFilter:

    # @param {int} k an integer
    def __init__(self, k):
        # initialize your data structure here
        self.size = 10 ** 5
        self.array = [[False, 0] for _ in xrange(self.size)]
        self.k = k

    # @param {str} word a string
    def add(self, word):
        # Write your code here
        for i in xrange(self.k):
            handle = hash(word) % (self.size + i)
            self.array[handle] = [True, self.array[handle][1] + 1]

    # @param {str} word a string
    def remove(self, word):
        # Write your code here
        for i in xrange(self.k):
            handle = hash(word) % (self.size + i)
            self.array[handle][1] -= 1
            if not self.array[handle][1]:
                self.array[handle][0] = False

    # @param {str} word a string
    # @return {bool} True if word is exists in bllom filter or false
    def contains(self, word):
        # Write your code here
        for i in xrange(self.k):
            if not self.array[hash(word) % (self.size + i)][0]:
                return False
        return True

results matching ""

    No results matching ""