더북(TheBook)

  4. 블룸 필터의 생성자를 추가합니다.

public:
    bloom_filter(int n) : nBits(n)
    {
        data = std::vector<bool>(nBits, false);
    }

  5. 룩업 함수를 추가합니다.

void lookup(int key)
{
    bool result = data[hash(0, key)] & data[hash(1, key)] & data[hash(2, key)];

    if (result)
    {
        std::cout << key << ": 있을 수 있음" << std::endl;
    }
    else
    {
        std::cout << key << ": 절대 없음" << std::endl;
    }
}

lookup() 함수 구현은 매우 간단합니다. 이 함수는 필요한 모든 비트가 1로 설정되어 있는지를 검사합니다. 만약 가변 개수의 해시 함수를 사용한다면, 각각의 해시 함수와 연관된 비트가 모두 1로 설정되어 있는지를 반복문을 통해 확인하면 됩니다. 특정 키가 ‘있을 수 있음’이라고 출력하는 이유는 거짓-긍정이 발생할 수 있기 때문입니다. 반면에 result 값이 0인 경우에는 입력 키가 없음이 확실하기 때문에 ‘절대 없음’을 출력합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.