2013-02-14 2 views
1

정수의 데이터 시퀀스를 정렬했습니다. 차이 값을 저장하는 대신 시퀀스의 유형을 (압축)을 저장할 수있는 더 나은 방법이 있나요작은 차이로 정렬 된 데이터 압축

Data: 1 2 3 5 7 8 9 10 13 14 
Differences: (start 1) 1 1 2 2 1 1 1 3 1 

: 두 숫자 사이의 최대 차이는 그래서 데이터가이 같은 예를 들어 본다 3.입니까? 사전 기반 방법을 사용하면 숫자 1과 2의 임의성 때문에 압축하지 못했습니다. "PAQ"스타일 압축을 사용하면 결과가 더 좋지만 여전히 만족스럽지 않습니다. 허프 먼과 산술 코더는 사전 기반 방법보다 나쁩니다.

예측과 관련하여 어떤 방법이 있습니까? 예를 들어

은 (작거나 더 일관 될 수 있음) 점포 차이 원래 데이터 및보다 회귀

사용하거나 차이 히스토그램에 기초하여 예측 일종의 사용 하는가?

아니면 이미 네 차이를 저장하고있는 의견 말 때문에

+0

각 숫자를 이전 숫자 (1-3)로부터의 거리로 저장할 수 있지만 2 비트 숫자로 지정할 수 있습니다. 그러면 모든 바이트에 4 개의 숫자를 채울 수 있습니다. 이 단점은 시퀀스의 주어진 숫자를 결정할 때 처음부터 시작해야한다는 것입니다. 너는 모든 거리를 더한다. – Pete

+0

예 .. 저는 이미 1 바이트에 4 개의 숫자를 채 웁니다. 이 "문제"에 대한 더 나은 해결책이 있다면 궁금합니다. –

+1

절반을 사용하지 않을 수도 있고 조금 더 많은 공간을 확보 할 수도 있습니다. 그러나 숫자 시퀀스가 ​​실제로 무작위이면 일반적으로 일종의 반복 시퀀스 및 임의의 데이터에 대한 아이디어를 기반으로하므로 일반적으로 압축 알고리즘에 가치가 없기 때문에 압축 알고리즘에서 많은 가치를 얻지는 않을 것입니다. – Pete

답변

0

(내 oppinion, 진짜 대답 :)에있다) 모두에서 완전히 다른 .... 또는 수없는 무엇인가 바이트 당, 당신은 훨씬 나아질 가능성이 있습니다. 차이점 0, 1, 2 및 3이 무작위로 고르게 분배되면 더 나은 방법이 없을 것입니다.

균등하게 분배되지 않으면 허프만 또는 산술 코드로 더 잘 수행 할 수 있습니다. 예 : 1이 0보다 일반적이며 2와 3보다 일반적이라면 1을 0으로, 0을 0으로, 2를 110으로, 3을 111로 저장할 수 있습니다. 0이 전혀 발생하지 않으면 1을 0, 2 및 1로 저장할 수 있습니다. 3을 10과 11로합니다. 당신이 1의 80 %가 발생하는 곳을 인용 할 경우 산술 코드로 더 잘 수행 할 수 있습니다. 또는 기호 쌍을 코딩하여 가난한 사람의 산술 코드. 예 :

11 0 
13 100 
21 101 
12 110 
31 1110 
22 111100 
23 111101 
32 111110 
33 111111 

은 1 80 %, 2 10 %, 3 10 %에 적합한 코드입니다. (차이점이 홀수 인 경우를 처리하지는 않지만 처음에는 짝수 또는 홀수를 나타내는 비트를 사용하고 이상한 경우 끝에는 조금 더 처리 할 수 ​​있습니다.)

이전 값보다 더 나은 예측 인자가있을 수 있습니다. 이것은 단지 하나의 이전 값 대신에 n의 값이 될 것입니다. 그러나 이것은 고도로 데이터 의존적 일 것입니다. 예를 들어, 현재 값이 이전 두 값에 의해 만들어진 행에 해당한다고 가정 할 수 있습니다. 또는 이전의 세 값에 의해 만들어진 포물선에 떨어지는 것입니다. 또는 다른 기능 (예 : 데이터가 너무 편향된 경우 약간의 주파수를 갖는 정현파.