간단 하고 효율 적 인 데이터 구조 - Bloom Filter (부 릉 필터)
1. 부 릉 필 터 는 무엇 에 사용 합 니까?
부 릉 필 터 는 하나의 요소 가 하나의 집합 에 속 하 는 지 여 부 를 판단 하 는 데 사용 할 수 있다. 더욱 엄밀 하 게 말 하면 하나의 요소 가 특정한 집합 에 속 하지 않 는 지 100% 확인 할 수 있 지만 하나의 요소 가 특정한 집합 에 속 하 는 지 100% 확인 할 수 없다. 그 사용 장면 에 대해 가장 먼저 생각 한 것 은 '높 은 조작 을 해 야 하 는 지' 를 판단 하 는 것 이다. 예 를 들 어 네트워크 나 디스크 에 있 는 일부 자원 을 방문 하 는 것 이다.예 를 들 어 Google 의 BitTable 과 Apach HBase 는 브 론 필 터 를 사용 하여 조회 한 데이터 가 저장 되 어 있 는 지 여 부 를 판단 하여 디스크 를 계속 읽 어야 하 는 지 여 부 를 확인 합 니 다.예 를 들 어 파충류 로 웹 페이지 를 캡 처 할 때 일부 웹 페이지 는 서로 연결 되 거나 여러 웹 페이지 에 같은 웹 링크 가 포함 되 어 있 기 때문에 부 릉 필 터 를 사용 하여 url 이 기어 올 랐 는 지 여 부 를 판단 하여 이 url 의 방문 을 계속 할 지 여 부 를 확인한다.
2. 부 릉 필 터 는 어떻게 실현 하고 사용 합 니까?
부 릉 필 터 는 두 부분 으로 구성 되 어 있 습 니 다. 하나의 비트 배열 과 하나의 해시 함수 입 니 다.부 릉 필 터 를 초기 화하 기 위해 서, 우 리 는 비트 그룹의 모든 위 치 를 0 으로 설정 합 니 다.그래서 만약 에 우리 가 열 개의 배열 이 있다 면:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
집합 에 원 소 를 추가 할 때, 우 리 는 원 소 를 입력 으로 산열 함수 에 제공 합 니 다.해시 함수 마다 배열 색인 을 출력 합 니 다.만약 에 문자열 'hello' 를 두 개의 해시 함수 f1, f2 에 전달한다 고 가정 하면 이 두 개의 해시 함 수 는 색인 0 과 4 를 제공 합 니 다. 우 리 는 비트 배열 의 해당 위 치 를 1 로 설정 합 니 다.
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0]
하나의 요 소 를 조회 할 때 우 리 는 요 소 를 두 개의 해시 함수 에 전달 하고 두 개의 색인 을 얻 은 후에 배열 의 해당 비트 의 값 을 검사 합 니 다.
3. 왜 부 릉 필터 의 효율 이 비교적 높 습 니까?
시간 복잡 도
요 소 를 저장 할 필요 가 없 기 때문에 일정한 길이 의 자릿수 그룹 에 의존 하여 존재 여 부 를 판단 하고 배열 의 길이 의 크기 도 집합 에서 요소 의 많 고 적 음 에 달 려 있 지 않 으 며 오심 율 이 커지 거나 효율 이 낮 아 지 는 대가 로 저장 (자릿수 그룹) 을 줄 일 수 있다.
4. 부 릉 필 터 는 어떤 단점 이 있 습 니까?
주요 단점 은 어느 정도 오심 율 과 삭제 가 어렵 기 때문에 집합 에 저 장 된 요소 가 증가 함 에 따라 오심 율 도 증가한다. 오심 율 의 크기 는 세 가지 기준 과 관련 이 있다. 즉, 자릿수 그룹 길이 m, 집합 길이 n, 해시 함수 개수 k 이다. 그 관 계 는 문헌 을 참고 할 수 있다. 이 문헌 은 주어진 m, n, k = ln (2) 에 대해 증명 했다.* m / n 시 오 판 률 이 가장 낮다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.