Я пытаюсь сделать настраиваемый фильтр Блума. В конструкторе вы устанавливаете прогнозируемую необходимую емкость фильтра (n
), желаемую частоту появления ошибок (p
) и список хеш-функций (размером k
).
Согласно Википедии , имеет место следующее соотношение (m
- количество бит):
p = (1 - k * n / m) ** k
Поскольку я получаю p
, n
и k
в качестве параметров, мне нужно найти для m
; Я получаю следующее:
m = k * n / (1 - p ** (1 / k))
Однако есть несколько вещей, которые заставляют меня думать, что я сделал что-то не так. Для начала, p ** (1 / k)
будет стремиться к 1
для достаточно большого k
, что означает, что вся фракция плохо определена (потому что вы можете предположительно разделить на 0
).
Еще одна вещь, которую вы можете заметить, это то, что с ростом p
(допустимая максимальная частота появления ошибок) растет и m
, что полностью наоборот.
Где я ошибся?