문제

내 개인 프로젝트의 경우, 나는 소규모 수업을 작성하여 다소 모호한 형식으로 압축하고 압축 해제됩니다. 전체 사양이 있지만 문제가있는 곳이 아닙니다.

첫째,이 '형식'은 6 가지 압축 유형의 세트와 압축되지 않은 바이트 데이터 블록을 사용합니다. 형식은 RLE, RLE의 파생물로 숫자가 각 바이트 (예 : 3, 4, 5, ...), 16 비트 RLE, LZ-Copy, 리버스 LZ-Copy 및 LZ-Copy XOR '입니다. D는 255입니다. 가장 깨끗한 사양은 아니지만 디자인하지 않았습니다.

내 압축 루틴은 1에서 65535 바이트의 배열을 가져 와서 가능한 한 (희망적으로) 압축해야합니다. 이에 대한 이전의 나의 이전 시도는 압축되지 않은 스트림의 모든 색인에서 시작하여 단순히 계산 된 것입니다. 위의 압축 기술 중 어느 것이 최상의 압축을 제공하고, 그 방법이 압축 된 많은 바이트를 압축하여 압축 된 바이트의 배열로 압축합니다. 새로운 '비 압축'색인, 예를 들어 :

{0,0,0,1,2,3,4}

알고리즘은 처음에는 3 개의 0이 있다는 것을 먼저 읽은 다음 사용 된 사양이 사용한 후 네 번째 요소에서 시작하여 RLE가 '1,2,3,'1,2,3을 커버 할 것이라고 읽었습니다. 4 '충분히 충분히 압축하기 전에 그것을 압축하십시오.

요약 된 문제는 사용하기에 가장 적합한 사양을 찾으려고하는 동안 일상은 매우 작은 (20-30) 바이트 어레이에서도 느리게. 누구든지 이것을 최적화하는 방법에 대한 팁이나 도움을 줄 수있는 정보가 더 있으면 도움을 줄 수 있습니까?

도움이 되었습니까?

해결책

파일의 가능한 모든 세그먼트 (변수 길이 1-64k 블록 세그먼트를 호출하자)에 대해 많은 압축 가능성을 해결하는 것 같습니다. 내가 틀렸다면 나를 수정하지만 다음 선택에서 첫 번째 세그먼트에 대한 최상의 압축을 시도하고 있습니까 (메소드 0은 압축되지 않음).

  • 압축 방법 0, 길이 1 바이트.
  • 압축 방법 1, 길이 1 바이트.
  • : : : : :
  • 압축 방법 6, 길이 1 바이트.
  • 압축 방법 0, 길이 2 바이트.
  • 압축 방법 1, 길이 2 바이트.
  • : : : : :
  • 압축 방법 6, 길이 65534 바이트.
  • 압축 방법 0, 길이 65535 바이트.
  • 압축 방법 1, 길이 65535 바이트.
  • 압축 방법 2, 길이 65535 바이트.
  • 압축 방법 3, 길이 65535 바이트.
  • 압축 방법 4, 길이 65535 바이트.
  • 압축 방법 5, 길이 65535 바이트.
  • 압축 방법 6, 길이 65535 바이트.

그것은 막대한 시간이 걸릴 것입니다 (대략 420,000 압축 시도 자당). 그것이 당신이하고있는 일이라면, 단일 세그먼트 크기 (예 : 64K)를 선택하고 7 가지 압축 방법을 각각 적용하여 최고를 선택하는 것이 좋습니다. 그런 다음 각 세그먼트에 대해 "메소드"바이트를 출력 한 다음 압축 데이터를 출력하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top