2012-11-18 4 views
2

저는이 단어에 대해 몇 가지 단어와 값이있는 정적 사전 파일을 사용하고 있습니다. 이 값은 고정 크기가 아닙니다. 예를 들어 the1, love01, kill101입니다. 단어 그룹을 압축하려고하면 모든 단어를 탐색하고 해당 단어에 대한 값이 있으면 사전을 찾습니다. 하나가 존재하면 값으로 단어를 변경하고, 존재하지 않으면 단어를 바이트로 인코딩합니다. 압축 후에 나는 비트의 덩어리를 가지며, 이러한 사전 값과 압축되지 않은 단어는 고정 된 크기가 아니기 때문에 비트를 그룹화하고 디코딩 할 수 없습니다.압축 된/압축되지 않은 비트 그룹을 식별하는 방법은 무엇입니까?

모든 비트 그룹에 대해 1 비트 플래그를 사용하여 압축 또는 압축 해제를 결정할 생각을했지만 코드 워드 또는 일반 단어의 알 수없는 길이 때문에 플래그 비트를 감지 할 수 없습니다.

1 바이트 구분 기호를 사용하면 여전히 문제가 있습니다. 내 구분 기호가 00000000이고 구분 기호 앞에 100이 있고 구분 기호 뒤에 001이 있다고 가정 해 봅시다. 따라서 10000000000001,이 비트 중 어느 그룹이 구분 기호인지 어떻게 알 수 있습니까? 압축/압축되지 않은 비트를 그룹화하여 디코딩 할 때 다른 방법을 사용할 수 있습니까? 고맙습니다.

답변

0

우선이 언어를 배포하려는 언어 및 시스템은 무엇입니까? 많은 언어가 압축을위한 자체 라이브러리와 도구를 제공하며 주요 저수준 설계가 없이도 필요에 따라 사용할 수 있습니다.

대답은 여기 압축을 취소 할 수 있도록 좀 더 엄격한 부기와 파일 형식을 설정하는 것입니다. 대부분의 압축 시스템은 파일 형식에 약간의 오버 헤드가 있습니다. 따라서 두 번 무언가를 압축 할 때 반드시 아무것도 저장하지 않고 실제로 파일 크기를 늘릴 수 있습니다.

종종 파일은 파일 시작시 헤더를 활용하여 주요 정보를 제공합니다. 압축 파일과 관련된 규칙을 정의하기에 좋은 장소입니다.

  1. 코드 단어 사이에서만 사용할 고정 크기 구분 기호를 만듭니다. 이것은 파일을 분석 한 후 실제로 압축 된 데이터를 쓰기 전에 결정할 수 있습니다.
  2. 고정 된 알려진 값 대신 구분 기호를 생성하는 경우이 값을 머리글 항목 중 하나로 포함하십시오.
  3. 헤더를 간단한 ascii 형식으로 유지하면 sscanf 및 fscanf와 같은 표준 도구를 사용하여 쉽게 추출 할 수 있습니다.
  4. 추가 정보가 포함될 수있는 헤더를 원할 경우 헤더가 끝나는 위치와 데이터가 시작되는 위치를 일관된 방법으로 알려야 할 수도 있습니다. "ENDHEADER"의 효과를 포함하여 충분히 쉽게 식별 할 수 있어야합니다.
+0

특정 프로젝트에 대해이를 개발해야하므로 라이브러리 나 도구를 사용할 수 없습니다. 그리고 고정 크기 delimeter에 대한 질문은 마지막 단락에 있습니다. – gmnnn

관련 문제