오 탐지가없는 확률 론적 세트?


35

따라서 블룸 필터 는 매우 멋집니다. 오탐없이 회원 확인을 지원하지만 오 탐지 가능성은 적습니다. 최근에 나는 그 반대를 보장하는 "Bloom 필터"를 원했습니다. 오 탐지가 아니라 잠재적으로 오 탐지입니다.

내 동기는 간단하다 : (중복 된) 처리 할 많은 항목 스트림이 주어지면 이전에 본 항목을 처리하지 않기를 원한다. 복제본을 처리하는 것은 아프지 않으며 시간 낭비입니다. 그러나 요소 처리를 소홀히하면 치명적일 수 있습니다. "Reverse Bloom 필터"를 사용하면 공간 오버 헤드가 거의없는 항목을 저장할 수 있으며 세트의 멤버쉽을 테스트하여 중복 가능성이 높은 항목을 처리하지 않아도됩니다.

그러나 나는 그런 종류의 것을 찾을 수없는 것 같습니다. 내가 찾은 가장 가까운 것은 " 손상된 블룸 필터 "입니다.이 필터 를 사용하면 선택한 오 탐지를 더 높은 오 음율로 교환 할 수 있습니다. 그러나 모든 오 탐지 를 제거하려고 할 때 데이터 구조가 얼마나 잘 수행되는지 모르겠습니다 .

이 같은 것을 본 사람이 있습니까? :)


3
내가 관심있는 세트의 보완은 무한합니다. 어떻게 보관하나요?
Christopher Monsanto

11
문제가 있습니다 (현대 디스크는 아직 충분히 크지 않습니다).
Dave Clarke

8
이러한 데이터 구조가있는 경우이를 일반 블룸 필터와 함께 사용하여 "치트"하고 정확한 세트 멤버십을 저장할 수 있습니다.
Mark Reitblatt

1
@MarkReitblatt 블룸 필터와 캐시는 모두 확률 론적이며, 이들의 조합은 확률론적일 것입니다. 즉 정확한 세트 멤버쉽 테스트를 달성 할 수 없습니다. :)
awdz9nld

답변:


25

한 가지 해답은 큰 해시 테이블을 사용하고 채워질 때 다른 슬롯이없는 빈 슬롯을 찾는 대신 요소를 교체하기 시작하는 것입니다. 블룸 필터를 사용하면 고정 된 오답의 고정 된 비율을 얻지 못하지만 아무것도 아닌 것보다 낫습니다. 나는 이것이 이미 검색된 위치를 추적하기위한 체스 소프트웨어에서 표준이라고 믿는다.


답변 해주셔서 감사합니다. 예, 그것은 명백한 해결책입니다. 그것이 또한 표준 해결책 이라면 , 운이 좋지 않은 것 같습니다. 오 잘
Christopher Monsanto

2
이를 직접 매핑 캐시라고하며 CPU에서 일반적으로 사용됩니다. (캐시 또는 손실 해시 세트는 요구 사항을 다양한 수준에 맞 춥니 다). 오류율은 해시 함수의 분포 (avalanche) 및 캐시 / 세트에서 사용 가능한 슬롯 수에 따라 달라집니다. :)
awdz9nld

판매용 그대로 키 (예 해시 키를 저장) 가양 도입하지 않고 저장 될 수 있음에 유의
awdz9nld

20

이 질문에 대한 답은 "아니오"입니다. 이유를 알아보기 위해 매우 극단적 인 경우와 일반적인 블룸 필터가 작동하는 방법과 이론적 인 "Bizzaro World"블룸 필터를 "구름 필터"라고 부릅니다.

블룸 필터의 장점은 오류 확률 및 저장된 항목 와 관련하여 고정 된 크기의 데이터 구조를 사용하여 항목 (가양 성 포함)에 대한 일방적 인 테스트를 수행 할 수 있다는 것 입니다. 항목 자체 의 크기 는 전혀 중요하지 않습니다. 예를 들어, 오류가 3 % 미만인 최대 1,000 개의 항목을 저장하도록 블룸 필터를 설정 한 경우 Wikipedia의 전체 모음에서 약간 다른 버전 1,000 개를 저장할 수 있습니다. 원하는 측정 항목을 얻으면 데이터 구조가 매우 작을 것입니다 (킬로바이트 미만). 물론 이러한 해시를 계산하는 것은 어려운 일이지만 원칙은 여전히 ​​유효합니다.

이제, 그 거대한 문자열을 우울 필터에 저장하는 것을 고려하십시오! 우리는 지금 거짓 부정만을 가질 수 있습니다. 따라서 "그렇습니다. 위키 백과 전체 집단의 버전이이 세트에 있습니다"라고 말하면, 우리는 그것에 대해 절대적으로 옳 아야합니다. 항상 같은 값으로 해시하는 다른 문자열이 있기 때문에 해싱은 도움이되지 않습니다. "yes"라고 말하고 확신 할 수있는 유일한 방법은 전체 문자열 또는 동일한 길이의 동등한 데이터를 저장하는 것입니다. 우리는 항상 그것을 저장하고 "아니오"라고 말할 수는 없었지만 결국 오류율은 우리를 따라 잡을 것입니다. 우리가 할 수있는 최선의 방법은 압축으로, 구조의 크기를 저장된 데이터의 엔트로피와 원하는 정확도의 곱으로 줄입니다.

