Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
173ab0e
Bloom filter with tests
isidroas Apr 6, 2023
08bc970
has functions constant
isidroas Apr 6, 2023
0448109
fix type
isidroas Apr 6, 2023
486dcbc
isort
isidroas Apr 6, 2023
4111807
passing ruff
isidroas Apr 6, 2023
e6ce098
type hints
isidroas Apr 6, 2023
e4d39db
type hints
isidroas Apr 6, 2023
7629686
from fail to erro
isidroas Apr 6, 2023
3926167
captital leter
isidroas Apr 6, 2023
280ffa0
type hints requested by boot
isidroas Apr 6, 2023
5d460aa
descriptive name for m
isidroas Apr 6, 2023
cc54095
more descriptibe arguments II
isidroas Apr 6, 2023
78d19fd
moved movies_test to doctest
isidroas Apr 7, 2023
8b1bec0
commented doctest
isidroas Apr 7, 2023
28e6691
removed test_probability
isidroas Apr 7, 2023
2fd7196
estimated error
isidroas Apr 7, 2023
314237d
added types
isidroas Apr 7, 2023
9b01472
again hash_
isidroas Apr 7, 2023
c132d50
Update data_structures/hashing/bloom_filter.py
isidroas Apr 8, 2023
313c80c
from b to bloom
isidroas Apr 8, 2023
18e0dde
Update data_structures/hashing/bloom_filter.py
isidroas Apr 8, 2023
54041ff
Update data_structures/hashing/bloom_filter.py
isidroas Apr 8, 2023
483a2a0
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 8, 2023
174ce08
syntax error in dict comprehension
isidroas Apr 8, 2023
00cc60e
from goodfather to godfather
isidroas Apr 8, 2023
35fa5f5
removed Interestellar
isidroas Apr 8, 2023
5cd20ea
forgot the last Godfather
isidroas Apr 8, 2023
7617143
Revert "removed Interestellar"
isidroas Apr 8, 2023
799171a
pretty dict
isidroas Apr 8, 2023
1a71f4c
Apply suggestions from code review
cclauss Apr 8, 2023
4e0263f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Apr 8, 2023
e746746
Update bloom_filter.py
cclauss Apr 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
removed test_probability
  • Loading branch information
isidroas committed Apr 7, 2023
commit 28e66913b080f4a9231fe2ec9507c55b471949cc
40 changes: 0 additions & 40 deletions data_structures/hashing/bloom_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@
0.140625
"""
from hashlib import md5, sha256
from random import choices
from string import ascii_lowercase

HASH_FUNCTIONS = (sha256, md5)

Expand Down Expand Up @@ -95,41 +93,3 @@ def estimated_error_rate(self):
n_ones = bin(self.bitarray).count("1")
k = len(HASH_FUNCTIONS)
return (n_ones / self.size) ** k


def random_string(size: int) -> str:
return "".join(choices(ascii_lowercase + " ", k=size))


def test_probability(filter_bits: int = 64, added_elements: int = 20) -> None:
b = Bloom(size=filter_bits)

k = len(HASH_FUNCTIONS)
estimated_error_rate_beforehand = (
1 - (1 - 1 / filter_bits) ** (k * added_elements)
) ** k

not_added = {random_string(10) for i in range(1000)}
for _ in range(added_elements):
b.add(not_added.pop())

n_ones = bin(b.bitarray).count("1")
estimated_error_rate = (n_ones / filter_bits) ** k

errors = 0
for string in not_added:
if b.exists(string):
errors += 1
error_rate = errors / len(not_added)

print(f"error_rate = {errors}/{len(not_added)} = {error_rate}")
print(f"{estimated_error_rate=}")
print(f"{estimated_error_rate_beforehand=}")

assert (
abs(estimated_error_rate - error_rate) <= 0.05
) # 5% absolute margin calculated experiementally


if __name__ == "__main__":
test_probability()