KR19980086979A - 데이터 압축방법 및 장치 - Google Patents
데이터 압축방법 및 장치 Download PDFInfo
- Publication number
- KR19980086979A KR19980086979A KR1019980017050A KR19980017050A KR19980086979A KR 19980086979 A KR19980086979 A KR 19980086979A KR 1019980017050 A KR1019980017050 A KR 1019980017050A KR 19980017050 A KR19980017050 A KR 19980017050A KR 19980086979 A KR19980086979 A KR 19980086979A
- Authority
- KR
- South Korea
- Prior art keywords
- data stream
- address
- write
- inlet
- buffer
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
데이터 스트림을 압축하기 위한 방법으로서, 상기 데이터 스트림의 제 1부분은 윈도우 내에서 판독되며, 상기 윈도우는 이력 버퍼 및 예견능력 버퍼를 구비한다. 색인은 선택되고, 상기 예견능력 버퍼 내의 상기 데이터 스트림의 제 4부분으로 취해지고, 및 상기 색인에 기초로 하고, 또한 포인터 배열 내의 입구(entry)가 선택된다. 기록 배열 내의 초기 입구는 상기 포인터 배열 입구에 기초로 하여 선택된다. 상기 기록 배열 초기 입구는 이력 버퍼 어드레스 및 기록 배열 어드레스를 구비한다. 상기 데이터 스트림의 제 3부분은 선택되고, 상기 초기 입구의 상기 이력 버퍼 어드레스에 의해 기준되는 상기 이력 버퍼 내의 어드레스에서 시작한다. 상기 데이터 스트림의 상기 제 3부분은 상기 예견능력 버퍼 내의 상기 데이터 스트림의 제 2부분과 비교된다. 만약 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합하지 않는다면, 그러면 상기 기록 배열 내의 순차적인 입구가 선택되고, 상기 초기 입구의 상기 기록 배열 어드레스에 기초로 하고, 또한 상기 순차적인 입구는 따라서 상기 초기 입구로 지정된다. 상기 제 3부분을 선택하는 것으로부터 순차적인 입구를 선택하는 단계는, 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합되거나, 상기 기록 배열 내의 입구들이 더 이상 남아 있지 않을 때까지 반복된다. 상기 기록 배열 내의 입구들이 더 이상 남아 있지 않을 경우에는, 상기 데이터 스트림의 상기 제 2부분은 상기 출력 파일에 기록되고, 또한 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1 부분은 미리 정해진 양만큼 증분된다. 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합하는 경우에는, 상기 데이터 스트림의 상기 제 3부분의 상기 이력 버퍼 어드레스 및 상기 데이터 스트림의 제 3부분 및 상기 데이터 스트림의 상기 제 2부분중 얼마나 많은 바이트가 정합되는지를 표시하는 길이의 값은 상기 출력 파일에 출력되고, 또한 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1부분은 정합되는 바이트의 수만큼 증분된다. 색인을 선택하는 단계로부터의 상기 방법의 단계는 상기 데이터 스트림의 모두가 상기 윈도우 내에서 판독될 때까지 반복된다.
Description
본 발명은 정보 전달 및 저장 분야에 관한 것이다. 더 상세하게는, 본 발명은 디지털화된 정보를 압축하여 정보를 저장하는데 요구되는 메모리의 크기를 줄이는 것에 관한 것이다.
데이터 압축은 디지털화된 데이터 스트림과 같은, 주어진 정보를 표시하는데 요구되는 캐릭터의 수를 줄이는데 사용된다. 사용되는 캐릭터의 수를 줄임으로써, 데이터 스트림은 더 적은 양의 메모리에 저장될 수 있거나, 또는 시간의 더 짧은 길이에서 또는 더 적은 대역폭을 사용하는 것과 같은, 더 효율적으로 전달될 수 있다. 몇 가지의 다른 방법중 임의의 하나 이상이 데이터를 압축하는데 사용될 수 있다.
데이터 압축 방법을 선택하는데 2개의 중요한 고려 사항은 데이터가 압축되는 정도 및 압축이 발생하는 속력이다. 데이터의 정도만큼, 데이터를 표시하는데 사용되는 캐릭터의 수가 감소된 양을 의미한다. 만약 캐릭터의 수가 약간만 줄어든다면, 그러면 데이터 압축은 캐릭터의 수가 크게 줄어들 때만큼 이득되지는 않았다. 마찬가지로, 데이터를 압축하는데 상대적으로 더 많은 시간의 양을 요구하는 압축 방법은 상대적으로 더 적은 시간의 양을 요구하는 방법 만큼 이득은 없다. 그러므로, 데이터를 표시하는데 요구되는 캐릭터의 수를 크게 줄이고, 적은 양의 시간에서 작동하는 데이터 압축 방법이 일반적으로 선호되고 있다.
따라서, 요구되는 것은 높은 정도의 압축을 가지고, 또한 데이터를 압축하는데 요구되는 시간의 양을 줄이는 데이터 압축을 위한 방법 및 장치이다.
상기 및 다른 요구는 데이터 스트림을 압축하기 위한 방법에 의해 충족된다. 데이터 스트림의 제 1부분은 윈도우 내에서 판독되고, 상기 윈도우는 이력 버퍼 및 예견능력 버퍼를 구비한다. 색인은 선택되고, 상기 예견능력 버퍼 내의 상기 데이터 스트림의 제 4부분으로 취해지고, 및 상기 색인에 기초로 하고, 또한 포인터 배열 내의 입구(entry)가 선택된다. 기록 배열 내의 초기 입구는 상기 포인터 배열 입구에 기초로 하여 선택된다. 상기 기록 배열 초기 입구는 이력 버퍼 어드레스 및 기록 배열 어드레스를 구비한다. 상기 데이터 스트림의 제 3부분은 선택되고, 상기 초기 입구의 상기 이력 버퍼 어드레스에 의해 기준되는 상기 이력 버퍼 내의 어드레스에서 시작한다. 상기 데이터 스트림의 상기 제 3부분은 상기 예견능력 버퍼 내의 상기 데이터 스트림의 제 2부분과 비교된다. 만약 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합하지 않는다면, 그러면 상기 기록 배열 내의 순차적인 입구가 선택되고, 상기 초기 입구의 상기 기록 배열 어드레스에 기초로 하고, 또한 상기 순차적인 입구는 따라서 상기 초기 입구로 지정된다.
상기 제 3부분을 선택하는 것으로부터 순차적인 입구를 선택하는 단계는, 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합되거나, 상기 기록 배열 내의 입구들이 더 이상 남아 있지 않을 때까지 반복된다. 상기 기록 배열 내의 입구들이 더 이상 남아 있지 않을 경우에는, 상기 데이터 스트림의 상기 제 2부분은 상기 출력 파일에 기록되고, 또한 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1 부분은 미리 정해진 양만큼 증분된다. 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합하는 경우에는, 상기 데이터 스트림의 상기 제 3부분의 상기 이력 버퍼 어드레스 및 상기 데이터 스트림의 제 3부분 및 상기 데이터 스트림의 상기 제 2부분중 얼마나 많은 바이트가 정합되는지를 표시하는 길이의 값은 상기 출력 파일에 출력되고, 또한 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1부분은 정합되는 바이트의 수만큼 증분된다. 색인을 선택하는 단계로부터의 상기 방법의 단계는 상기 데이터 스트림의 모두가 상기 윈도우 내에서 판독될 때까지 반복된다.
다음의 도면과 관련하여 고려할 때 본 발명의 추가의 장점은 바람직한 실시예의 상세한 설명을 참조하여 분명하게 될 것이며, 상기 도면은 상세한 설명을 더 잘 도시하기 위해 척도하지 않고, 유사한 참조 번호는 몇 가지의 견해를 통해서 유사한 요소를 지정한다.
도 1은 압축 장치의 실시예를 도시하는 기능 블록도.
도 2는 기록 배열 입구를 형성하는 연결의 한 방법을 도시한다.
도 3은 포인터 배열 및 기록 배열을 갱신하기 위한 방법의 실시예를 도시하는 흐름도.
도 4는 데이터 스트림의 제 3부분을 선택하기 위해 포인터 배열 및 기록 배열을 사용하기 위한 실시예를 도시하는 흐름도.
디지털 데이터의 기본 형태에서, 디지털 데이터는 전형적으로 0(zeros) 및 1(ones)의 스트림으로 표시된다. 각각의 0 및 각각의 1은 비트라 한다. 바이트라 불리는 0 및 1의 그룹은 문자 및 숫자와 같은 다른 캐릭터를 표시한다. 방법이 수행되는 하드웨어에 따라, 바이트는 다른 수의 비트로 구성될 수 있다. 바람직한 압축 장치의 기능 블록도가 도 1에 도시되어 있다.
바람직하게, 압축은 비트 방식의 런렝스 엔코딩(bit-wise run length encoding)을 갖는 시작 데이터 스트림을 변환시킴으로써 시작된다. 스트림 내의 주행에서 연속적인 0 또는 1의 숫자를 카운트하고, 이들 주행 길이 숫자를 출력 파일에 기록함으로써, 상기는 행해진다. 예를 들면, 표 1은 32비트의 입력 데이터 스트림을 도시한다.
00001100111110000011101010000111 |
바람직한 실시예에 있어서, 출력 파일에 기록된 제 1 주행 길이 숫자는 항상 초기 0의 숫자이다. 표 1에 도시된 예에서, 초기 0의 숫자는 4개이다. 따라서, 출력 파일에 기록된 처음의 숫자는 4개이다. 출력 파일은 바람직하게 또한 디지털 파일일 수 있고, 그래서 숫자 4개로 표시되는 0 및 1의 비트 패턴은 어느 것이 출력 파일에 기록될 수 있다는 것이 이해될 수 있을 것이다. 상기는 바람직하게 상기 설명에 기록되어 있는 것과 같이 기술된 모든 숫자의 경우가 될 것이다. 입력 데이터 스트림의 제1캐릭터가 0 대신에 1이라면, 그러면 0의 값이 출력 파일에 기록되었을 것이고, 입력 데이터 스트림의 처음에 0은 존재하지 않는 것으로 도시하게 된다.
초기 0의 숫자가 출력 파일에 기록된 후, 0의 초기 주행에 이어지는 0의 숫자가 출력 파일에 기록된다. 표 1에 도시된 예에서, 0의 초기 주행에 이어지는 1의 숫자는 2개이다. 따라서, 출력 파일에 2개가 기록된다. 위에서 기술된 방식에 따라서, 0 및 1의 주행 길이 숫자는 교대로 출력 파일에 기록된다. 만약 0 또는 1의 주행 길이가 254개를 초과한다면, 그러면 255개의 값이 출력 파일에 기록되고, 주행의 나머지가 카운트되고, 또한 그 다음에 상기 나머지 값은 물론 출력 파일에 기록된다. 매우 긴 주행에 대해서는, 나머지 값이 기록되기 전에 출력 파일 내에 기록된 255개중 몇 개의 값이 될 수 있다. 따라서, 출력 파일을 압축을 해제할 때, 압축 해제 경로는 바람직하게, 255개의 값은 다음에 이어지는 값이 실제 런렝스 값에 도달하기 위해 255개의 값에 더해져야만 한다는 지시를 인식한다.
상기 방법은 32비트보다 더 크고 더 작은 길이의 입력 데이터 스트림에 동등하게 적용할 수 있고, 이러한 길이는 상기 방법을 기술하는데 편의상 선택되어져 왔다는 것이 이해될 수 있을 것이다. 표 1에 도시된 입력 스트림의 0 및 1 모두가 비트 방식의 런렝스 엔코딩에 의해 처리되고 있을 때, 표 2에 도시된 것과 같이 출력 파일이 만들어 졌을 것이다.
4,2,2,5,5,3,1,1,1,1,4,3 |
런렝스 엔코딩은 전형적으로 입력 데이터 스트림의 길이를 어떤 양만큼 줄이지만, 모든 데이터 스트림 타입의 압축 방법은 비효율적이다. 예를 들면, 만약 입력 데이터 스트림이 하나 이상의 보존 0 또는 1의 매우 적은 주행을 가진다면, 출력 파일은 입력 데이터 스트림보다 상당히 작지는 않았을 것이고, 또한 입력 데이터 스트림을 처리하는데 요구되는 시간이 달성되는 압축 정도에 비해 가치가 없을 수 있다. 따라서, 바람직한 실시예에서, 런렝스 엔코딩은 데이터 압축 방법 및 장치에서 선택 가능한 임의의 제 1단계이다. 런렝스 엔코딩으로부터의 출력 파일은 런렝스 엔코딩이 사용되는 경우에 대해, 지금부터 기술되는 압축 작동의 나머지에 대해서는 입력 데이터 스트림으로 간주될 것이다.
입력 데이터 스트림은 다음에 수정 슬라이딩 윈도우 방법으로 압축된다. 본질적으로, 상기 방법은 데이터 스트림 내의 캐릭터의 반복 확인 주행을 찾음으로써 입력 데이터 스트림을 압축한다. 비트 방식의 런렝스 엔코딩의 예에서, 상기 예는 0 및 1로 표시되는 입력 데이터 스트림에 접근되었다. 데이터 압축의 슬라이딩 윈도우 단계의 입력 데이터 스트림은 또한 바람직하게 1 및 0인 동시에, 이들 1 및 0은 다른 캐릭터로 표시될 수 있으며, 이것은 상기 방법이 더 쉽게 이행되는 것을 가능하게 한다.
바람직하게, 입력 데이터 스트림은 2개의 부분, 즉 이력 버퍼 및 예견능력(look-ahead) 버퍼를 갖는 슬라이딩 윈도우 내에서 판독된다. 바람직한 실시예에서, 이력 버퍼의 크기는 512바이트이고, 예견능력 버퍼의 크기는 277바이트이다. 그러나, 다른 실시예에서, 이력 버퍼 및 예견능력의 크기에 대한 다른 값이 선택될 수 있다.
윈도우는, 입력 데이터 스트림이 종종 윈도우에 동시에 유지될 수 있는 것보다 더 많은 캐릭터를 포함하기 때문에, 슬라이딩 윈도우로 지정되어 있다. 따라서, 입력 데이터 스트림의 제 1부분만이 동시에 처리되고, 이전의 제 1부분이 처리되고 출력 파일에 기록됨에 따라, 입력 데이터 스트림의 다음 부분이 윈도우 내에서 판독된다. 입력 데이터 스트림의 상기 다음 부분은 그 후 데이터 스트림의 제 1부분으로 지정되고, 또한 처리는, 바람직하게 입력 데이터 스트림의 모두가 상기와 같이 처리될 때까지 상기 방식으로 계속된다. 여기에서 사용되는 용어가 입력 데이터 스트림을 슬라이딩 윈도우 내에서 판독되는 것으로 기술되었지만, 상기는 서술 언어이고, 방법의 실질적 수행은 몇 가지의 다른 방식중 하나 이상으로 행해질 수 있다. 예를 들면, 바람직한 실시예에서, 입력 데이터 스트림은 메모리에 전체로 또는 부분으로 유지되고, 또한 포인터는 데이터 스트림의 어느 부분이 현재 이력 버퍼 또는 예견능력 버퍼 내에 위치되어 있는지를 한정하는데 사용된다.
데이터 스트립의 제 1부분을 처리하기 위하여, 현재 예견능력 버퍼에 존재하는 데이터 스트림의 일부분이 현재 이력 버퍼에 존재하는 데이터 스트림의 일부분과 비교된다. 예견능력 버퍼로부터 비교되는 데이터 스트림의 부분은 제2부분으로 지정되고, 또한 이력 버퍼로부터 비교되는 데이터 스트림의 부분은 제3부분으로 지정될 것이다. 만약 제2부분 및 제3부분 사이의 정합이 발견되면, 2개의 값은 출력 데이터 파일에 한 쌍으로 기록된다. 제1의 값은 이력 버퍼 내의 데이터 스트림 제 3부분의 시작 어드레스를 표시하고, 또한 제2의 값은 제3부분에 정합되는 제2부분의 길이를 표시한다. 입력 데이터 스트림은 그 다음에 슬라이딩 윈도우를 통해서 제1의 값의 캐릭터의 숫자만큼 증분되며, 이러한 증분된 숫자는 정합이 발견되었던 캐릭터의 숫자이다. 예를 들면, 표 3에 주어진 데이터 스트림을 고려하고, 이것은 슬라이딩 윈도우 내의 데이터 스트림의 제 1부분을 표시한다. 예를 위해, 20개의 캐릭터만의 윈도우 크기가 사용될 것이다.
000000000111111 11112 |
123456789012345 67890 |
ABCDEFGHIJKLMNO FGHOL |
History buffer ^ Look-ahead buffer |
데이터 스트림의 브레이크 아래에 위치하는 캐럿은 이력 버퍼와 예견능력 버퍼 사이의 구분을 표시한다. 입력 데이터 스트림이 물리적으로 이력 버퍼와 예견능력 버퍼 사이를 구분하는 것이 반드시 필요한 것은 아니며, 그러나 포인터 또는 다른 상기 장치는 데이터 스트림의 어느 부분이 이력 버퍼에 있고, 또한 데이터 스트림의 어느 부분이 예견능력 버퍼에 있는지를 추적하는데 사용될 수 있다는 것이 이해될 것이다. 데이터 스트림의 알파벳 데이터를 위에서 나열되는 값은 지금부터 더 자세히 설명되는 것과 같이, 어드레스를 표시한다. 바람직하게, 윈도우는 데이터 스트림이 처리되는 동안, 데이터 스트림을 따라 슬라이딩하며, 따라서, 아직 처리되지 않은 데이터 스트림의 새로운 부분은 예견능력 버퍼에 들어가고, 또한 그 후에 새로운 부분이 윈도우의 이력 버퍼 단부로부터 슬라이딩 윈도우에서 빠져 나갈 때까지, 이력 버퍼를 통해서 증분된다.
예견능력 버퍼 내의 데이터 스트림의 제2부분은 캐릭터 F와 함께 시작한다는 것을 간주하라. 예견능력 버퍼의 제 2부분에 정합하는 이력 버퍼 내의 데이터 스트림의 제 3부분을 발견하는 것이 바람직하다. 이력 버퍼 내의 데이터 스트림의 몇 가지 다른 부분이 정합이 발견되기 전에 제 2부분과 비교될 수 있다. 예를 들면, 캐릭터 F인 제 2부분의 시작은 이력 버퍼의 제 1캐릭터 A와 비교될 수 있으며, 캐릭터 A는 제 3부분으로 지정된다. 물론, 이들 캐릭터는 정합하지 않으며, 그래서 이력 버퍼의 데이터 스트림의 순차적 부분이 제 2부분과 비교되는 데이터 스트림의 제 3부분으로 선택된다. 예를 들면, 다음의 제 3부분은 이력 버퍼의 다음의 캐릭터, 즉 캐릭터 B와 함께 시작할 수 있다. 상기는 또한 데이터 스트림의 제 2부분에 정합하지 않으며, 그래서 순차적인 제 3부분은 선택된다.
이력 버퍼의 데이터 스트림의 초기 및 순차적인 제 3부분이 선택되는 방법에 의해 정합을 발견하는데 요구되는 시간 량을 크게 줄일 수 있다. 예를 들면, 초기 제 3부분은 항상 이력 버퍼의 제 1캐릭터와 함께 시작함으로써 선택될 수 있고, 또한 그 다음에, 순차적인 제 3부분은 정합이 발견되든지 또는 이력 버퍼의 단부가 도달될 때까지, 이력 버퍼를 통해서 동시에 1개의 캐릭터를 연속적으로 진행시킴으로써 선택될 수 있다. 그러나, 어떤 종류의 색인을 만듦으로써, 초기 및 순차적인 제 3부분을 선택하는 것이 더 효율적일 수 있다. 상기의 주제는 나중에 더 자세하게 논의될 것이다.
초기 및 순차적인 제 3부분이 발견되는 방법에도 불구하고, 제 3부분과 제 2부분 사이의 정합이 발견될 때, 정합하는 제 3부분의 시작을 위한 어드레스가 기록된다. 상기 어드레스는 바람직하게 이력 버퍼의 시작으로부터 오프셋 값으로 형성한다. 표 3에 도시된 예에서, 이력 버퍼의 정합하는 F의 어드레스는 6이다. 상기 어드레스, 즉 6은 출력 파일에 기록된 출력 쌍의 제 1의 값이다. 기록되는 다음의 값은 제 2부분에 정합하는 제3부분의 길이이다. 도시된 예에서, FGH의 제 2부분은 FGH의 제 3부분과 정합하고, 그래서 제3 및 제2부분의 캐릭터와 정합하는 삼(three)을 표시하는 3의 값은 출력 파일의 출력 쌍의 제2의 값으로 기록된다.
예견능력 버퍼의 제2부분에 정합하는 이력 버퍼의 하나 이상의 제 3부분이 될 수 있음이 이해될 것이다. 이러한 경우에는, 정합하는 제 3부분중 어느 것이 최선의 정합인지를 결정하는 방법이 사용되어져야 한다. 바람직하게, 입력 데이터 스트림의 더 큰 부분이 상기의 결정에 의해 이러한 단계에서 처리되기 때문에, 제 2부분의 캐릭터중 가장 큰 숫자와 정합하는 상기 제3부분이 최상의 정합으로 간주된다. 만약 2개 이상의 제 3부분 모두가 제 2부분의 캐릭터의 동일한 숫자와 정합한다면, 그러면, 바람직한 실시예에서, 최상의 정합은 어드레스를 지시하는데 요구되는 캐릭터의 항으로 가장 작은 어드레스를 갖는 바로 제 3부분이다. 상기의 방식에서, 출력 파일은 가능한 한 작게 유지될 수 있다. 표에 도시된 예에서, 제3부분의 어드레스는 이력 버퍼의 시작으로부터 오프셋으로 계산되어 왔다. 그러나, 다른 어드레스 구조는 이력 버퍼의 다른 단부로부터 오프셋을 계산하는 것과 같이, 예견능력 버퍼에 가장 가까운 곳에서 교대로 사용될 수 있다.
정합이 상기의 방식으로 발견되면, 입력 데이터 스트림은 출력 파일에 기록된 제 2의 값과 동일한 캐릭터의 숫자만큼 슬라이딩 윈도우를 통해서 증분되며, 제3 및 제2부분 사이의 정합 길이이다. 따라서, 상기 입력 데이터 스트림의 동일한 캐릭터의 숫자는 슬라이딩 윈도우의 일단부에서 이력 버퍼로부터 증분될 것이며, 또한 상기 입력 데이터 스트림의 동일한 캐릭터의 숫자는 슬라이딩 윈도우의 타단부에서 예견능력 버퍼 내에서 증분될 것이다. 위에서 주어진 예를 위해, 제 2의 값은 3이며, 그래서 윈도우를 통해 데이터 스트림을 증분시킨 후, 윈도우는 그 후 표 4에 도시된 것과 같이 데이터 스트림을 유지한다.
000000000111111 11112 |
123456789012345 67890 |
DEFGHIJKLMNOFGH OLABD |
History buffer ^ Look-ahead buffer |
윈도우에 존재하는 입력 데이터 스트림의 상기 증분된 부분은 처리되고 있는 데이터 스트림의 새로운 제1부분이다. 예견능력 버퍼의 데이터 스트림의 새로운 제2부분은 문자 O와 함께 시작한다. 오프셋 어드레스 숫자들은 그들의 위치를 유지하고, 또한 제2부분과 초기 또는 순차적인 제3부분 사이의 정합을 발견하기 위한 처리가 새로 시작한다. 상기의 예에서, 제2부분은 어드레스 12에서 시작하는 이력 버퍼의 제 3부분과 정합하고, 또한 1개의 캐릭터의 길이로 주행한다. 따라서, 표3 및 표 4에 도시된 것과 같이 발견된 정합에 대해 출력 파일에 기록되는 제1의 2개의 쌍이 표 5에 주어진 것과 같다.
6,3,12,1 |
출력 파일 내에 값을 기록하는 순서는 반대일 수 있어서, 길이는 기록된 제 1의 값이 될 수 있고, 어드레스는 기록된 제2의 값이 될 수 있음이 이해될 것이다. 어드레스 및 길이의 값과 같은, 출력 파일에 기록되는 값은 표 5에 도시된 것과 같이 출력 파일에 기록될 수 있지만, 다른 구조를 사용하여 기록되는 것이 바람직하며, 이러한 구조는 출력 파일의 크기를 줄이기 위해 선택된다. 예를 들면, 어드레스 또는 길이의 값중 어느 하나가 실제의 값으로 기록되는 것 대신에 표시될 수 있다. 바람직하게, 2개의 다른 출력 파일 엔코딩 방법중 하나, 즉 정적 엔코딩 방법 또는 동적 엔코딩 방법을 선택할 수 있다.
정적 엔코딩 방법에 있어서, 길이 및 어드레스 값중 하나 또는 둘 다가 특별히 고정된 비트 시퀀스에 배치되어 있다. 상기 방법의 바람직한 실시예에서, 길이만이 그렇게 표시되고, 또한 어드레스는 고정 길이 9비트 필드 내에 기록된다. 길이 값은 미리 한정된 표에서 길이의 값을 찾아서 엔코드된다. 표시된 캐릭터는 길이의 값보다 길이에 있어서 더 짧은 것이 바람직하고, 또한 바람직하게, 가장 흔히 발생하는 이들 길이 값이 가장 짧은 표시로 할당되어서, 출력 파일은 가능한 한 작게 될 수 있다. 만약 발견된 정합이 없다면 또는 정합 길이가 하나라면, 엔코더는 이진수 0을 방출하고, 부정합 바이트에 이어진다. 8비트 바이트에 대해, 상기는 총 9비트이다. 출력 파일이 디코드될 때, 디코더는 또 다시 미리 한정된 표를 통해서 표시된 길이를 주행하고, 또한 길이 값을 뒤로 돌린다.
만약 하나보다 더 큰 정합 길이가 발견되면, 그 다음 바람직한 실시예에서, 표 6에 주어진 표시된 표를 사용한다.
정합 길이 | 길이 코드 | 변위 코드 |
2-3 | 10x | 9비트 코드 |
4-7 | 1110xx | 9비트 코드 |
8-15 | 1110xxx | 9비트 코드 |
16-31 | 11110xxxx | 9비트 코드 |
32-277 | 11111xxxxxxxx | 9비트 코드 |
9비트 변위 코드는 바람직하게 다음과 같이 계산된다.
temp=(예견능력 버퍼의 제 1바이트의 어드레스)-(정합-위치-어드레스)-1
만약 temp<0 이면, 변위 코드=temp+796
그렇지 않으면, 변위 코드=temp
여기서, 어드레스는 이력 버퍼의 어드레스이다.
길이 코드에 대한 X값은 코드 범위에서 주어진 길이의 오프셋으로 코드화된다. 예를 들면, 8-15의 범위에 대해, 12의 스트링(string) 길이는 1110100으로 코드화되고, 범위 내에서 4의 오프셋으로 코드화된다. 마지막 표시는 변위 코드에 이어지는 길이 코드이다. 압축기가 압축 사이클을 마치면, 특별한 파일 종료(end-of-file) 표시, 바람직하게는 1111111111111이 출력 파일에 기록된다. 상기는 출력 파일의 종료를 표시한다.
길이 값이 엔코드되는 표는 데이터 스트림이 처리되는 동안 변하지 않는 미리 한정된 정적 표가 아니라, 처리되고 있는 데이터 스트림의 특정한 특색에 기초로 하여 변하는 동적 표인 것을 제외하고는, 동적 엔코딩 방법은 정적 엔코딩 방법과 동일한 기본 원리에 따라 작동한다. 상기 방법에 있어서, 다른 길이의 값의 발생의 빈도수가 모니터되고, 또한 주어진 길이의 값의 빈도수가 증가함에 따라, 더 적은 발생의 빈도수를 갖는 이들 길이보다 표에서 더 짧은 표시로 할당된다. 바람직하게, 미리 한정된 룰 세트가 이들 표 할당 결정을 만드는데 사용되고, 또한 룰 세트가 압축기 및 압축해제기(decompressor) 장치에 제공되어, 압축해제기는 출력 파일을 기록하는데 만들어진 압축기와 동일한 출력 파일을 처리하는 포인트에서 표를 변화시킬 수 있고, 또한 출력 파일은 압축해제기에 의해 시작 데이터 스트림으로 완전히 재구성될 수 있다. 동적 표를 사용함으로써, 가장 흔히 발생하는 이들 길이의 값은 비록 발생의 빈도수가 데이터 스트림의 압축을 통해 변하더라도, 가장 작은 표시 값으로 할당된다.
예를 들면, 바람직한 실시예에서, 제 2엔코딩 방법은 처음에 출력 표시를 발생시키기 위해 상기의 엔코딩 방법을 사용한다. 표시가 발생됨에 따라, 논리 회로는 얼마나 많은 각각의 표시 타입이 발생되는지를 추적한다. 만약 주어진 표시 타입의 빈도수가 거의 없는 길이 코드 비트로 코드화되는 표시 타입을 초과한다면, 상기 더 높은 빈도수 표시 타입은 거의 없는 길이 코드 비트로 길이 코드 타입을 채택한다. 표 7에 주어진 표시하는 표를 고려하자.
타입 | 정합 길이 | 길이코드 | 변위 코드 |
A | 2 | 100 | 9비트 코드 |
B | 3 | 101 | 9비트 코드 |
C | 4-7 | 1110xx | 9비트 코드 |
D | 8-15 | 1110xxx | 9비트 코드 |
E | 16-31 | 11110xxxx | 9비트 코드 |
F | 32-277 | 11111xxxxxxxx | 9비트 코드 |
예를 들면, 만약 타입 E 표시의 숫자가 압축 작업 동안, 타입 D 표시의 숫자를 초과하면, 추가의 타입 E 및 D 표시는 표 8에 주어진 것과 같이 코드화될 것이다.
타입 | 정합 길이 | 길이 코드 | 변위 코드 |
E | 8-15 | 11110xxx | 9비트 코드 |
D | 16-31 | 1110xxxx | 9비트 코드 |
사용될 수 있는 표시의 특별한 실시예가 위에 주어져 있다. 그러나, 이들 표시가 바람직한 실시예에서 사용될 수 있는 표시의 예들임이 이해될 것이다. 물론, 길이 데이터 및 변위를 엔코드하는데 사용되고 있는 표시의 더 넓은 개념 내에서 다른 표시를 사용하는 것은 가능하며, 또한 그렇게 하는 것이 이로울 때, 엔코딩이 변화할 수 있는 동적 구조를 사용하는 것이 가능하다.
바람직한 실시예에서, 압축 방법은 공점적(concurrent) 방식으로 주행하기 때문에, 상기 방법의 몇 가지 다른 단계는 동시에 발생할 수 있다. 예를 들면, 제 2부분 및 제 3부분을 비교하는 한대 이상의 비교기를 제공함으로써, 동시에 하나 이상의 제 3부분이 비교될 수 있고, 또한 정합은 따라서 더 빠르게 발견될 수 있다. 바람직한 실시예에서는, 4대의 비교기가 사용된다.
만약 예견능력 버퍼의 제 2부분과 정합하는 제 3부분이 존재하지 않는다면, 그러면 데이터 스트림은 캐릭터의 어떤 수만큼 윈도우를 통해 증분된다. 예견능력 버퍼로부터 이력 버퍼로 증분되는 이들 캐릭터는 출력 파일 내에 기록되고, 또한 새로운 제 2부분이 초기 또는 순차적인 제 3부분과 정합하도록 시도하는 처리가 반복된다. 바람직한 실시예에서, 데이터 스트림은 단일의 캐릭터만큼 증분될 뿐이며, 그래서 상기 단일의 캐릭터는 위에서 기술된 것과 같이 출력 파일에 기록되고, 예견능력 버퍼로부터 이력 버퍼로 증분된다.
위에서 언급된 바와 같이, 압축 장치는 데이터 스트림의 제 3부분 후보데이터(candidate)를 찾기 위해 이력 버퍼를 통해 연속적으로 단계를 밟는 것보다 다른 방법을 사용함으로써 데이터 스트림 상에서 더 빠르게 작동할 수 있다. 바람직하게, 2개의 배열을 갖는 장치는 가능하게 예견능력 버퍼의 제 2부분과 정합하는 후보데이터인 이력 버퍼의 제 3부분을 확인하는데 더 빠르게 사용된다. 2개의 배열은 포인터 배열 및 기록 배열로서 지정된다.
개략적으로, 데이터 스트림의 제 1부분은 윈도우 내에서 기록되는 동안, 데이터 스트림의 제 4부분은 색인을 만드는데 사용되고, 이것은 포인터 배열 내의 입구(entry)를 선택하는데 사용된다. 포인터 배열 내의 입구는 그 다음에 기록 배열 내의 초기 입구를 선택하는데 사용된다. 기록 배열 내의 초기 입구는 데이터 스트림의 제 2부분에 대해 가능하게 정합하는 데이터 스트림의 초기 제 3부분에 대해 이력 버퍼 내의 어드레스를 포함한다. 기록 배열 내의 초기 입구는 또한 기록 배열 내의 순차적인 입구에 지정하는 기록 배열 어드레스를 구비하고, 또한 이러한 순차적인 입구는 또한 데이터 스트림의 제 2부분과 정합하기 위한 가능한 후보데이터인 데이터 스트림의 순차적인 제 3부분에 대해 이력 버퍼 어드레스를 포함한다. 만약 초기 입구에 의해 기준되는 제 3부분이 제 2부분과 적절한 정합을 제공하지 않는다면, 또는 만약 더 많은 제 3부분과 비교하기를 원한다면, 그러면 순차적인 입구들이 사용될 것이다. 상기 방식에서, 가능한 정합 위치를 정하는데 더 효율적이고 목표적인 방법을 제공한다.
바람직하게 액세스되는 순차적인 기록 배열 입구의 숫자는 엄격한 기준의 평형에 따른다. 예를 들면, 만약 기록 배열의 단부가 도달된다면, 그러면 순차적인 기록 배열 입구를 선택하는 처리는 정지할 수 있다. 또한 만약 기록 배열 입구 내의 이력 버퍼 어드레스가 제 2부분과 정합하는 제 3부분을 지정한다면, 또한 정합의 길이가 미리 정해진 값과 같거나 또는 미리 정해진 값보다 더 크다면, 그러면 순차적인 기록 배열 입구는 조사되지 않을 수 있다. 게다가, 기록 배열 입구의 미리 정해진 숫자만이 조사될 수 있고, 그 시점에서, 정합하는 것이 이미 발견되었고, 또한 가장 큰 정합 길이를 구비하는 제 3부분 어느 것이나 정합하는 제 3부분으로 사용된다. 상기 방식에서, 바람직한 장치는 너무나 많은 시간의 길이가 제 3부분과 정합하는 것을 찾는데 소비되지 않는 것을 보장한다.
포인터 배열 및 기록 배열이 유용하기 위하여, 이들 배열은 압축 장치의 작동하는 동안 데이터로 로드(load)되어야 하고, 그 다음에 유지되어야 한다. 상기 처리의 개략도가 도 3에 주어져 있다. 배열들을 로드하기 위하여, 데이터 스트림은 처음에 채워진 예견능력 버퍼가 충만할 때까지 동시에 윈도우 1바이트 내에서 점증적으로 기록되고, 이력 버퍼의 데이터 스트림의 1바이트이다. 지금부터, 바람직한 실시예에서, 이력 버퍼 내로 방금 이동되었던 바이트중 더 낮은 4비트 및 예견능력 버퍼의 제 1바이트중 더 낮은 4비트(이것은 이력 버퍼 내에서 증분되는 다음 바이트이다)가 있는 데이터의 제 4부분이 연결된다. 상기 새롭게 형성된 8비트 바이트는 포인터 배열에서 입구를 찾는데 사용되는 포인터이다. 따라서, 포인터 배열의 크기와 포인터를 형성하는데 사용되는 비트의 수 사이의 관계이다. 디지털 정보중 8비트는 256유일한 값을 가지며, 이것은 포인터 배열의 크기이다. 따라서, 다른 실시예에서, 다른 포인터 배열 크기들이 선택될 수 있고, 비트중 같은 크기의 다른 수가 포인터를 만드는데 사용된다.
바람직한 실시예에서, 기록 배열은 512입구의 길이를 가진다. 그러므로, 9비트는 기록 배열 내의 입구에 지정하는데 요구된다. 언급되었던 바와 같이, 이력 버퍼는 또한 512바이트의 바람직한 크기를 가지며, 그래서 9비트는 또한 이력 버퍼 내의 바이트 모두를 어드레스 하는데 요구된다. 기록 배열 및 이력 버퍼의 크기에 대한 다른 값들이 또한 선택될 수 있고, 이것은 완전하게 기록 배열 및 이력 버퍼를 어드레스하기 위해 어드레스 비트의 같은 크기의 다른 수를 요구한다.
포인터에 의해 기준되는 포인터 배열 내의 입구는 임시적으로 기록되고, 저장되며, 또한 포인터 배열 내의 입구의 위치는 기록 배열 내의 다음에 이용 가능한 입구의 어드레스에 겹쳐서 기록된다. 바로 제 1사이클에 대해, 상기는 기록 배열 내의 제 1입구이고, 제 2사이클에 대해서는 제 2입구 등이다. 다음의 이용 가능한 기록 어드레스는 바람직하게 9비트 카운트로 실행되고, 또한 압축기 장치가 시작될 때, 0으로 초기화된다. 기록 배열 내의 디폴트 시동 값은, 초기 시작 또는 리세트를 한 후 모든 입구들은 쓸모 없기 때문에, 쓸모 없는 기록 입구들을 지시한다. 임시적으로 저장되었던 포인터 배열로부터의 입구는 이력 버퍼 내의 제 1바이트의 현재의 어드레스와 연결되고, 바이트는 이력 버퍼의 제 1어드레스에 포함되고, 또한 바이트는 위에서 포인터 배열 내에 기록된 것과 같이 기록 배열 내의 다음의 이용 가능한 입구의 어드레스에 의해 기준되는 기록 배열 입구 내에 기록된다. 연결된 기록 배열 입구의 바람직한 실시예의 도시가 도 2에 주어져 있다.
지금부터, 기록 배열 내의 다음의 이용 가능한 입구의 값은 1만큼 증분되고, 데이터 스트림의 다음 바이트는 예견능력 버퍼로부터 이력 버퍼로 증분되고, 또한 8비트 색인을 포인터 배열 내에 형성하고, 포인터 배열 및 기록 배열을 로드하는 처리는 사이클적으로 반복된다. 상기 처리는, 데이터 스트림이 윈도우를 통해 증분될 때마다, 또한 데이터 스트림의 각각의 바이트가 예견능력 버퍼로부터 이력 버퍼로 증분됨에 따라 데이터 스트림이 행해질 때마다 포인터 배열 및 기록 배열을 갱신하는데 사용하는 것이 바람직하다.
바람직한 실시예에서는, 상기 방식으로 포인터 배열 및 기록 배열을 로드하고 갱신하는 목적은 상기와 같아서, 포인터 배열 및 기록 배열은 예견능력 버퍼 내의 데이터 스트림의 제 2부분과 이력 버퍼 내의 데이터 스트림의 제 3부분 사이의 정합을 위한 가능하게 후보데이터를 제공하는데 사용될 수 있다. 따라서, 데이터 스트림이 윈도우를 통해 이전의 정합이 발견되지 않은 경우에는 1바이트이거나, 또는 이전의 정합 길이의 바이트의 수만큼 증분될 때마다, 또한 데이터 스트림의 새로운 바이트가 이력 버퍼에 들어갈 때마다, 가능한 제 3부분의 후보데이터를 찾는 방법이 바람직하게 사용된다. 포인터 배열 및 기록 배열을 사용하는 바람직한 방법을 위한 흐름도가 도 4에 주어져 있다.
처음에, 바람직하게 예견능력 버퍼 내의 제 2의 2바이트가 존재하는(이것은 이력 버퍼 내에서 증분되는 다음의 2바이트이다) 데이터 스트림의 제 4의 부분의 각각의 바이트로부터 더 낮은 4비트는 포인터 배열 내의 입구를 기준으로 하는데 사용되는 8비트 색인에 연결된다. 다른 많은 바이트들이 2바이트 각각으로부터 사용될 수 있고, 또한 다른 많은 바이트들이 사용될 수 있는 반면에, 바람직한 실시예에서 상기 방법을 사용함으로써 이득이 있다. 많은 데이터 스트림은 런렝스 엔코더로 처리될 때 16이하의 값을 생성할 것이다. 상기는, 전형적으로 데이터 스트림이 길이가 16캐릭터 이상인 0 또는 1들의 주행을 가지고 있지 않다는 것을 의미한다. 따라서, 런렝스 엔코더와 구별하는 대부분의 정보는 바이트의 하단 4비트 내에 포함될 것이다. 그러므로, 포인터 배열을 로드하고, 또한 포인터 배열을 판독하기 위한 색인을 만드는데 사용되는 비트들이 있다. 다른 실시예에서, 각각의 바이트로부터 5비트가 사용될 수 있다. 상기의 실시예에서, 포인터 배열의 크기는 1024입구인 것이 바람직하며, 1024입구는 10비트로 어드레스될 수 있는 입구들의 수이다.
색인에 의해 기준되는 포인터 배열 내의 입구는 유효하게 판독되고 체크된다. 쓸모 없는 포인터 배열 입구는 압축 방법이 시작되거나 리세트될 때 포인터 배열 내에 기록되는 디폴트 값을 포함하는 입구이다. 만약 포인터 배열 입구가 쓸모 없는 값을 포함한다면, 따라서 제 3부분의 정합하는 후보데이터가 존재하지 않고, 또한 압축 경로는 예견능력 버퍼 내의 제 1바이트를 출력 파일에 기록하고, 윈도우를 통해 1바이트만큼 데이터 스트림을 증분시키고, 및 새로운 색인을 만든다.
만약 색인에 의해 기준되는 포인터 배열 내의 입구가 유효하다면, 그러면 입구가 기록 배열 내의 어드레스이고, 이것은 포인터 배열 내의 입구에 기초로 하여 선택되어 진다. 상기는 초기 기록 배열 입구이다. 기록 배열 내의 선택되는 입구는 위에서 기술된 모든 것과 같이, 이력 버퍼 어드레스, 다른 기록 배열 어드레스, 및 이력 버퍼로부터 이전에 판독되는 바이트의 연결을 포함한다. 이력 버퍼로부터의 바이트는 유효성 체크의 대용이 된다. 만약 상기 바이트가 예견능력 버퍼의 제 1바이트와 정합하지 않는다면, 그러면 기록 배열 입구는 쓸모 없고, 이것은 정합하기 위해 체크되는 더 많은 제 3부분 후보데이터는 없다는 것을 지시한다.
만약 초기 기록 배열 입구가 유효하다면, 그러면 상기 입구의 이력 버퍼 어드레스는 이력 버퍼 내의 후보데이터 제 3부분을 참조로 한다. 상기 어드레스는 비교기 유닛과 분리하여 통과되고, 이것은 이력 버퍼 내의 제 3부분을 찾고, 또한 제 3부분이 예견능력 버퍼 내의 제 2부분과 정합하는지를 비교한다. 만약 정합이 발견되면, 그러면 상기 정합의 길이는 또한 비교기 유닛에 의해 결정된다.
초기 기록 배열 입구는 또한 기록 배열 내의 순차적인 입구의 어드레스를 포함한다. 상기 순차적인 입구는 또한 유효하게 체크되고, 만약 유효하다면, 상기 순차적인 입구의 이력 버퍼 어드레스에 의해 이력 버퍼 기준 내의 순차적인 제 3부분이 또한 비교기에 의해 제 2부분에 정합하는지 체크된다. 그러면, 상기 순차적인 입구는 초기 입구로 지정될 수 있으며, 또한 기록 배열 내의 더 많은 순차적인 입구를 발견하는 처리는 계속된다. 추가의 입구를 발견하는 상기 처리, 및 이력 버퍼 내의 추가의 제 3부분이 예견능력 버퍼 내의 제 2부분과 비교하는 상기 처리는 몇 가지의 바람직한 기준중 하나 이상이 합쳐질 때까지 계속된다. 이들 기준은 바람직하게 위에서 기술된 것과 같은데, 더 이상 기록 배열 내의 유효한 입구와 적당한 정합이 발견되지 않았고, 또는 기록 배열 내의 미리 정해진 많은 입구들이 확인되어 왔고, 및 이들 관련되는 이력 버퍼 어드레스들은 비교기 유닛과 분리하여 통과되어 왔다. 지금부터, 정합이 발견되어 오지 않거나, 이 시점에서 발견되는 최상의 정합이 사용되고, 또한 압축 방법은 위에서 기술된 것과 같이 계속된다.
입력 데이터 스트림 모두가 윈도우를 통해 증분되어 졌을 때, 데이터 스트림의 압축은 종료된다. 예견능력 버퍼도 이력 버퍼도 장치가 작동하는데 전적으로 필요하지 않다는 것이 이해될 것이지만, 장치는 유효한 정보를 포함하는 버퍼의 이들 부분을 확인시켜 줄 것이다. 예를 들면, 압축되고 있는 파일의 크기가 예견능력 버퍼 또는 이력 버퍼의 크기보다 더 적을 때, 상기는 중요하다. 위에서 기술된 것과 같이 표시될 수 있는 출력 파일은 위에서 기술된 선택된 압축 경로의 역순서를 사용하여 출력 파일 상에서 작동하는 압축해제기에 의해 압축 해제될 수 있다.
본 발명의 특별한 실시예가 위에서 특히 기술되어 졌지만, 본 발명은 당업자에게 잘 공지되어 있는 다른 개작물에 동등하게 적용할 수 있음이 이해될 것이다.
Claims (2)
- 데이터 스트림을 압축하기 위한 방법에 있어서, a. 이력 버퍼 및 예견능력 버퍼(look-ahead buffer)를 구비하는 윈도우 내에서 상기 데이터 스트림의 제 1부분을 판독하고, b. 상기 예견능력 버퍼에서 상기 데이터 스트림의 제 4부분으로부터 포착된 색인을 선택하고, c. 상기 색인에 기초로 하는 포인터 배열에서 입구(entry)를 선택하는 것으로, 상기 포인터 배열은 기록 배열의 입구들중 하나의 어드레스를 포함하는 하나 이상의 입구들의 부분을 포함하는, 상기 입구를 선택하고, d. 상기 포인터 배열 입구에 기초로 하는 상기 기록 배열에서 초기 입구를 선택하는 것으로, 상기 기록 배열 초기 입구는 이력 버퍼 어드레스 및 기록 배열 어드레스를 구비하는데, 하나 이상의 입구들의 부분은 상기 이력 버퍼 어드레스의 하나 및 상기 기록 배열 입구의 나머지를 위한 어드레스를 포함하는, 상기 초기 입구를 선택하고, e. 상기 초기 입구의 상기 이력 버퍼 어드레스에 의해 기준이 되는 상기 이력 버퍼 내의 어드레스에서 시작하는 상기 데이터 스트림의 제 3부분을 선택하고, f. 상기 데이터 스트림의 상기 제 3부분을 상기 예견능력 버퍼에서 상기 데이터 스트림의 제 2부분과 비교하고, g. 만약 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합하지 않는다면, 그러면 상기 초기 입구의 상기 기록 배열 어드레스에 기초로 하는 상기 기록 배열에서 순차적인 입구를 선택하는 것으로, 상기 순차적인 입구는 따라서 상기 초기 입구로 지정되는, 상기 순차적인 입구를 선택하고, h. 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 상기 제 2부분과 정합할 때까지, 또는 상기 기록 배열 내에 더 이상의 입구들이 남아 있지 않을 때까지, 단계e. 내지 단계g.를 반복하는 것으로, i. 만약 상기 기록 내에 더 이상의 입구들이 남아 있지 않다면, 그러면 상기 출력 파일에 상기 데이터 스트림의 상기 제 2부분을 기록하고, 미리 정해진 양만큼 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1부분을 증분시키고, 또한 ii. 만약 상기 데이터 스트림의 상기 제 3부분이 상기 데이터 스트림의 제 2부분과 정합한다면, 그러면 상기 데이터 스트림의 상기 제 3부분의 상기 이력 버퍼 어드레스를 상기 출력 파일에 출력하고, 또한 길이의 값은 상기 데이터 스트림의 상기 제 3부분 및 상기 데이터 스트림의 상기 제 2부분중 얼마나 많은 바이트가 정합되는지를 표시하고, 정합되는 바이트의 수만큼 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1부분을 증분시키는, 상기 단계e. 내지 단계g.를 반복하고, i. 상기 데이터 스트림의 모두가 상기 윈도우 내에서 판독될 때까지 단계b.로부터 상기 방법을 반복하는 것을, 포함하는 것을 특징으로 하는 데이터 스트림을 압축하기 위한 방법.
- 초기 데이터 스트림을 압축하기 위한 장치에 있어서, a. 런렝스 엔코딩(run length encoding)을 갖는 상기 초기 데이터 스트림에서 0 및 1의 연속적인 주행들을 선택적으로 압축하고, 전처리되는 데이터 스트림을 생성하기 위한 비트 방식의 런렝스(bit-wise) 전처리장치와, b. 상기 초기 및 전처리되는 데이터 스트림의 하나중 제 1부분을 선택적으로 판독하기 위한 슬라이딩 윈도우 압축기로서, 상기 슬라이딩 윈도우 압축기는 어드레스와 512바이트의 크기를 갖는 이력 버퍼 및 어드레스와 277바이트의 크기를 갖는 예견능력 버퍼를 구비하는, 상기 슬라이딩 윈도우 압축기와, c. 어드레스를 갖는 입구들을 구비하는 기록 배열로서, 상기 입구들중 하나 이상의 부분은 상기 기록 배열 입구들중 나머지와 상기 이력 버퍼 어드레스중 하나를 위한 상기 어드레스를 포함하는 상기 기록 배열 및 상기 예견능력 버퍼 내의 상기 데이터 스트림으로부터의 제 1바이트와, d. 어드레스를 갖는 입구들을 구비하는 포인터 배열로서, 상기 입구들중 하나 이상의 부분은 상기 기록 배열에서 입구중 하나의 상기 어드레스를 포함하는, 상기 포인터 배열과, e. 상기 제 1바이트의 부분 및 상기 예견능력 버퍼에서 상기 데이터 스트림의 제 2바이트의 부분으로부터 색인을 만들기 위한 수단과, f. 상기 색인에 상응하는 상기 어드레스를 구비하는 상기 포인터 배열에서 상기 입구를 선택하고, 판독하기 위한 수단과, g. 상기 선택되는 포인터 배열 입구를 타당하게 하기 위한 수단으로서, 상기 타당하지 않는 포인터 배열 입구는 상기 기록 배열에서 상기 입구들중 하나의 상기 어드레스를 포함하지 않는, 상기 선택되는 포인터 배열 입구를 타당하게 하기 위한 수단과, h. 상기 포인터 배열에서 상기 타당한 입구로부터 판독되는 상기 어드레스에 상응하는 상기 어드레스를 구비하는 상기 기록 배열에서 초기 입구를 선택하고 판독하기 위한 수단과, i. 상기 선택되는 기록 배열 초기 입구를 타당하게 하기 위한 수단으로서, 상기 타당한 기록 배열 초기 입구는 상기 예견능력 버퍼에서 상기 데이터 스트림으로부터 상기 제 1바이트를 포함하지 않는, 상기 선택되는 기록 배열 초기 입구를 타당하게 하기 위한 수단과, j. 상기 타당한 기록 배열 초기 입구에 포함되는 상기 이력 버퍼의 상기 어드레스에서 시작하는 상기 데이터 스트림의 제 3부분을 선택하기 위한 수단과, k. 상기 데이터 스트림의 상기 제 3부분을 상기 데이터 스트림의 제 2부분과 비교하고, 상기 예견능력 버퍼에서 상기 제 1바이트와 함께 시작하고, 및 만약 상기 제 3부분과 상기 제 2부분이 정합하는지를 결정하고, 또한 바이트의 수로 표현되는 것과 같이 정합하는 상기 제 3부분 및 상기 제 2부분의 길이를 추가로 결정하기 위한 비교기 유닛과, l. 상기 초기 입구에 포함되는 상기 기록 배열 어드레스에 기초로 하는 상기 기록 배열에서 순차적인 입구를 선택하기 위한 수단으로서, 상기 순차적인 입구는 상기 초기 입구로 지정되는, 상기 순차적인 입구를 선택하기 위한 수단과, m. 상기 제 3부분이 상기 제 2부분과 정합하는 바이트의 수를 포함하는 상태들중 하나 이상에 도달하는 것(meeting)은 미리 정해진 값과 적어도 같을 때까지, 상기 기록 배열 내에 더 이상 입구들이 남아 있지 않을 때까지, 및 기록 배열 입구들의 적어도 미리 정해진 수가 조사되어졌을 때까지, 요소 j. 내지 요소l.를 반복적으로 작동시키기 위한 수단과, n. 상기 제 3부분의 상기 길이 및 상기 어드레스를 포함하는 기준에 의해 결정되는 것과 마찬가지로, 상기 제 2부분과 가장 잘 정합하는 상기 제 3부분을 선택하기 위한 수단과, o. 상기 선택되는 제 3부분의 상기 이력 버퍼 어드레스 및 상기 길이를 출력 파일에 출력하기 위한 수단과, p. 정적 표 및 동적 표중 하나를 사용하는 상기 출력 파일에 출력되는 상기 길이를 선택적으로 표시화하기 위한 수단과, q. 상기 데이터 스트림의 차이에 따라 변화하지 않는 상기 정적 표의 미리 정해진 순서에 따른 상기 길이를 표시화하기 위한 상기 정적 표와, r. 상기 데이터 스트림의 차이에 따라 상기 동적 표의 미리 정해진 순서를 바꾸는 규칙에 따른 상기 길이를 표시화하기 위한 상기 동적 표와, s. 상기 윈도우 내에서 판독되는 상기 데이터 스트림의 상기 제 1부분을 바이트의 수만큼 증분시키기 위한 수단으로서, 상기 바이트의 수는 만약 정합이 발견되었다면 상기 길이에 의해 결정되고, 상기 바이트의 수는 상기 데이터 스트림의 모두가 압축될 때까지, 만약 상기 정합이 발견되지 않았다면 1이 되는, 상기 바이트의 수만큼 상기 데이터 스트림의 상기 제 1부분을 증분시키기 위한 수단과, t. 상기 출력 파일에 1111111111111의 값을 기록하기 위한 수단을 포함하는 것을 특징으로 하는 초기 데이터 스트림을 압축하기 위한 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/854,716 US5798718A (en) | 1997-05-12 | 1997-05-12 | Sliding window data compression method and apparatus |
US8/854,716 | 1997-05-12 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR19980086979A true KR19980086979A (ko) | 1998-12-05 |
Family
ID=25319383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019980017050A KR19980086979A (ko) | 1997-05-12 | 1998-05-12 | 데이터 압축방법 및 장치 |
Country Status (6)
Country | Link |
---|---|
US (1) | US5798718A (ko) |
EP (1) | EP0878914A3 (ko) |
JP (1) | JP3362177B2 (ko) |
KR (1) | KR19980086979A (ko) |
CN (1) | CN1104094C (ko) |
TW (1) | TW421926B (ko) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7190284B1 (en) | 1994-11-16 | 2007-03-13 | Dye Thomas A | Selective lossless, lossy, or no compression of data based on address range, data type, and/or requesting agent |
US6339614B1 (en) * | 1996-12-20 | 2002-01-15 | Intel Corporation | Method and apparatus for quantizing and run length encoding transform coefficients in a video coder |
US6879266B1 (en) | 1997-08-08 | 2005-04-12 | Quickshift, Inc. | Memory module including scalable embedded parallel data compression and decompression engines |
US6885319B2 (en) * | 1999-01-29 | 2005-04-26 | Quickshift, Inc. | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms |
US6208273B1 (en) | 1999-01-29 | 2001-03-27 | Interactive Silicon, Inc. | System and method for performing scalable embedded parallel data compression |
US7129860B2 (en) * | 1999-01-29 | 2006-10-31 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
US6822589B1 (en) | 1999-01-29 | 2004-11-23 | Quickshift, Inc. | System and method for performing scalable embedded parallel data decompression |
US6819271B2 (en) | 1999-01-29 | 2004-11-16 | Quickshift, Inc. | Parallel compression and decompression system and method having multiple parallel compression and decompression engines |
US6145069A (en) * | 1999-01-29 | 2000-11-07 | Interactive Silicon, Inc. | Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices |
US7538694B2 (en) | 1999-01-29 | 2009-05-26 | Mossman Holdings Llc | Network device with improved storage density and access speed using compression techniques |
US6320523B1 (en) * | 1999-07-30 | 2001-11-20 | Unisys Corporation | Method and apparatus for reducing the time required for compressing data |
US6188333B1 (en) * | 1999-08-12 | 2001-02-13 | Unisys Corporation | LZW data compression apparatus and method using look-ahead mathematical run processing |
US6515598B2 (en) * | 2000-12-22 | 2003-02-04 | Cilys 53, Inc. | System and method for compressing and decompressing data in real time |
US6744388B1 (en) * | 2002-06-19 | 2004-06-01 | Xilinx, Inc. | Hardware-friendly general purpose data compression/decompression algorithm |
US6667701B1 (en) * | 2002-07-16 | 2003-12-23 | Motorola, Inc. | Variable length decoder |
US7143238B2 (en) * | 2003-09-30 | 2006-11-28 | Intel Corporation | Mechanism to compress data in a cache |
US20070263668A1 (en) * | 2006-05-11 | 2007-11-15 | Lau David K W | System, method and computer program for evaluating the audio quality of a received audio record |
CN1997011B (zh) * | 2006-07-26 | 2011-01-12 | 白杰 | 数据分割方法和数据分割装置 |
NZ549548A (en) * | 2006-08-31 | 2009-04-30 | Arc Innovations Ltd | Managing supply of a utility to a customer premises |
US7511640B2 (en) * | 2007-01-31 | 2009-03-31 | Telefonaktiebolaget Lm Ericsson (Publ) | Digital compression of binary data blocks |
US7486211B2 (en) * | 2007-04-13 | 2009-02-03 | Apple Inc. | Method and system for entropy coding |
US20080259891A1 (en) * | 2007-04-17 | 2008-10-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Multiple packet source acknowledgement |
US7804428B2 (en) | 2008-11-10 | 2010-09-28 | Apple Inc. | System and method for compressing a stream of integer-valued data |
EP2451083A1 (en) | 2010-11-09 | 2012-05-09 | Océ-Technologies B.V. | Method for compressing and decompressing digital data |
JP5520391B2 (ja) | 2010-12-28 | 2014-06-11 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 検索開始点を決定する装置及び方法 |
US8848250B2 (en) * | 2012-10-23 | 2014-09-30 | Kyocera Document Solutions Inc. | Compression of halftoned digital images |
US9384204B2 (en) * | 2013-05-22 | 2016-07-05 | Amazon Technologies, Inc. | Efficient data compression and analysis as a service |
CN104156990B (zh) * | 2014-07-03 | 2018-02-27 | 华南理工大学 | 一种支持特大型数据窗口的无损压缩编码方法及系统 |
US9407287B2 (en) * | 2014-10-21 | 2016-08-02 | Huawei Technologies Co., Ltd. | Parallel history search and encoding for dictionary-based compression |
US9946522B1 (en) * | 2016-12-16 | 2018-04-17 | International Business Machines Corporation | Generating code for real-time stream processing |
CN108845746A (zh) * | 2018-07-13 | 2018-11-20 | 成都东方闻道科技发展有限公司 | 一种答题组件 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE1249924B (ko) * | 1962-07-17 | |||
US3739085A (en) * | 1971-07-09 | 1973-06-12 | Addressograph Multigraph | Coding technique |
US4464650A (en) * | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US4494108A (en) * | 1981-11-09 | 1985-01-15 | International Business Machines Corporation | Adaptive source modeling for data file compression within bounded memory |
JPH0828053B2 (ja) * | 1983-08-08 | 1996-03-21 | 株式会社日立製作所 | データ記録方法 |
GB2172127B (en) * | 1985-03-06 | 1988-10-12 | Ferranti Plc | Data compression system |
JPS61295765A (ja) * | 1985-06-25 | 1986-12-26 | Hitachi Ltd | ランレングス符号化復号化方式 |
US4626829A (en) * | 1985-08-19 | 1986-12-02 | Intelligent Storage Inc. | Data compression using run length encoding and statistical encoding |
JPH0815263B2 (ja) * | 1986-12-12 | 1996-02-14 | 株式会社日立製作所 | データ圧縮復元方法 |
US4876541A (en) * | 1987-10-15 | 1989-10-24 | Data Compression Corporation | Stem for dynamically compressing and decompressing electronic data |
US4906991A (en) * | 1988-04-29 | 1990-03-06 | Xerox Corporation | Textual substitution data compression with finite length search windows |
US5126739A (en) * | 1989-01-13 | 1992-06-30 | Stac Electronics | Data compression apparatus and method |
US5146221A (en) * | 1989-01-13 | 1992-09-08 | Stac, Inc. | Data compression apparatus and method |
US5003307A (en) * | 1989-01-13 | 1991-03-26 | Stac, Inc. | Data compression apparatus with shift register search means |
US5016009A (en) * | 1989-01-13 | 1991-05-14 | Stac, Inc. | Data compression apparatus and method |
GB2232797B (en) * | 1989-06-16 | 1993-12-08 | Samsung Semiconductor Inc | RAM based serial memory with pipelined look-ahead reading |
US4971407A (en) * | 1989-08-09 | 1990-11-20 | Unisys Corp. | Two stage run and string data compressor providing doubly compressed output |
JP2940948B2 (ja) * | 1989-08-22 | 1999-08-25 | 富士通株式会社 | データ圧縮方式 |
US4988998A (en) * | 1989-09-05 | 1991-01-29 | Storage Technology Corporation | Data compression system for successively applying at least two data compression methods to an input data stream |
US4955066A (en) * | 1989-10-13 | 1990-09-04 | Microsoft Corporation | Compressing and decompressing text files |
US5001478A (en) * | 1989-12-28 | 1991-03-19 | International Business Machines Corporation | Method of encoding compressed data |
US5049880A (en) * | 1990-04-02 | 1991-09-17 | Tektronix, Inc. | Bit-wise run-length encoding for data compression |
US5049881A (en) * | 1990-06-18 | 1991-09-17 | Intersecting Concepts, Inc. | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique |
US5051745A (en) * | 1990-08-21 | 1991-09-24 | Pkware, Inc. | String searcher, and compressor using same |
US5473326A (en) * | 1990-12-14 | 1995-12-05 | Ceram Incorporated | High speed lossless data compression method and apparatus using side-by-side sliding window dictionary and byte-matching adaptive dictionary |
US5140321A (en) * | 1991-09-04 | 1992-08-18 | Prime Computer, Inc. | Data compression/decompression method and apparatus |
US5155484A (en) * | 1991-09-13 | 1992-10-13 | Salient Software, Inc. | Fast data compressor with direct lookup table indexing into history buffer |
US5426779A (en) * | 1991-09-13 | 1995-06-20 | Salient Software, Inc. | Method and apparatus for locating longest prior target string matching current string in buffer |
US5455943A (en) * | 1992-10-08 | 1995-10-03 | Salient Software, Inc. | Method and apparatus for finding longest and closest matching string in history buffer prior to current string |
US5260693A (en) * | 1991-10-11 | 1993-11-09 | Spacelabs Medical, Inc. | Method and system for lossless and adaptive data compression and decompression |
US5371499A (en) * | 1992-02-28 | 1994-12-06 | Intersecting Concepts, Inc. | Data compression using hashing |
US5227788A (en) * | 1992-03-02 | 1993-07-13 | At&T Bell Laboratories | Method and apparatus for two-component signal compression |
US5379036A (en) * | 1992-04-01 | 1995-01-03 | Storer; James A. | Method and apparatus for data compression |
US5659713A (en) * | 1992-04-24 | 1997-08-19 | Digital Equipment Corporation | Memory stream buffer with variable-size prefetch depending on memory interleaving configuration |
US5586294A (en) * | 1993-03-26 | 1996-12-17 | Digital Equipment Corporation | Method for increased performance from a memory stream buffer by eliminating read-modify-write streams from history buffer |
US5384567A (en) * | 1993-07-08 | 1995-01-24 | International Business Machines Corporation | Combination parallel/serial execution of sequential algorithm for data compression/decompression |
US5521597A (en) * | 1993-08-02 | 1996-05-28 | Mircosoft Corporation | Data compression for network transport |
US5563595A (en) * | 1993-12-23 | 1996-10-08 | International Business Machines Corporation | Method and apparatus for compressing data |
US5525982A (en) * | 1994-04-15 | 1996-06-11 | International Business Machines Corporation | Method and means for character string pattern matching for compression and the like using minimal cycles per character |
US5502439A (en) * | 1994-05-16 | 1996-03-26 | The United States Of America As Represented By The United States Department Of Energy | Method for compression of binary data |
US5572206A (en) * | 1994-07-06 | 1996-11-05 | Microsoft Corporation | Data compression method and system |
-
1997
- 1997-05-12 US US08/854,716 patent/US5798718A/en not_active Expired - Lifetime
-
1998
- 1998-05-12 EP EP98108584A patent/EP0878914A3/en not_active Withdrawn
- 1998-05-12 JP JP16910098A patent/JP3362177B2/ja not_active Expired - Fee Related
- 1998-05-12 CN CN98108311A patent/CN1104094C/zh not_active Expired - Fee Related
- 1998-05-12 KR KR1019980017050A patent/KR19980086979A/ko not_active Application Discontinuation
- 1998-07-24 TW TW087107322A patent/TW421926B/zh not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
EP0878914A3 (en) | 1999-03-10 |
US5798718A (en) | 1998-08-25 |
EP0878914A2 (en) | 1998-11-18 |
JP3362177B2 (ja) | 2003-01-07 |
CN1104094C (zh) | 2003-03-26 |
CN1200604A (zh) | 1998-12-02 |
JPH1188192A (ja) | 1999-03-30 |
TW421926B (en) | 2001-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR19980086979A (ko) | 데이터 압축방법 및 장치 | |
US6563956B1 (en) | Method and apparatus for compressing data string | |
JP2915568B2 (ja) | テープドライブシステムのための適応データ圧縮装置 | |
US5151697A (en) | Data structure management tagging system | |
US7233266B2 (en) | Data compression/decompression device and data compression/decompression method | |
CN112615628B (zh) | 硬件友好地数据压缩 | |
RU2125765C1 (ru) | Способ и устройство сжатия символов, стохастический кодер (варианты) | |
US5229768A (en) | Adaptive data compression system | |
US7215259B2 (en) | Data compression with selective encoding of short matches | |
US5254990A (en) | Method and apparatus for compression and decompression of data | |
US6225922B1 (en) | System and method for compressing data using adaptive field encoding | |
EP0903865A1 (en) | Method and apparatus for compressing data | |
JP2004518327A (ja) | 逆進的にストリングを参照する為の識別子を用いたデータ圧縮方法 | |
US5394143A (en) | Run-length compression of index keys | |
US5555323A (en) | System for bi-level symbol coding/decoding with saved storage and method for same | |
US6388585B1 (en) | Method for data compression and decompression using decompression instructions | |
JPH07107303A (ja) | ハフマン符号の復号化方法 | |
KR950013228B1 (ko) | 데이타 압축과 복원방법 및 그 장치 | |
GB2311704A (en) | Compression of arbitrary data using context modelling and entropy coding | |
GB2360915A (en) | Run length compression encoding of selected bits of data words | |
JP3143030B2 (ja) | データ圧縮方法及びその装置並びにデータ伸長方法及びその装置 | |
KR100245036B1 (ko) | 개선된 모뎀용 부호화 시스템 및 그 코드워드 생성방법 | |
GB2360916A (en) | Compression encoder which transmits difference between new data word and recent data word where this falls within a threshold | |
GB2360917A (en) | Run length compression encoding of runs of similar data words | |
Fenwick | Symbol ranking text compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |