어떻게 값을 압축 해제 작업에 대한 Facebook 의 고릴라는 경우에는 수의 주요 제로 저장하지 않음
-
29-09-2020 - |
문제
나이지: http://www.vldb.org/pvldb/vol8/p1816-teller.pdf
나의 질문에 대한 섹션 4.1.2 는 곳에 그것을 말합니다:
때 XOR non-zero,의 수를 계산이 앞뒤에 제로 XOR,저장 비트가'1'다음 에 의해 하나)또는 b):
(a)(제어 비트를'0')는 경우는 블록의 의미 있는 비트 에 속하는 블록의 의미 있는 비트, 즉,적어도 많은 주요 제로 으로 많은 뒤 제로 앞의 값이 사용하는 정보에 대한 차단 위치 및 저장 의미 있는 약하게 값입니다.
압축을 해제 할 때,어떻게 우리가 알고 있으면 우리가 추가해야 선도 제로나 찌끼를 제로?예를 들어 말할 수 있습 우리는 다음과 같은 48 비트 숫자:
A = 0xfff ffff fffff
B = 0xfff 0000 fffff
C = 0xfff 0ff0 fffff
고
A xor B = 0x000 ffff 00000
B xor C = 0x000 0ff0 00000
만약 우리가 따라 압축 알고리즘 A xor B
우리는 것입니다 상점의 숫자도 제로,는 12
, 뿐만 아니라,의미있는 비트 ffff
.
지금 B xor C
기 때문에"거기에 최소한으로 많은 주요 제로 많은 뒤 제로로 이전 값은"그래서 우리는 저장하는 의미있는 비트 ff
.하고 싶을 때,디코딩하는 ff
,기본적 이전에 압축된 비트,내가 가지고 있다는 것을 알고에서 적어도 12 주요 제로 20 찌끼를 제로,하지만 나는 아직을 채우기 위해 필요 8 제;해야 합니까 ff00
나 00ff
또는 다른 조합이 있습니까?
해결책
내 응답을 읽은 후에 참조 구현: https://github.com/facebookarchive/beringei/blob/92784ec6e22572f28500c76b669276007635c875/beringei/lib/TimeSeriesStream.cpp
의 사용 기간"의미있는 비트에"종이가 분명하지 않습니다.나는 생각한 문장"이용에 대한 정보를 차단 위치 및 저장 의미 있는 약하게 가치."는 의미를 저장하는 비트와 모든 앞뒤를 제로 제거기 때문에"의미 있는 약하게 값을"값없이 앞뒤니다.하지만,에 따라 참조 구현 당신은 스트립 같은 양의 앞뒤를 제로로 이전 값은 델타;이 의미있는 비트 이 경우 여전히 포함될 수 있습니다 몇 가지 앞과 뒤의 터널을 설정하는 방식이다
그래서,예를 들어 이 질문에 우리가점 0ff0
으로 의미있는 비트에 대 ff
.