KR19990029331A - 변형 렘펠-지브 1을 인코딩하기 위한 방법 및 장치 - Google Patents

변형 렘펠-지브 1을 인코딩하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR19990029331A
KR19990029331A KR1019980033766A KR19980033766A KR19990029331A KR 19990029331 A KR19990029331 A KR 19990029331A KR 1019980033766 A KR1019980033766 A KR 1019980033766A KR 19980033766 A KR19980033766 A KR 19980033766A KR 19990029331 A KR19990029331 A KR 19990029331A
Authority
KR
South Korea
Prior art keywords
literal
history
buffer
symbol
data stream
Prior art date
Application number
KR1019980033766A
Other languages
English (en)
Other versions
KR100314419B1 (ko
Inventor
데이비드 제이 크래프트
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Publication of KR19990029331A publication Critical patent/KR19990029331A/ko
Application granted granted Critical
Publication of KR100314419B1 publication Critical patent/KR100314419B1/ko

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 발명은 소스 심볼(source symbol)의 입력 데이터 스트림(input data stream)을 인코딩하여 포인터의 출력 시퀀스를 생성하기 위한 방법을 개시한다. 입력 데이터 스트림 내의 LITERAL 스트링(string)이 먼저 히스토리-버퍼(history-buffer) 내로 로드된다. 히스토리 버퍼 포인터의 값이 레지스터에 복사되어 히스토리-버퍼 내의 LITERAL 스트링의 시작 위치를 표시한다. 카운터는 입력 데이터 스트림으로부터의 각 후속 LITERAL 심볼이 나타날 때마다 증가된다. 그 다음, 입력 데이터 스트림으로부터의 LITERAL 스트링 및 각 후속 LITERAL 심볼이 레지스터 내의 값 및 카운터 내의 값을 LITERAL_POINTER로 사용하여 인코드된다. 마지막으로, LITERAL_POINTER가 데이터 압축기로부터 출력된다.

Description

변형 렘펠-지브 1을 인코딩하기 위한 방법 및 장치
본 발명은 일반적으로 데이터를 압축하는 방법 및 장치에 관한 것으로, 특히 적응형 데이터 압축을 수행하는 방법 및 장치에 관한 것이다. 본 발명은 보다 구체적으로 변형 렘펠-지브 1(Lempel-Ziv 1 variants)를 인코딩하기 위한 방법 및 장치에 관한 것이다.
컴퓨터 및 워크스테이션 내의 정보를 표시하는데 사용되는 디지털 데이터의 양과 이러한 데이터가 저장 또는 전송되는 도중에 압축 및 압축 해제되어야 하는 속도 때문에 데이터 압축에 관한 기술은 중요한 관심 대상이 되어 왔다. 상당히 널리 사용되고 있는 것으로 입증된 데이터 압축 알고리즘은 1997년 간행된 IEEE Transaction on Information Theory vol. IT-23, no. 3, pp. 337-343에 나타난 바와 같이 J. Ziv 및 A. Lempel의 A Universal Algorithm for Sequential Data Compression이란 제목의 논문에 기술되어 있다. 이 데이터 압축 알고리즘은 통상 LZ_1 알고리즘으로 불리운다. 원래의 LZ_1 알고리즘은 다수의 연구자들에 의해 여러 측면에서 개량되어 왔다. 소위 변형 LZ_1으로 불리우는 이러한 알고리즘의 예가 미국 특허 제 5,003,307호 및 제 5,146,221호에 개시되어 있으며, 그 개시 내용은 본 명세서에 참조되어 본 발명의 일부를 이룬다.
변형 Lempel-Ziv 1의 다른 예로는 컴퓨터 및 관련 주변 장치 내에서 일반적인 데이터 압축을 위해 광범위하게 사용되는 적응형 무손실 데이터 압축(Adaptive Lossless Data Compression: ALDC)이 포함된다. ALDC는 Quarter-Inch Cartridge Drive Standards사의 1994년 3월 10일자 Rev. A, QIC Development Standard QIC-154에 매우 상세히 기술되어 있으며, 그 개시 내용도 본 명세서에 참조되어 본 발명의 일부를 이룬다.
이러한 변형 LZ_1 및 다른 변형 LZ_1의 특징을 이루는 기본 개념은 히스토리-버퍼를 사용하여 새로운 데이터를 저장하고, 이전에 수신되어 처리된 임의의 데이터와 매칭되는 데이터의 새로운 스트링을 식별한다. 따라서, 통상 영숫자 문자(alphanumeric character)이며, 기존 스트링과 매칭되는 새로운 데이터 스트링은 히스토리-버퍼 내에 있는 스트링 시퀀스의 최초 지점(earlier point)의 오프셋(또는 변위) 및 길이를 참조함으로써 간단히 식별될 수 있다. LZ_1 알고리즘은 적응형인데, 그 이유는 각 새로운 데이터 바이트가 차례대로 히스토리-버퍼 내로 입력되고 히스토리-버퍼가 가득 차는 경우 가장 오래된 저장 데이터를 삭제하기 때문이다. 따라서, 히스토리 버퍼의 크기는 데이터 스트림 상의 슬라이딩 윈도우와 거의 비슷한데, 새로운 데이터 문자들은 이 윈도우 길이 내에서 이전에 수신된 문자들과 항상 비교된다. 인코드된 출력에는 압축이 불가능한 LITERAL_DATA, 또는 윈도우 내의 이전에 존재하던 문자 스트링과의 매칭을 식별하는 길이 및 오프셋을 제공하는 COPY_POINTER가 혼재되어 있다. 예측되는 바와 같이, 윈도우 크기가 증가하고 윈도우 내에서 데이터 문자의 패턴의 반복이 증가할수록 LZ_1 알고리즘이 더욱 더 효과적이다.
본 발명의 개시 내용은 이러한 변형 Lempel-Ziv 1을 인코딩하기 위한 개선된 방법 및 장치를 기술한다.
본 발명의 목적은 데이터 압축을 개선하는 방법 및 장치를 제공하는 것이다.
본 발명의 다른 목적은 적응형 데이터 압축을 실행하는 개선된 방법 및 장치를 제공하는 것이다.
본 발명의 또 다른 목적은 렘펠-지브 1 클래스의 압축 알고리즘의 출력을 인코딩하기 위한 개선된 방법 및 장치를 제공하는 것이다.
본 발명의 방법에 따르면, 소정 데이터 스트림 내의 LITERAL 스트링은 히스토리-버퍼 내로 로드된다. 히스토리-버퍼 포인터의 값은 레지스터로 복사되어 히스토리-버퍼 내의 LITERAL 스트링의 시작 위치를 표시한다. 카운터는 입력 데이터 스트림으로부터 각 후속 LITERAL 심볼이 나타날 때마다 증가된다. 그 다음, 입력 데이터 스트림으로부터의 LITERAL 스트링 및 각 후속 LITERAL 심볼이 레지스터 내의 값 및 카운터 내의 값을 LITERAL_POINTER로 사용하여 인코드된다. 마지막으로, LITERAL_POINTER가 데이터 압축기로부터 출력된다.
본 발명의 상기 모든 목적, 특징, 및 장점은 첨부된 상세한 설명에서 명백히 이해될 수 있다.
도 1a는 본 발명의 바람직한 실시예와 일체로 사용될 수 있는 압축기 유닛의 블록도.
도 1b는 본 발명의 바람직한 실시예와 일체로 사용될 수 있는 데이터 압축해제기(decompressor) 유닛의 블록도.
도 2는 본 발명의 바람직한 실시예에 따라 LITERAL_DATA 스트링에 사용되는 인코딩 방법의 하이-레벨 의사(擬似) 코드(high-level pseudo-code).
도면의 주요부분에 대한 부호의 설명
10 : 압축기 유닛
11, 16 : 제어기
12, 17 : RAM/CAM
13, 19 : 데이터 소스
14, 18 : 데이터 싱크
15 : 압축 해제기
본 발명 자체 뿐만 아니라 본 발명의 바람직한 사용 모드, 추가적인 목적 및 그 장점이 첨부된 도면과 함께 후술하는 예시적인 실시예의 상세한 설명을 참조함으로써 가장 잘 이해될 수 있을 것이다.
본 발명은 데이터 압축기 및 데이터 압축 해제기 내에서 구현될 수 있다. 당업자라면 본 발명이 하드웨어 또는 소프트웨어 중 어느 하나로 구현될 수 있다는 것을 명백히 이해할 수 있다.
I. 인코더 및 디코더
도 1a를 참조하면, 본 발명의 바람직한 실시예가 일체로 사용될 수 있는 데이터 압축기 유닛의 블록도가 도시되어 있다. 도시된 바와 같이, 압축기 유닛 (10)은 제어기 (11), 및 랜덤-액세스 메모리(RAM) 또는 내용 주소화 메모리(content-addressable memory: CAM) (12)에 접속된다. 동작 중에, 압축기 유닛 (10)은 먼저 비압축 데이터 스트림을 데이터 소스(data source) (13)으로부터 수신한다. 데이터가 인코딩된 후, 압축된 데이터 스트림은 데이터 싱크(data sink) (14)로 전송된다.
히스토리-버퍼와 같은 압축 알고리즘과 관련된 모든 데이터 구조는 RAM/CAM (12) 내에서 유지된다. 이에 따라, RAM/CAM (12)의 최적의 크기는 주로 히스토리 버퍼의 크기에 좌우된다.
압축기 유닛 (10)은 압축되지 않은 데이터 스트림을 한번에 한 데이터 바이트씩 처리한다. 또한, 처리된 각 데이터 바이트는 히스토리 버퍼 내로 순차적으로 복사되고, 히스토리-버퍼가 이미 가득 찬 경우 가장 오래된 데이터 바이트를 제거한다. 따라서, 순차적으로 복사된 가장 최근의 데이터 바이트는 히스토리-버퍼 내에서 항상 이용 가능하다.
압축 프로세스는 히스토리 버퍼 내에 이미 존재하는 데이터 바이트의 임의의 시퀀스 또는 스트링을 식별하기 위해 입력(incoming) 데이터 스트림의 검사를 포함한다. 소정의 동일한 데이터 바이트 스트링이 히스토리-버퍼 내에서 이용 가능한 경우, 이러한 데이터 바이트와 매칭되는 스트링은 히스토리-버퍼 내의 바이트 카운트 및 변위를 포함하는 2-성분 COPY_POINTER로 인코드될 수 있다. 따라서, 이렇게 동일한 데이터 바이트 스트링이 통상적으로 요구되는 것보다 더 적은 정보 비트로 COPY_POINTER에 의해 인코드될 수 있는 경우, 압축이 달성된다. 그러나, 입력 데이터 바이트가 히스토리-버퍼 내의 임의의 데이터 바이트와 매칭되지 않는 경우, 이러한 입력 데이터 바이트는 해당 데이터 바이트를 명백히 표시하는 LITERAL로서 인코드될 것이다.
도 1b를 참조하면, 본 발명의 바람직한 실시예가 일체로 사용될 수 있는 데이터 압축 해제기(decompressor) 유닛의 블록도가 도시되어 있다. 도시된 바와 같이, 압축 해제기 유닛 (15)는 제어기 (16) 및 RAM/CAM (17)에 접속된다. RAM/CAM (12)와 마찬가지로, 압축 해제기 유닛 (15)에 사용되는 데이터 구조는 모두 RAM/CAM (17) 내에 유지된다. 동작 중에, 압축 해제기 유닛 (15)는 먼저 압축 데이터 스트림을 데이터 소스 (19)로부터 수신한다. 데이터가 디코딩된 후, 비압축 데이터 스트림은 압축 해제기 유닛 (15)로부터 데이터 싱크 (18)로 전송된다. 압축 해제기 유닛 (15)는 압축된 데이터 스트림을 먼저 LITERAL 및 COPY_POINTER로 분해(parsing)함으로써 압축기 유닛 (10)과 반대의 동작을 수행한다.
반면에, COPY_POINTER는 처음에 COPY_POINTER의 특정 바이트 카운트 및 변위를 디코딩함으로써 처리된다. 이어서, 이러한 데이터 바이트 값들의 스트링이 압축 해제기 유닛 (15) 내의 히스토리-버퍼로부터 한번에 1 바이트씩 판독된다. 그 다음, 각 데이터 바이트 값은 다음 데이터 바이트 값이 액세스되기 전에 히스토리-버퍼 내로 복사되어 디코딩된 데이터 바이트로서 출력된다. 일단 데이터 바이트의 전체 스트링이 이러한 방법으로 처리되면, 압축 해제기 (15) 내의 히스토리 버퍼는 압축기 (10) 내의 히스토리 버퍼와 동일한 버퍼가 된다.
II. 인코딩 방법
본 발명의 바람직한 실시예에 따르면, 압축기 유닛 (10) 내의 히스토리-버퍼는 또한 LITERAL_DATA용 버퍼로서도 사용된다. 통상의 LZ_1 알고리즘에 있어서, 데이터는 한번에 1 심볼씩(또는 대다수 변형 LZ_1의 경우에는, 통상 한 번에 1 바이트씩) 처리된다. 처리된 각 심볼은 다음 심볼이 검사되기 전에 히스토리 버퍼 내로 저장된다. 고속 내용 주소화 메모리(high-speed Content Addressable Memory: CAM)를 기초로 한 구현 방법의 경우, CAM은 각 입력 데이터 바이트에 대한 검색 및 기록을 수행하도록 배열될 수 있다. 그 다음, 새로운 매칭 스트링의 시작 또는 기존 스트링 매칭 동작의 계속에 대한 검사(testing)와 동시에, 입력 데이터 바이트 심볼이 CAM 내의 현 히스토리-버퍼 갱신 위치에 기록된다. 각 비매칭 스트링 심볼을 만나고 이러한 심볼이 또한 새로운 매칭 스트링의 시작 부분이 아닌 경우, 각 비매칭 스트링 심볼은 나중에 인코딩되어 출력되는 LITERAL_DATA 스트링에 누적된다.
LITERAL_DATA는 버퍼 내에 유지되며, 사용되는 임의의 카운트 코드의 상한에 도달하는 경우 또는 입력 데이터에 대한 스트링 매치(string match)가 존재하여 COPY_POINTER가 다음에 사용되어야만 하는 경우, SYMBOL_COUNT 코드로 구성되며 LITERAL_DATA 스트링이 다음에 이어지는 새로운 종류의 LITERAL_POINTER가 출력되는데, 이는 버퍼를 비운다.
본 발명은 히스토리-버퍼 자체를 LITERAL_DATA용 버퍼로서 사용하기 때문에, SYMBOL_COUNT 코드는 LITERAL_DATA의 전체 히스토리-버퍼 크기까지 누적되도록 확장될 수 있으며, 이러한 대형 버퍼의 제공을 별도로 요구하기 때문에 하드웨어로 구성하더라도 이에 따른 불리한 점(penalty)이 없다.
SYMBOL_COUNT 코드 필드는 고정 길이의 필드, 예를 들어 2-비트 필드로, 이는 최악의 데이터 확장을 약 2/3만큼(즉, 최대 약 8%까지) 감소시킨다. 대안적으로, COPY_POINTER 카운트 필드는 가변 길이를 가질 수 있으며, 예를 들어, ALDC 알고리즘에서 COPY_POINTER 길이 인코딩을 위해 사용되는 것과 동일한 가변 길이 코드를 사용할 수 있다. 이러한 구현 방법에 있어서, 동일한 2-비트 길이는 작은 값에 대해 사용되지만, 269까지의 값에 대해서는 12-비트까지 증가될 수 있다. 이것은 LITERAL_DATA의 확장을 대략 0.6%까지 감소시킬 수 있다.
LITERAL_DATA 스트링의 제 1 심볼이 처리되는 경우, 레지스터는 현재 히스토리-버퍼 위치값으로 로드된다. 그 다음, 연속되는 LITERAL_DATA 심볼의 수를 계속 추종하는데 사용되는 카운터가 1로 설정된다. LITERAL_DATA가 심볼 단위로 계속 누적되며, 새로운 매칭 스트링의 시작에 의해 종료되거나 또는 LITERAL_DATA가 충분히 길어 히스토리 버퍼 내의 시작점(starting point) 주위를 둘러싸서 그 시점에 오버라이트(overwrite)하는 경우에 종료된다. 일단 히스토리 버퍼 위치 어드레스가 포착되면, 누적 프로세스는 상기 카운터가 각각 추가적인 LITERAL_DATA 심볼에 대해 단지 1만큼씩만 증가될 것을 요구한다.
일단 LITERAL_DATA 스트링이 종료되면, 압축기는 먼저 SYMBOL_COUNT 값을 인코딩하여 출력하고, 이어서 SYMBOL_COUNT와 동일한 다수의 심볼을 히스토리-버퍼로부터 복사하고, 이미 기록된 히스토리-버퍼 위치 어드레스로부터 시작한다. 이것은 LITERAL_DATA 스트링에서 필수적으로 요구된다.
SYMBOL_COUNT의 경우 최적의 코드 선택은 히스토리 버퍼의 크기 및 데이터 통계에 좌우되지만, 1024 크기의 심볼 히스토리-버퍼에 대한 소정의 코드 예가 표 I로 주어진다.
표 I
주 : 1. ESCAPE CODE : 1023 바이트인 LITERAL_DATA,
다음에는 또 다른 SYMBOL_COUNT가 이어짐
2. 나머지 코드 값 : 1025 내지 1029는 예약되어 있으며,
따라서 사용되지 않음.
문자 데이터 중 몇 바이트로 된 작은 스트링의 경우, 더 작은 2 비트 또는 4 비트 코드가 기존의 LZ_1 알고리즘과 유사한 확장을 제공한다. 그러나, 매우 큰 LITERAL_DATA 스트링의 경우, 12-비트 코드를 사용하더라도 1.5 바이트 SYMBOL_COUNT가 모든 1023 바이트마다 삽입되어야 하기 때문에 겨우 (1023+1.5)/1023 즉, 약 0.15%의 확장을 제공한다. LITERAL_DATA 스트링이 더 낮은 효율로 인코딩되는 문제가 있지만, 이러한 LITERAL_DATA 스트링은 COPY_POINTER에 의해 분리되어 항상 소정의 압축을 제공한다.
일예로서, ALDC 포맷을 사용하여 인코딩된 2 바이트 COPY_POINTER와 교호하는 2 바이트 LITERAL_DATA 스트링으로 된 최악의 경우를 고려해 보기로 한다. 여기서, 인코딩은 4-비트 SYMBOL_COUNT, 16-비트 LITERAL_DATA 필드, 및 12-비트 COPY_POINTER인데, 이 12-비트 COPY_POINTER는 2-비트 카운트 필드 및 10-비트 변위(displacement) (플래그 비트는 없음)를 포함한다. 여기서, 총 비트는 32비트로 4바이트를 인코딩하므로 확장은 존재하지 않는다.
III. 구현 방법
도 2를 참조하면, 본 발명의 바람직한 실시예에 따라 LITERAL_DATA 스트링에 사용되는 인코딩 방법의 하이-레벨 의사-코드(high-level pseudo-code)가 예시되어 있다. 이러한 구현 방법에 있어서, 예를 들어, Literal_Data Counter(L_CTR), Literal_Pointer Register(L_PTR), Copy_Pointer Counter(C_CTR), 및 History Write_Pointer Register(W_PTR)가 사용된다. Copy_Pointer Counter 및 History Write_Pointer Register는 통상적으로 압축기에 의해 어쨋든 사용되므로 대부분의 경우 Literal_Data Counter 및 Literal_Pointer Register의 추가만이 필요하다는 것을 주목해야한다.
본 발명의 바람직한 실시예에 따른 압축기 동작은 다음과 같다. W_PTR은 데이터 바이트를 입력한 후 증가된다. W_PTR이 히스토리 버퍼의 크기와 일치하는 경우, W_PTR 값이 0으로 설정된다. 이어서, 데이터 바이트가 히스토리 버퍼에 대한 인덱스로서 W_PTR을 사용하여 히스토리-버퍼 내로 저장된다. 그 다음, 데이터 바이트가 LITERAL인지의 여부, 새로운 매치(match)의 시작인지 또는 (가능한 새로운 매치의 시작을 갖거나 또는 가능한 새로운 매치의 시작을 갖지 않는) 기존 매치의 종료인지의 여부에 대한 결정이 이루어진다. 마지막으로, LITERAL_DATA 또는 COPY_POINTER가 적절히 삽입되고, 후속 바이트가 입력된다.
LITERAL_DATA의 경우, L_CTR 값이 0이면 단계 (1)로 진행하고, 그렇지 않으면 단계 (2)로 진행한다. 단계 (1)에서, W_PTR 값은 L_PTR로 설정되고; C_CTR이 1이면, W_PTR은 이전 값으로 수정되고 L_CTR은 1로 설정된다.
단계 (2)에서, L_CTR이 증가되고; L_CTR이 최대이면 단계 (3)으로 진행하고, 그렇지 않으면 인코딩이 완료된다. 단계 (3)에서, 인코딩을 수행하고 L_CTR의 최대값을 출력한 다음 단계 (4)로 진행한다.
단계 (4)에서, 데이터 바이트는 히스토리 버퍼에 대한 인덱스로서 L_PTR을 사용하여 히스토리 버퍼로부터 획득된다. 그 다음, 데이터 바이트가 출력되고 L_PTR은 1만큼 증가된다. L_PTR이 HISTORY_SIZE와 일치하면, L_PTR을 0으로 설정한 다음, L_CTR은 1만큼 감소된다. L_CTR이 1보다 크면 단계 (4)로 진행하고, 그렇지 않으면 코딩(coding)이 수행된다.
COPY_POINTER의 경우, 인코딩을 수행하고 L_CTR 값을 출력한다. L_CTR이 0보다 크면 단계 (5)로 진행하고, 그렇지 않으면 단계 (6)으로 진행한다. 단계 (5)에서, 데이터 바이트는 히스토리-버퍼에 대한 인덱스로서 L_PTR을 사용하여 히스토리-버퍼로부터 획득된다. 그 다음, 데이터 바이트가 출력되고 L_PTR은 1만큼 증가된다. L_PTR이 HISTORY_SIZE와 일치하면 L_PTR을 0으로 설정하고 L_CTR은 1만큼 감소된다. L_CTR이 0보다 크면 단계 (5)로 진행하고, 그렇지 않으면 단계 (6)으로 진행한다.
단계 (6)에서, COPY_POINTER가 인코딩되고, 인코딩 프로세스가 완료된다.
상술한 바와 같이, 본 발명은 압축기 유닛 내에서 적응형 데이터 압축을 효과적으로 수행하기 위한 개선된 방법 및 장치를 제공한다. 본 발명에 따르면, 출력이 주로 LITERAL_DATA로 구성되는 경우에 발생하는 최악의 데이터 확장이 상당히 감소될 수 있다.
또한, 상술한 코딩 방법에 따르면, 랜덤 또는 비압축성 데이터의 경우 발생하는 확장과 관련된 본질적인 문제는 LITERAL_DATA 및 POINTER를 구별하는데 사용되는 플래그 비트를 사용하지 않음으로써 감소될 수 있다. 또한, 히스토리 버퍼를 사용하여 별도의 비용없이 필요한 버퍼링을 제공함으로써 하드웨어 비용이 감소될 수 있다. 상기 본 발명의 인코딩 방법에 따르면, 압축 해제기는 어떠한 추가 버퍼링도 필요로 하지 않는다.
또한, 본 발명이 하드웨어 압축기에 대해 기술하였지만, 본 발명의 메카니즘이 소프트웨어로 구현되며 다양한 형태의 프로그램 제품으로 공급될 수 있다는 점과 본 발명이 실제로 배포하는데 사용되는 신호 포함 매체(signal bearing media)의 특정 형태와 관계없이 동일하게 적용된다는 점을 당업자들은 명백히 이해할 수 있을 것이다. 신호 포함 매체의 예는 플로피 디스크 또는 CD 롬과 같은 기록 가능한 형태의 매체, 및 아날로그 또는 디지털 통신 링크와 같은 전송 형태의 매체를 포함하지만 이에 제한되지는 않는다.
본 발명이 바람직한 실시예를 참조하여 기술되었지만, 본 기술분야의 당업자는 본 발명의 정신 및 범위를 벗어남이 없이 형태 및 상세에 있어서 다양한 변경을 가할 수 있다는 것을 이해할 것이다.
본 발명에서는 히스토리-버퍼 자체를 LITERAL_DATA용 버퍼로서 사용하기 때문에, SYMBOL_COUNT 코드가 LITERAL_DATA의 전체 히스토리-버퍼 크기까지 누적되도록 확장될 수 있으며, 이러한 대형 버퍼의 제공을 별도로 요구하기 때문에 하드웨어로 구성하더라도 이에 따른 불리한 점(penalty)이 없다.

Claims (12)

  1. 데이터 압축기 내에서 히스토리-버퍼를 사용함으로써 포인터의 출력 시퀀스를 생성하도록 소스 심볼의 입력 데이터 스트림을 인코딩하기 위한 방법에 있어서,
    a) 상기 입력 데이터 스트림 내의 LITERAL 스트링을 상기 히스토리-버퍼로 로딩하는 단계;
    b) 히스토리-버퍼 내의 LITERAL 스트링의 시작 위치를 표시하도록 히스 토리-버퍼 포인터 값을 레지스터로 복사하는 단계;
    c) 상기 입력 데이터 스트림으로부터의 각 후속 LITERAL 심볼이 나타날 때 마다 카운터를 증가시키는 단계;
    d) LITERAL_POINTER로서 상기 레지스터 내의 값 및 상기 카운터 내의 값 을 사용하여 상기 입력 데이터 스트림으로부터의 LITERAL 스트링 및 각 후속 LITERAL 심볼을 인코딩하는 단계; 및
    e) 상기 데이터 압축기로부터 LITERAL_POINTER를 출력하는 단계
    를 포함하는 소스 심볼의 입력 데이터 스트림 인코딩 방법.
  2. 제 1 항에 있어서,
    상기 LITERAL_POINTER가 SYMBOL_COUNT 코드와 그 뒤에 이어지는 대응하는 수의 LITERAL_DATA 심볼을 포함하는 소스 심볼의 입력 데이터 스트림 인코딩 방법.
  3. 제 1 항에 있어서,
    상기 SYMBOL_COUNT가 고정 길이 또는 가변 길이로 이루어질 수 있는 소스 심볼의 입력 데이터 스트림 인코딩 방법.
  4. 제 1 항에 있어서,
    상기 카운터가 상기 히스토리-버퍼의 크기까지 카운트할 수 있는 소스 심볼의 입력 데이터 스트림 인코딩 방법.
  5. 히스토리-버퍼를 사용함으로써 포인터의 출력 시퀀스를 생성하도록 소스 심볼의 입력 데이터 스트림을 인코딩하기 위한 데이터 압축기에 있어서,
    a) 상기 입력 데이터 스트림 내의 LITERAL 스트링을 상기 히스토리-버퍼로 로딩하기 위한 수단;
    b) 히스토리-버퍼 내의 LITERAL 스트링의 시작 위치를 표시하도록 히스 토리-버퍼 포인터의 값을 레지스터로 복사하기 위한 수단;
    c) 상기 입력 데이터 스트림으로부터의 각 후속 LITERAL 심볼이 나타날 때 마다 카운터를 증가시키기 위한 수단;
    d) LITERAL_POINTER로서 상기 레지스터 내의 값 및 상기 카운터 내의 값 을 사용하여 상기 입력 데이터 스트림으로부터의 LITERAL 스트링 및 각 후속 LITERAL 심볼을 인코딩하기 위한 수단; 및
    e) 상기 데이터 압축기로부터 LITERAL_POINTER를 출력하기 위한 수 단
    을 포함하는 소스 심볼의 입력 데이터 스트림 인코딩용 데이터 압축기.
  6. 제 5 항에 있어서,
    상기 LITERAL_POINTER가 SYMBOL_COUNT 코드와 그 뒤에 이어지는 대응하는 수의 LITERAL_DATA 심볼을 포함하는 소스 심볼의 입력 데이터 스트림 인코딩용 데이터 압축기.
  7. 제 5 항에 있어서,
    상기 SYMBOL_COUNT가 고정 길이 또는 가변 길이로 이루어질 수 있는 소스 심볼의 입력 데이터 스트림 인코딩용 데이터 압축기.
  8. 제 5 항에 있어서,
    상기 카운터가 상기 히스토리-버퍼의 크기까지 카운트할 수 있는 소스 심볼의 입력 데이터 스트림 인코딩용 데이터 압축기.
  9. 히스토리-버퍼를 사용함으로써 포인터의 출력 시퀀스를 생성하도록 소스 심볼의 입력 데이터 스트림을 인코딩하기 위한 프로그램 소프트웨어 제품에 있어서,
    a) 상기 입력 데이터 스트림 내의 LITERAL 스트링을 상기 히스토리-버퍼로 로딩하기 위한 프로그램 코드 수단;
    b) 히스토리-버퍼 내의 LITERAL 스트링의 시작 위치를 표시하도록 히스 토리-버퍼 포인터의 값을 레지스터로 복사하기 위한 프로그램 코드 수단;
    c) 상기 입력 데이터 스트림으로부터의 각 후속 LITERAL 심볼이 나타날 때 마다 카운터를 증가시키기 위한 프로그램 코드 수단;
    d) LITERAL_POINTER로서 상기 레지스터 내의 값 및 상기 카운터 내의 값 을 사용하여 상기 입력 데이터 스트림으로부터의 LITERAL 스트링 및 상기 각 후속 LITERAL 심볼을 인코딩하기 위한 프로그램 코드 수단; 및
    e) 상기 데이터 압축기로부터 LITERAL_POINTER를 출력하기 위한 프로그 램 코드 수단
    을 포함하는 소스 심볼의 입력 데이터 스트림 인코딩용 프로그램 소프트웨어 제품.
  10. 제 9 항에 있어서,
    상기 LITERAL_POINTER가 SYMBOL_COUNT 코드 및 그 뒤에 이어지는 대응하는 수의 LITERAL_DATA 심볼을 포함하는 소스 심볼의 입력 데이터 스트림 인코딩용 프로그램 소프트웨어 제품.
  11. 제 9 항에 있어서,
    상기 SYMBOL_COUNT가 고정 길이 또는 가변 길이로 이루어질 수 있는 소스 심볼의 입력 데이터 스트림 인코딩용 프로그램 소프트웨어 제품.
  12. 제 9 항에 있어서,
    상기 카운터가 상기 히스토리-버퍼의 크기까지 카운트할 수 있는 소스 심볼의 입력 데이터 스트림 인코딩용 프로그램 소프트웨어 제품.
