/ / 허프만 코드 : 예, 응용

허프만 코드 : 예제, 응용

현재, 생각하는 사람은 거의 없습니다.파일 압축 작동 방식. 과거에 비해 개인용 컴퓨터 사용이 훨씬 쉬워졌습니다. 그리고 파일 시스템으로 작업하는 거의 모든 사람들이 아카이브를 사용합니다. 그러나 작동 방식과 파일 압축 방식에 대해 생각하는 사람은 거의 없습니다. 이 프로세스의 첫 번째 버전은 Huffman 코드였으며 오늘날까지 다양한 유명 아카이버에서 사용되고 있습니다. 많은 사용자는 파일 압축이 얼마나 쉬운 지, 어떻게 작동하는지 생각조차하지 않습니다. 이 기사에서는 압축이 어떻게 발생하는지, 인코딩 프로세스의 속도를 높이고 단순화하는 데 도움이되는 뉘앙스를 살펴보고 코딩 트리를 만드는 원리가 무엇인지 알아 봅니다.

알고리즘 역사

효과적인 수행을위한 최초의 알고리즘전자 정보를 코딩하는 것은 20 세기 중반, 즉 1952 년에 허프만이 제안한 코드가되었습니다. 현재 정보를 압축하도록 설계된 대부분의 프로그램의 주요 기본 요소는 바로 그 사람입니다. 현재이 코드를 사용하는 가장 인기있는 소스 중 일부는 ZIP, ARJ, RAR 아카이브 및 기타 여러 소스입니다.

허프만 코드
또한이 Huffman 알고리즘은JPEG 이미지 및 기타 그래픽 개체의 압축. 모든 현대 팩스는 1952 년에 발명 된 코딩도 사용합니다. 코드 생성 이후 많은 시간이 지났음에도 불구하고 오늘날까지 최신 쉘과 구식 및 현대 유형의 장비에 사용됩니다.

효율적인 코딩의 원리

Huffman 알고리즘은 체계를 기반으로합니다.가장 가능성이 높은 가장 일반적인 문자를 이진 시스템의 코드로 바꿀 수 있습니다. 그리고 덜 일반적인 것은 더 긴 코드로 대체됩니다. 긴 Huffman 코드로의 전환은 시스템이 모든 최소값을 사용한 후에 만 ​​발생합니다. 이 기술을 사용하면 원본 메시지의 각 문자 전체에 대한 코드 길이를 최소화 할 수 있습니다.

허프만 알고리즘
중요한 점은 처음에는문자 발생 확률을 이미 알고 있어야합니다. 최종 메시지가 작성되는 것은 그들로부터입니다. 이러한 데이터를 기반으로 Huffman 코드 트리가 구축되며,이를 기반으로 아카이브의 문자 인코딩 프로세스가 수행됩니다.

Huffman 코드 예제

알고리즘을 설명하려면코드 트리 구축의 그래픽 버전. 이 방법을 효과적으로 사용하려면이 방법의 개념에 필요한 일부 값의 정의를 명확히하는 것이 좋습니다. 노드에서 노드로 향하는 호 및 노드 세트를 그래프라고합니다. 트리 자체는 특정 속성 집합이있는 그래프입니다.

  • 각 노드는 하나 이상의 호를 포함 할 수 없습니다.
  • 노드 중 하나는 트리의 루트 여야합니다. 즉, 호가 트리에 전혀 들어가서는 안됩니다.
  • 루트에서 호를 따라 이동하기 시작하면이 프로세스를 통해 모든 노드에 도달 할 수 있습니다.

허프만 코드 예제
이러한 개념도 코드에 포함되어 있습니다.허프만은 나무 위의 잎과 같습니다. 호가 나오지 않는 노드를 나타냅니다. 두 노드가 호로 연결되어있는 경우, 그 중 하나는 부모가되고 다른 노드는 호가 나가는 노드와 들어가는 노드에 따라 자식입니다. 두 노드에 동일한 상위 노드가있는 경우 일반적으로 형제 노드라고합니다. 잎 외에도 노드에 여러 개의 호가 있으면이 트리를 바이너리라고합니다. 이것이 바로 허프만 나무입니다. 이 구조의 노드의 특징은 각 부모의 가중치가 모든 노드 자식의 가중치의 합과 같다는 것입니다.

허프만 트리 생성 알고리즘

Huffman 코드 작성은 문자로 이루어집니다.입력 알파벳. 향후 코드 트리에서 사용 가능한 노드 목록이 형성됩니다. 이 목록에있는 각 노드의 가중치는 해당 노드에 해당하는 메시지 문자의 발생 확률과 동일해야합니다. 이 경우 퓨처 트리의 여러 자유 노드 중에서 가중치가 가장 낮은 노드가 선택됩니다. 또한 최소 지표가 여러 노드에서 관찰되면 쌍을 자유롭게 선택할 수 있습니다.

허프만 코드 구축
그런 다음 부모가 생성됩니다.노드는이 노드 쌍의 합이 가중되는만큼 가중되어야합니다. 그 후 부모는 사용 가능한 노드가있는 목록으로 보내지고 자식은 제거됩니다. 이 경우 호는 해당 표시기 인 1과 0을받습니다. 이 과정은 매듭을 하나만 남기는 데 필요한만큼 정확하게 반복됩니다. 그런 다음 이진수는 위에서 아래로 기록됩니다.

압축 효율성 향상

압축 효율성을 높이려면 다음을 수행해야합니다.코드 트리를 구축하는 동안 트리에 첨부 된 특정 파일에 문자가 나타날 가능성에 관한 모든 데이터를 사용하고 문자가 많은 수의 텍스트 문서에 흩어지지 않도록합니다. 이 파일을 처음 살펴보면 압축 할 개체의 문자가 발견되는 빈도에 대한 통계를 즉시 계산할 수 있습니다.

압축 프로세스 속도 향상

알고리즘 속도를 높이기 위해 문자 식별특정 문자의 출현 확률 지표가 아니라 발생 빈도에 따라 수행해야합니다. 이렇게하면 알고리즘이 더 간단하고 작업 속도가 훨씬 빨라집니다. 또한 부동 소수점 및 나눗셈 연산을 방지합니다.

동적 허프만 코드
또한이 모드에서 작동 할 때 동적Huffman 코드 또는 알고리즘 자체는 변경되지 않습니다. 이것은 주로 확률이 주파수에 정비례한다는 사실 때문입니다. 파일 또는 소위 루트 노드의 최종 가중치가 처리 할 개체의 문자 수의 합계와 동일하다는 사실에 특히주의를 기울일 필요가 있습니다.

결론

Huffman 코드-간단하고 오랜 역사많은 잘 알려진 프로그램과 회사에서 여전히 사용하는 알고리즘입니다. 단순성과 명확성을 통해 모든 크기의 파일을 효율적으로 압축하고 저장 디스크 공간을 크게 줄일 수 있습니다. 즉, Huffman 알고리즘은 오랫동안 연구되고 해결 된 계획이며 관련성이 오늘날까지 감소하지 않습니다.

허프만 코딩
그리고 파일 크기를 줄이는 기능 덕분에네트워크 또는 다른 수단을 통한 전송이 더 쉽고 빠르며 편리해집니다. 알고리즘을 사용하면 구조와 품질에 해를 끼치 지 않고 모든 정보를 절대적으로 압축 할 수 있지만 파일 무게를 줄이는 효과를 극대화 할 수 있습니다. 즉, Huffman 인코딩은 파일 크기를 압축하는 가장 인기 있고 현재의 방법입니다.