Если я правильно понимаю, когда элемент put
внутри фильтра цветения гуавы, mightContain
всегда будет возвращать истину. Если фильтр возвращает false
на mightContain
, значит, значение никогда не помещалось в фильтр. Что мне интересно, так это для значений, которые might
являются ложноположительными в данный момент, поскольку по мере того, как вводится больше значений, однажды ложные срабатывания могут позже стать истинно-отрицательными (если они, конечно, не введены) .
Что-то вроде этого:
GuavaBloomFilter<Integer> bf = new GuavaBloomFilter<>(blah, blah);
# if I start checking, none of the values should return tru at the monent
System.out.println(bd.mightContain(5)); // false
System.out.println(bd.mightContain(10)); // false
System.out.println(bd.mightContain(15)); // false
# fine
# let's put in a value now
bf.put(10);
System.out.println(bd.mightContain(5));
System.out.println(bd.mightContain(10)); // true, every time from now on
System.out.println(bd.mightContain(15));
На последних трех проверках при проверке на 10 он всегда возвращает true. Для 5 и 15 он может вернуть true. Предположим, что для 5 мы получаем ложь (никогда не вставляем внутрь), для 15 мы получаем ложное срабатывание.
Итак, продолжаем:
bf.put(5);
System.out.println(bd.mightContain(5)); // true, every single time from now on
System.out.println(bd.mightContain(10)); // true, every time from now on
System.out.println(bd.mightContain(15));
Итак ... теперь, проверяя 5, мы always
получим истину. Возможно ли, что из-за изменения состояния внутри фильтра Блума результат проверки 15, который ранее был ложноположительным, мог бы вернуть истинно-отрицательное значение?