KR1019980033766A 1997-09-19 1998-08-20 변형렘펠-지브1을인코딩하기위한방법및장치 KR100314419B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/934,387 1997-09-19
US8/934,387 1997-09-19
US08/934,387 US5874908A (en) 1997-09-19 1997-09-19 Method and apparatus for encoding Lempel-Ziv 1 variants

Publications (2)

Publication Number Publication Date
KR19990029331A true KR19990029331A (ko) 1999-04-26
KR100314419B1 KR100314419B1 (ko) 2001-12-28

Family

ID=25465485

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980033766A KR100314419B1 (ko) 1997-09-19 1998-08-20 변형렘펠-지브1을인코딩하기위한방법및장치

Country Status (7)

Country Link
US (1) US5874908A (ko)
EP (1) EP0903865A1 (ko)
JP (1) JP3141002B2 (ko)
KR (1) KR100314419B1 (ko)
MY (1) MY116715A (ko)
SG (1) SG65785A1 (ko)
TW (1) TW592410U (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
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
US6879266B1 (en) 1997-08-08 2005-04-12 Quickshift, Inc. Memory module including scalable embedded parallel data compression and decompression engines
US6819271B2 (en) 1999-01-29 2004-11-16 Quickshift, Inc. Parallel compression and decompression system and method having multiple parallel compression and decompression engines
US6208273B1 (en) 1999-01-29 2001-03-27 Interactive Silicon, Inc. System and method for performing scalable embedded parallel data compression
US6822589B1 (en) 1999-01-29 2004-11-23 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US7129860B2 (en) * 1999-01-29 2006-10-31 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
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
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
US7538694B2 (en) * 1999-01-29 2009-05-26 Mossman Holdings Llc Network device with improved storage density and access speed using compression techniques
DE10131801B4 (de) * 2001-06-30 2013-03-07 Robert Bosch Gmbh Verfahren zur Datenkompression und Navigationssystem
GB0210604D0 (en) * 2002-05-09 2002-06-19 Ibm Method and arrangement for data compression
KR100959489B1 (ko) 2003-04-04 2010-05-26 주식회사 케이티 데이터 사전 관리를 통한 데이터 압축 및 복원 방법
US7417570B2 (en) * 2006-07-31 2008-08-26 Sap Ag Lossless comparative compression and transmission method and system
US8238677B2 (en) * 2008-03-07 2012-08-07 International Business Machines Corporation Adaptive lossless data compression method for compression of color image data
US8400335B2 (en) * 2011-07-21 2013-03-19 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8669889B2 (en) * 2011-07-21 2014-03-11 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8692696B2 (en) 2012-01-03 2014-04-08 International Business Machines Corporation Generating a code alphabet of symbols to generate codewords for words used with a program
US9325813B2 (en) * 2013-09-03 2016-04-26 Qualcomm Incorporated Formatting data packets for compression
US9473168B1 (en) * 2015-09-25 2016-10-18 Intel Corporation Systems, methods, and apparatuses for compression using hardware and software
US10135461B2 (en) * 2015-09-25 2018-11-20 Intel Corporation Systems, methods, and apparatuses for decompression using hardware and software
US9450606B1 (en) * 2015-10-01 2016-09-20 Seagate Technology Llc Data matching for hardware data compression
CN105426413B (zh) * 2015-10-31 2018-05-04 华为技术有限公司 一种编码方法及装置
US10187081B1 (en) * 2017-06-26 2019-01-22 Amazon Technologies, Inc. Dictionary preload for data compression

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5016009A (en) * 1989-01-13 1991-05-14 Stac, Inc. Data compression apparatus and method
CA2077271C (en) * 1991-12-13 1998-07-28 David J. Craft Method and apparatus for compressing data
EP0582907A3 (en) * 1992-08-10 1995-05-10 Stac Electronics Inc Device and method for data compression using search by comparison of strings and Huffman coding.
US5521597A (en) * 1993-08-02 1996-05-28 Mircosoft Corporation Data compression for network transport
JP3240495B2 (ja) * 1994-09-14 2001-12-17 エー・アイ・ソフト株式会社 データの可逆符号化方法および装置、並びに、伸長装置
US5612693A (en) * 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
US5608396A (en) * 1995-02-28 1997-03-04 International Business Machines Corporation Efficient Ziv-Lempel LZI data compression system using variable code fields
US5627534A (en) * 1995-03-23 1997-05-06 International Business Machines Corporation Dual stage compression of bit mapped image data using refined run length and LZ compression
US5526363A (en) * 1995-05-16 1996-06-11 Telco Systems, Inc. Multicontext compression system with shared data structures

Also Published As

Publication number Publication date
JPH11145849A (ja) 1999-05-28
TW592410U (en) 2004-06-11
JP3141002B2 (ja) 2001-03-05
SG65785A1 (en) 1999-06-22
MY116715A (en) 2004-03-31
KR100314419B1 (ko) 2001-12-28
EP0903865A1 (en) 1999-03-24
US5874908A (en) 1999-02-23

Similar Documents

Publication Publication Date Title
KR100314419B1 (ko) 변형렘펠-지브1을인코딩하기위한방법및장치
KR100353171B1 (ko) 적응형데이터압축을수행하는방법및장치
KR100300789B1 (ko) 적응형 데이터 압축기의 데이터 압축 효율을 개선하는 방법및 장치
US5406279A (en) General purpose, hash-based technique for single-pass lossless data compression
KR100331351B1 (ko) 이진입력데이터스트림압축방법
US5933104A (en) Method and system for compression and decompression using variable-sized offset and length fields
US5608396A (en) Efficient Ziv-Lempel LZI data compression system using variable code fields
US6411227B1 (en) Dual mode data compression for operating code
JP3342700B2 (ja) ストリングリバーサル機構を具備した単一クロックサイクルデータ圧縮装置/圧縮解除装置
JP3009727B2 (ja) 改良形データ圧縮装置
US7403136B2 (en) Block data compression system, comprising a compression device and a decompression device and method for rapid block data compression with multi-byte search
US6744388B1 (en) Hardware-friendly general purpose data compression/decompression algorithm
EP0729237A2 (en) Adaptive multiple dictionary data compression
KR100536980B1 (ko) 데이터 압축 방법, 데이터 압축해제 방법 및 데이터 압축 장치
JP2007037115A (ja) デジタルデータを符号化する方法、データセグメントのストリームを符号化する方法、エンコーダ、データのソースを符号化するためのパラレルエンコーダ、符号化データのソースを復号するためのパラレルデコーダ、コード化データを復号する方法、磁気テープドライブ、およびデータのストリームを符号化する方法
KR20020075889A (ko) 보다 효율적인 데이터 압축
US5502439A (en) Method for compression of binary data
JP3266419B2 (ja) データ圧縮・伸長方式
KR19980081236A (ko) 데이터 압축/복원 방법 및 압축 장치
JP3061278B2 (ja) 可変ビット長コード語のビット長通信方法
JP3242795B2 (ja) データ処理装置及びデータ処理方法
US6522270B1 (en) Method of coding frequently occurring values
JP3143030B2 (ja) データ圧縮方法及びその装置並びにデータ伸長方法及びその装置
US6583736B1 (en) Bitcode sequence coding of frequently occurring values
JPH08116270A (ja) データ圧縮方法及びその装置並びにデータ伸長方法及びその装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20100824

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee