파일 압축은 어떻게 작동합니까?


19

그래서 오늘 파일 압축을 당연한 것으로 생각했습니다. 몇 개의 파일을 하나로 묶어 그중 하나보다 작게 만드는 기능은 사실로 받아 들여지지 만 실제로 어떻게 작동합니까?

나는 모든 중복 된 항목을 포인터로 바꾸고 그와 같은 방식으로 축소시키는 것과 관련이있는 제한된 지식을 가지고 있지만 그 너머에는 상당히 단서가 없습니다!

나는 항상 새로운 지식에 열려 있기 때문에, 우리 대부분이 여기 있다고 상상할 때, 나는 물었다 고 생각했습니다. 그렇다면 수퍼 유저 압축은 실제로 어떻게 작동합니까?


1
위키 백과 문서는 좋은 시작이지만, 더 구체적인 설명이 좋을 것입니다. 좋은 질문입니다 (그러나 우리는 이미 그러한 질문이 있다고 확신하지만 그렇지는 않습니다).
Gnoupi

2
@Gnoupi : 사실, 내가 한 첫 번째 일은 검색이었습니다. 분명히 그렇지 않다. 그래서 나는 그것을 바로 잡으려고 노력했다. : P
Phoshi

2
우리는 당신이 사진을 게시하고 "wot izzit ??"에 갈 때 "what-is"태그를 가지고 있습니다; 나는 "어떻게 작동 하는가"태그가 필요하다는 것을 알아 차 렸지만 너무 길어서 "어떻게 작동 하는가"라는 말이 멍청하다. "설명"도 그렇습니다.
quack quixote

@quack quixote : 아, 감사합니다. "plz-send-the-explanation"유형 태그를 자동 완성에서 찾고 있었지만 찾을 수 없었습니다.
Phoshi

2
나는 "방법"태그를 몇 번 만드는 것에 가깝습니다 ...하지만 "설명"이 더 좋습니다. "자습서"와 "하우투"및 "초보자"는 모두 준 적용 가능하지만 적합하지 않습니다.
quack quixote

답변:


18

무손실 압축

무손실 압축은 데이터가 손실되지 않는 곳입니다. 입력 한 모든 내용을 완벽하게 검색 할 수 있습니다. 가장 작은 오류가 발생하는 텍스트 또는 이진 파일에 적합합니다.

파일 압축은 파일을 가져 와서 패턴을 스캔하고 이러한 패턴을 공간을 덜 차지하는 다른 것으로 변환하여 작동합니다.

예를 들어 "AAAAAAAA"는 "8A"로 바뀔 수 있습니다.

그것이 "8A"가 평문에 있다면 어떻게되는지 문제가 있기 때문에 그것이 정확하게 작동하는 방식이 아님을 인정합니다. 파일의 압축을 풀면 잘못되었을 것입니다. 시작하기 좋은 곳은 Wikipedia 또는 LZW Data Compression Algorithm 입니다.

아래에 복사 된 간단한 의사 코드가 있습니다.

STRING = get input character
WHILE there are still input characters DO
    CHARACTER = get input character
    IF STRING+CHARACTER is in the string table then
        STRING = STRING+character
    ELSE
        output the code for STRING
        add STRING+CHARACTER to the string table
        STRING = CHARACTER
    END of IF
END of WHILE
output the code for STRING

모든 압축은 파일을 압축 및 압축 해제하는 데 사용되는 조회 사전을 사용합니다. 사전이 클수록 반품 감소 법칙을 따르 더라도 더 많이 압축 할 수 있습니다 .

압축으로 인해 항상 더 작은 파일이 생성되는 것은 아닙니다. 압축 후 작은 파일을 얻지 못하는 상황 (작은 파일이 있거나 임의의 데이터를 압축 할 때 )이 있습니다 . 임의의 데이터를 압축하는 기능과 관련하여 몇 가지 재미있는 과제 가있었습니다 .

"손실 된"압축

위의 내용은 대부분 무손실 압축 과 관련이 있습니다. MP3, JPG 및 h.264와 같은 비디오 / 오디오 응용 프로그램에 사용되는 다른 유형의 압축은 손실 압축의 예 입니다.

손실 압축은 가장 눈에 띄지 않는 데이터를 삭제하여 작동합니다. 오디오에서 이것은 다른 다양한 것들과 함께 약 30,000 Hrz와 100 Hrz 미만입니다. 그림 (정적)에서는 다양한 것을 제거하고 데이터를 버리고 함께 픽셀을 병합합니다.

손실 압축은 변환 코딩 의 한 형태입니다 . 전체 크기를 줄이기 위해 데이터를 평균화합니다. 예를 들어, 이미지에서 10 픽셀의 블록, 모든 약간 다른 색상이 하나의 색상으로 병합되어 압축 될 수 있습니다.

비디오 압축에서는 종종 마지막 프레임 또는 프레임 이후에 변경된 다시 그리기 픽셀에만 명령이 배치됩니다 .


이것은 손실없는 압축에 대한 설명이며 정확한 초기 데이터를 복구 할 수있는 종류입니다 (아카이브 프로그램에서 주로 사용됨). JPG, MP3 등에서 사용되는 작은 크기의 압축 품질도 있습니다.
Gnoupi

Josh의 첫 번째 예는 Run-Length Encoding이라는 실제 압축 방법의 형태이며 "8A"는 "181A"로 압축됩니다. 분명히 그의 마지막 단락이 여기에 적용됩니다. RLE는 중복이 많은 데이터에 가장 적합합니다.
Dour High Arch

3
나는 무손실 / 무손실 제목을 추가하고 조금 더 반올림했습니다. 이것을 더 잘 이해하는 가장 좋은 방법은 위키피디아 기사를 읽는 것입니다.
Josh K

5

압축은 데이터에서 패턴을 찾은 다음이 패턴을 더 작은 특수 패턴으로 대체하여 작동합니다. 감압은 그 반대입니다. 특수 패턴을 찾아서 더 큰 패턴으로 바꿉니다. 어떤 패턴이 가능한지 아는 것이 중요합니다. 예를 들어, 텍스트에서 발견 된 패턴은 이미지에서 발견 된 패턴과 상당히 다를 수 있습니다. 일부 압축 기술은 손실이 있습니다. 확장이 입력을 정확하게 복구한다고 보장하지는 않습니다. 손실이 충분히 작은 경우 일반적으로 음악 및 이미지와 같은 아날로그 데이터에 적합합니다. 그러나 텍스트와 같은 데이터는 무손실 기술로 압축해야합니다.

임의의 데이터를 손실없이 단일 비트로 압축하는 것은 불가능하다는 것을 인식하는 것이 중요합니다. N 비트의 이진 데이터가있는 파일을 고려하십시오. 2 ^ N 개의 가능한 파일이 있습니다. 이러한 파일을 단일 비트로 압축하면 압축 파일의 크기가 N-1 비트이고 압축 가능한 표현은 2 ^ (N-1)에 불과합니다. 다시 말해, 각각의 가능한 압축 파일은 둘 이상의 가능한 압축되지 않은 파일을 나타내야합니다. 고유 한 압축 표현이 없으면 압축 해제 알고리즘이 무손실 압축 해제를 보장 할 수 없습니다.


3
파일은 압축 해제 (형용사)이지만 압축 해제 (동사) 할 수 없습니다. 대신 압축 립니다.
quack quixote
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.