불행히도 그놈 필터는 존재하지 않습니다. 캐싱은 유일한 솔루션이지만 크기는 저장되는 정보의 양과 필터의 원하는 정확도 비율에 비례하기 때문에 실제로 블룸 필터와 반대되는 것은 아닙니다. 물론 많은 실제 시나리오에서 큰 데이터는 ID로 표시 될 수 있으므로 캐싱은 여전히 ​​허용 될 수 있습니다. 그러나 강력한 블룸 필터와 근본적으로 다릅니다.



@Yehosef 괜찮아요. 필요에 따라 작동 할 수도 있지만, 저자는 "이벤트를 완전히 식별하는 몇 개의 ID"가 있다는 것을 알게 될 것입니다. 따라서 구현되는 것은 여전히 ​​전체 객체를 효과적으로 저장하는 것입니다. 따라서 캐시의 변형입니다. 존재하는 경우 실제 "블룸 필터 반대"는 전체 객체를 저장할 필요가 없습니다.
pents90

그는 전체 객체가 아니라 이벤트를 식별하는 몇 가지 ID를 언급했습니다. 전체 상호 작용 레코드가 아닌 session_id에 "캐시"를 유지하면됩니다. 그러나 나는 그것이 블룸이나 하이퍼 로그와 같은 유형의 접근 방식이 아니라고 들었습니다.
Yehosef

"증거"에서 가능한 수의 항목이 무제한이라고 가정합니다. 그러나 가능한 항목 세트가 미리 알려진 경우가 있습니다. 예를 들어, 메모리 페이지의 가비지 수집의 경우 : 포함 된 항목을 알고 있습니다. 이제 가능한 각 항목을 인덱스 0..n에 매핑하는 "구름 필터"를 만듭니다. 이제 항목이 제거되면 해당 인덱스에 비트를 설정하십시오. 모든 비트가 설정되면 페이지를 가비지 수집 할 수 있습니다. "구름 필터"는 MPHF입니다. 오탐을 허용하려면 일부 항목이 n + 1에 매핑되도록 MPHF를 변경하십시오.
Thomas Mueller

@ThomasMueller 맞다, 나는 표준 CS 이론 관점 인 최악의 경우 / 대소를 가정한다. 고정 된 N 개의 가능한 항목 세트 만있는 경우 각 항목에 필요한 N 개의 공간 만있는 간단한 솔루션이 많이있는 것이 사실입니다. 그러나 블룸 필터에는 이러한 제한이 없습니다.
pents90

13

당신은 캐시 를 원하지만 이상한 방식으로 그것에 대해 생각하고 있습니다.


1
... 정교하게 관리? 물론 캐시는 작동하지만 이상적이지 않으므로 확률 적 데이터 구조의 최신 기술에 대한 질문입니다. 좀 더 구체적으로 말하면, 내가 아는 캐싱 기술에는 많은 스토리지가 필요합니다. 캐시 레벨이 많을수록 더 많은 스토리지가 사용됩니다. 캐시에 저장된 요소에 제한을 두거나 사용 패턴을 사용하여 트릭을 수행 할 수는 있지만 블룸 필터가 제공하는 공간 효율 대 오답 비율 근처에 도달하지 못합니다.
Christopher Monsanto

1
(계속) 즉, 모든 문제를 해결하는 명백한 캐싱 기술을 잊어 버릴 수 있습니다. 이 경우 Wikipedia의 일반 범주에 대한 링크를 제공하는 대신 해당 기술을 명시 적으로 만들 수 있습니까?
Christopher Monsanto

2

면책 조항 : 저는 캐시 전문가가 아니기 때문에 순진한 아이디어 일 수도 있고 전에는 들어 본 적이없는 알려진 아이디어 일 수도 있습니다. 참조를 인용하지 않으면 실례합니다. 게시물을 수정하고 추가 할 수있는 참조가 있으면 알려 주시기 바랍니다. (매우 직관적이기 때문에 참조가있을 것으로 의심됩니다).

기음기음


0

AVL (때로는 빨강 검정) 트리를 부분 항목과 함께 사용하여 오탐이없는 필터 역할을했습니다. 트리를 삽입하거나 쿼리 할 때 항목의 첫 번째 X 바이트 만 사용하십시오. 데이터 구조는 형식적으로 확률 적이 지 않기 때문에 비트 충돌로 오 탐지의 위험이 없습니다. 전체 항목을 캐싱하는 것과 달리이 방법은 계산 가능한 최대 공간을 제공합니다. 오 탐지 및 공간 비용과 비교하여 서로 다른 접두사 길이 / 트리 깊이를 고려하여 오 탐지 비율을 조정할 수 있습니다.


또한 문자열 데이터를 사용해 보려고했지만 데이터가 이진 구조로 압축되는 경향이 있습니다.
JRideout

0

위의 데이터 구조가 존재할 수 없다는 하한을 증명할 수 있다고 생각합니다. 기본적으로 데이터 구조가 m 비트를 사용하는 경우 고정 비트 벡터 (입력 표현)는 카운팅 인수에 의해 최대 (((un) + n eps) \ choose (un)) 세트에 해당 할 수 있습니다. 이 수는 2 ^ m 배 (u \ choose n) 이상이어야하며 (모든 세트가 표시되어야 함) 기본적으로 세트 S를 정확하게 저장하는 데 가장 가까운 하한을 얻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.