ZIP 파일 형식은 압축 알고리즘에 DEFLATE을 사용합니다. 따라서 알고리즘이 작동하는 방식을 고려하고 알고리즘이 압축하기 쉬운 데이터를 선택해야합니다. 위키피디아 기사에 따르면 압축의 두 단계가 있습니다. 첫 번째는 LZ77을 사용하여 반복되는 데이터 섹션을 찾아서 짧은 참조로 대체합니다. 두 번째는 Huffman coding을 사용하여 나머지 데이터를 가져 와서 전체 블록에서 중복을 제거합니다. 엔트로피 코딩이라고합니다 - 정보가 매우 랜덤하지 않은 경우 (낮은 엔트로피가있는 경우) 코드는 일반 기호를 짧은 기호로 대체하여 엔트로피를 늘립니다.
일반적으로, 많은 반복 실행 목록 (즉, [111,2,44,93,111,2,44,9,9 ...])은 첫 번째 패스에서 잘 압축됩니다. 다른 임의의 물건 (예 : [111,34,43,50111341111112342260,111,98,2], 34 및 111이 자주 나타나는) 내에서 반복되는 숫자가 많은 목록은 두 번째 패스.
적절한 숫자를 찾으려면, 가장 쉬운 방법은 각 목록을 정렬 한 다음 병합하여 병합을 유지하면서 42000 출력 숫자가 될 때까지 정렬하는 것입니다. 그들이 일어날 때 도망 갈 것입니다. 이것은 최적이 아니므로 각 입력 목록에 숫자 255가있을 수 있으며이 기술을 사용하여 놓칠 수는 있지만 쉽습니다.
다른 접근법은 숫자를 256 개의 빈으로 히스토그램 화하는 것입니다. 눈에 띄는 빈은 그룹화해야하는 숫자를 나타냅니다. 그 후에, 나는 당신이 서열을 검색해야만한다고 생각합니다. 다시 말하지만, 입력을 정렬하면이 작업이 더 쉬워 질 것입니다.
각 목록에서 하나의 번호를 선택해야한다는 제약이 있습니다. 그래서 두 경우 모두 각 목록을 정렬 한 다음 중복을 제거 할 수 있습니다.
또한 나무를 사용하여 호프만 코드를 생성 할 수 있으므로 자동으로 올바른 답을 줄 수있는 마법 트리 구조가 있는지 궁금합니다.
혹시 숙제 문제입니까? '숙제'태그를 추가하십시오. – mtrw
아니요. http://marknelson.us/2006/06/20/million-digit-challenge/ (내 pete6 게시물 참조)에서 AMillionRandomDigits.bin 압축 문제를 해결하려고합니다. –
정말 임의의 데이터를 압축 할 수 없습니다. –