답변:
압축은 압축 할 항목 내부에서 반복적 인 패턴을 찾아서 작동합니다. 또한 파일을 압축하는 동안 데이터를 손실하지 않으려면 압축에 손실이 없어야합니다 (*).
이제 머리 뒤쪽에있는 파일로 컴퓨터에 파일 (항목)이 저장되는 방식을 생각해보십시오. 가장 낮은 수준에서는 모두 0과 1입니다.
따라서 질문은 다음과 같이 변형 될 수있다 : " 원래의 표현보다 더 작은 방법으로 1과 0의 무리를 어떻게 표현할 수 있습니까? "
처음부터 시작하겠습니다 . 단일 비트 (단일 1 또는 단일 0) 의 일반적인 표현을 어떻게 압축 할 수 있습니까?
대답은 정말 쉽습니다 : 당신은 할 수 없습니다! ... 단일 비트는 가능한 가장 컴팩트 한 방식으로 표현됩니다.
충분히 큰 예를 들어 봅시다. 0111 0111 0100 0111 과 같은 이진 문자열을 어떻게 압축 합니까?
개별 비트를 보는 것이 전혀 도움이되지 않는다는 것을 이미 알고 있기 때문에 더 큰 규모를 봐야한다는 것을 알고 있습니다. 예를 들어, 한 번에 4 비트를 가져 갑시다. 이제 이진 문자열 "0111" 이 예제에서 3 번 나타날 것이므로 단일 비트 0으로 표시하지 않는 이유는 무엇입니까? 그러나 이것은 여전히 0100을 암흑으로 남겨 두므로 "1"로 표현하겠습니다
. 원본을 "0010"으로 압축했습니다.
정말 맛있어요! 그러나 이것은 "허프만 인코딩 알고리즘" 의 기본 사항 일 뿐이며 실제 세계에서는 그보다 약간 더 복잡합니다 (또한 인코딩 정보가 포함 된 테이블을 저장해야하지만, 이 질문에 대답하기 위해 조금 먼).
지금 정말 귀하의 질문에 대답 : 모든 데이터가 좋은? 잘 할 수 있음을 압축 할 수없는 이유의 또 다른 예를 가지고 : "0001 0110 1000 1111", 우리는 데이터를 압축 할 수 없을 것입니다 위와 같이 우리가 같은 기술을 사용하는 경우 (반복이 발견되지 않음) 압축의 이점이 없습니다 ...
(*) 물론 예외가 있습니다. 가장 알려진 예는 MP3 파일에 사용되는 압축입니다. 여기에서 원본에 대한 원시 파일에서 MP3 형식으로 변환하는 동안 소리에 대한 일부 정보 가 손실되므로이 압축은 손실 됩니다. 또 다른 예는 이미지의 .JPG 형식입니다.
에서 무손실 압축에 위키 백과 문서의 제한 사항 섹션 :
무손실 데이터 압축 알고리즘이 모든 입력 데이터 세트에 대한 압축을 보장 할 수는 없습니다. 다시 말해, 임의의 (무손실) 데이터 압축 알고리즘에 대해, 알고리즘에 의해 처리 될 때 더 작아지지 않는 입력 데이터 세트가있을 것이다. 이것은 계산 인수를 사용하여 초등 수학으로 쉽게 입증됩니다. ...
기본적으로 모든 가능한 입력 데이터를 무손실로 압축하는 것은 이론적으로 불가능합니다.
이것이 정상입니까?
아니요. "일반"파일이 아닙니다. 어떤 종류의 파일을 압축하고 있습니까? JPG, GIF, PNG, 비디오 또는 기타 zip 파일과 같이 이미 압축 된 경우 어떤 알고리즘으로도 압축되지 않습니다. 텍스트, XML, 압축되지 않은 BMP, 소스 코드 등 파일을 압축하려고 시도하면 zip은 압축률은 좋지만 절대 최고는 아닙니다.
사람들이 왜 Windows에서 ZIP을 계속 사용합니까?
그 이유 중 하나는 시스템에 멋진 zip 처리 기능이 내장되어 있기 때문입니다. 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 새 zip 파일을 만든 다음 파일을 넣을 수 있습니다. zip 파일을 두 번 클릭하면 폴더처럼 열립니다. 당신은 그것에서 물건을 복사하고 때로는 그 자리에서 사용할 수 있습니다. WinZip 또는 7z 또는 다른 프로그램을 설치할 필요가 없습니다. 나는 보통 사람들이하지 않는 것이 좋습니다.