2017-12-17 6 views
0

파일 압축 프로그램을 작성하려고합니다. 지금까지 Huffman 코딩 알고리즘을 구현했지만 충분하지 않다는 것을 알았습니다. 압축은 최소화되어 있고 수천만 비트 만 압축 할 수 있으며 대개 원본 파일의 1 % 만 압축 할 수 있습니다. 나는 그것에 관한 정보를 검색했고, bzip2와 gzip 같은 파일 압축 프로그램의 대부분이 LZW와 Huffman 알고리즘의 조합을 함께 사용하고 있다는 것을 알았습니다. LZW 알고리즘을 사용해 보았을 때 비트 단위로 바이너리로 처리하는 방법에 대해 고민했습니다. 이 알고리즘에 대한 대부분의 예제와 설명은 알파벳 문자열 및 바이너리에 대한 일부 제한된 정보를 검사합니다. 바이너리로 구현하거나 단순하게 이해하는 방법에 대한 완전한 명확한 안내서가 있습니까?LZW 알고리즘 - 이진 압축

답변

0

어느 쪽도 LZW를 사용하지 않습니다. gzip은 LZ77을 사용하며 이전 데이터에서 일치하는 문자열을 찾습니다. 리터럴과 길이/거리 쌍은 허프만 코드를 사용하여 전송됩니다. bzip2는 Burrows-Wheeler transform을 사용하고, 앞으로 이동, 연속 길이 인코딩 및 허프만 코딩이 뒤 따른다.

+0

나는이 알고리즘을 알고 있으며,이 알고리즘에 대해 읽고 다시 시도하여 이진 데이터에 사용하고이를 성공적으로 구현하지 못했습니다. LZ77 알고리즘이 더 효과적으로 보이지만 포인터로 이해하고 새로운 "바이트 수"가 아니라이 크기를 늘리지 않고 이진 코드에서 뒤로 점프 할 수있는 방법은 무엇입니까? 나는 그것을 이해할 수 없어 누군가가 나를 파일 용으로 구현할 수있는 방식으로 단순화 할 수 있다면 감사 할 것이다. –

+0

직접 구현할 필요가 없다. [zlib] (https://zlib.net/)과 같은 라이브러리를 사용하십시오. –

+0

여기에있는 요점은 직접 (코드) 구현하려고하는 것이기 때문에 나는 원하지 않습니다. 이것이 진정한 도전입니다. –