KR100481204B1 - 데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치 - Google Patents

데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치 Download PDF

Info

Publication number
KR100481204B1
KR100481204B1 KR10-2001-7011350A KR20017011350A KR100481204B1 KR 100481204 B1 KR100481204 B1 KR 100481204B1 KR 20017011350 A KR20017011350 A KR 20017011350A KR 100481204 B1 KR100481204 B1 KR 100481204B1
Authority
KR
South Korea
Prior art keywords
sequence
character
character string
segment
characters
Prior art date
Application number
KR10-2001-7011350A
Other languages
English (en)
Other versions
KR20010102525A (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 KR20010102525A publication Critical patent/KR20010102525A/ko
Application granted granted Critical
Publication of KR100481204B1 publication Critical patent/KR100481204B1/ko

Links

Classifications

    • 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
    • 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
    • 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
    • H03M7/48Conversion 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 alternating with other codes during the code conversion process, e.g. run-length coding being performed only as long as sufficientlylong runs of digits of the same kind are present
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/93Run-length coding

Landscapes

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

Abstract

본 발명의 데이터 압축기는 데이터 문자들의 입력 스트림을 수신하여 상응하는 출력 코드들의 스트림을 제공한다. 상기 압축기는 수치증가하는 출력 코드들의 시퀀스를 발생시키는 데, 이 출력코드들의 시퀀스는 동일한 데이터 문자의 검출된 동문자나열에서의 수치증가하는 연속 세그먼트들에 대응한다. 입력 스트림의 비-동문자나열 문자들은 코드 시퀀스의 코드들을 증분시킴과 동기화되어 직접 전송된다. 한 실시예에서, 동문자나열 세그먼트들의 문자 수가 이 세그먼트들을 표현하는 각각의 코드들과 함께 저장된다. 앞서 처리된 동문자나열을 이후 다시 만날 경우, 저장된 데이터에 액세스하여, 동문자나열 세그먼트들에 대응하는 저장된 데이터가 적절하게 출력된다.

Description

데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치{DATA COMPRESSION METHOD AND APPARATUS WITH EMBEDDED RUN-LENGTH ENCODING}
본 발명은 이제까지 알려져온 바가 없는 동문자나열 길이 인코딩을 통한 데이터 압축 처리의 제공에 관련된 데이터 압축에 대한 것이다.
Abraham Lempel 및 Jacob Ziv는 오늘날 널리 사용되고 있는 LZ 데이터 압축 및 압축해제 시스템에 대한 이론적 토대를 마련하였다. 이들의 논문 중 두가지는, IEEE Transactions on Information Theory, IT-23-3, 1997년 5월, pp. 337-343, 그리고 IEEE Transactions on Information Theory, IT-24-5, 1978년 9월, pp. 530-536에 소개되어 있다. LIW로 알려져 있으며 V.42 bis 모뎀 압축 및 압축해제에 대한 표준으로 채택된 어디에서나 사용되는 데이터 압축 및 압축해제 시스템이 1985년 12월 10일에 Welch에게 특허된 미국특허 4,558,302 호에서 설명된다. LIW는 GIF 및 TIFF 이미지 통신 프로토콜에서 사용되는 압축 및 압축해제 표준으로 채택되었다.
동문자나열 길이 인코딩(Run-Length Encoding)(RLE)으로 알려진 또다른 타입의 데이터 압축과 압축해제는 동문자나열의 문자 및 길이를 표시하는 압축된 코드를 제공함으로서 반복 문자 나열을 압축한다. 따라서 RLE는 동일 문자의 긴 스트링들을 인코딩하는 데 효과적이다. 예를 들어, RLE는 데이터 파일의 시점에 포함될 수 있는 공백들의 긴 시퀀스를 압축하는 데 있어서 효과적이다. RLE는 풍경 이미지의 하늘 부분처럼, 동일한 값을 가지는 일련의 화소들의 긴 동문자나열을 지닌 이미지를 압축하는 데도 효과적이다.
공지 기술에서는, 데이터를 동문자나열 길이 인코더에 적용하고, 이후, 동문자나열 길이 인코딩된 데이터를 LZ 기반 시스템에 적용함으로서, 동문자나열 길이 인코딩이 LZ 시스템과 조합되어 있다. 이러한 구조에서, 동문자나열 길이 인코더가 압축기의 전위(front end)에서 사용되고, 동문자나열 길이 디코더가 압축해제기의 후위(output end)에서 사용된다. 이러한 시스템은 장비 증가, 비용 증가, 제어 오버헤드 증가, 그리고 처리 시간 증가 등의 단점을 가지고 있다.
동문자나열 길이 인코딩은 Seroussi 등에게 1995년 2월 14일자로 특허된 미국특허 제 5,389,922 호의 LZW 기반 시스템에서 또한 포함되어 있다. 이 특허의 시스템에서는, 반복되는 입력 데이터 문자들이 나열될 때, 압축기로부터의 일부 출력코드들이 억제된다. 특별한 동문자나열 향상 엔진이 압축해제기의 입력부에서 사용되어, 빠뜨린 코드들을 재발생시킨다.
데이터 문자 나열을 인코딩함에 관련된 또다른 데이터 압축 및 압축해제 시스템이 Welch 등에게 1999년 1월 19일자로 특허된 미국특허 제 5,861,827 호에 기재되어 있다. 본 시스템의 압축기에서는, 부분 스트링 W와 문자 C가 발견될 때, 스트링 PW에 대한 확장 문자로 새 스트링이 C와 함께 저장된다. 이때, P는 최종적으로 전송된 출력 압축 코드에 실린 스트링이다. 이 압축 알고리즘으로, 문자들의 동문자나열이 그 길이에 관계없이 두 개의 압축 코드로 인코딩된다. 본 시스템의 압축해제기는 인지되지 않은 특별한 코드 처리를 이용하여, 압축기와의 동기화를 유지한다.
본 발명의 목적은 동문자나열 길이 인코딩을 이용하는 추가적인 데이터 압축 실시예를 제공하는 것이다.
도 1 은 본 발명의 바람직한 실시예를 제공하는 데이터 압축기의 개략적인 블록도.
도 2 는 본 발명에 따른 데이터 압축을 수행하도록 도 1의 압축기에 의해 수행되는 동작을 설명하는 제어 순서도.
도 1 및 도 2 의 실시예는 동문자나열이 나타날 때마다 새롭게 처리되는 비-저장식 구성에 해당한다.
도 3은 도 2의 제어 순서도에 따른 도 1의 압축기의 동작을 예시한 도표.
도 4 는 본 발명의 또다른 바람직한 실시예를 제공하는 데이터 압축기의 개략적 블록도.
도 5 는 도 4의 테이블 및 플래그들에 대한 세부사항들을 설명하는 데이터 구조 도표.
도 6 은 본 발명에 따른 데이터 압축을 수행하기 위해 도 4 및 5의 압축기에 의해 수행되는 동작을 도시하는 제어 순서도.
도 4-6 의 실시예는 동문자나열이 다시 나타날 때 재사용될 수 있는 동문자나열 데이터를 저장하도록 기억 장치를 이용한다.
도 7 은 도 6 의 제어 순서도에 따른 도 4 및 5 의 압축기 동작을 예시한 도표.
* 부호설명
10 .. 데이터 압축기(data compressor)11 .. 입력(input)
12 .. 출력(output)13 .. 현재 문자 레지스터(current character register)
14 .. 룩-어헤드 버퍼(look-ahead buffer)15 .. n-레지스터(n-레지스터)
16 .. 코드 사이트 레지스터(code-size register)17 .. 코드 계수기(code-counter)
20 .. 로직(logic)21 .. 제어부(control)
22 .. 입력 문자 버퍼(input character buffer)23 .. 버스(bus)
70 .. 압축기(compressor)71 .. 룩-어헤드 버퍼(look-ahead buffer)
72 .. 로직(logic)73 .. m-레지스터(m-register)
74 .. R-레지스터(R-register)75 .. 제어부(control)
80 .. 테이블 및 플래그(Tables and Flags)81 .. 쌍방향 버스(bidirectioanl bus)
82 .. 제어 버스(contol bus)85 .. 동문자나열 세그먼트 테이블(run segment table)
86 .. 제 1 인카운터 플래그(first encounter flag)
본 발명의 압축기는 데이터 문자들의 동문자나열에 대해 수치증가하는 연속 세그먼트들에 대응하는 수치증가하는 출력 코드들의 시퀀스를 발생시킨다. 서로 다른 일련의 문자들이 압축기 코드 계수기의 증분과 동기화되어 직접 전송된다.
도 1에 도시되는 데이터 압축기(10)는 입력부(11)에 공급된 입력 데이터 문자들의 스트림을, 출력부(12)에서 대응하는 압축 코드들의 스트림으로 압축시킨다. 상기 압축기(10)는 현재 문자 레지스터(Current Character register)(13), 룩-어헤드 버퍼(Look-Ahead Buffers)(14), n-레지스터(15), 그리고 코드 사이즈 레지스터(16)로 표시되는 작업 레지스터들을 포함한다. 상기 압축기(10)는 비-동문자나열 문자들과 동문자나열 세그먼트들을 처리하는 데 사용되는 코드 값들을 순차적으로 발생시키기 위해 코드 계수기(17)를 추가로 포함한다.
상기 압축기(10)는 룩-어헤드 비교 및 문자 폐기 로직(20)을 추가로 포함한다. 상기 로직(20)은 현 문자 레지스터(13)의 문자와, 룩-어헤드 버퍼(14)의 문자를 비교하여, 룩-어헤드 문자를 아래 설명하는 방식으로 폐기한다. 압축기(10)는 도 2의 순서도에 따라 압축기의 동작들을 제어하는 제어부(21)를 또한 포함한다.
압축기(10)는 입력부(11)에서 수신한 입력 데이터 문자 스트림을 버퍼링하는 입력 문자 버퍼(22)를 추가로 포함한다. 입력 데이터 문자들은 입력 문자 버퍼(22)로부터 버스(23)를 통해 현재 문자 레지스터(13)와 룩-어헤드 버퍼(14)에 공급된다. 압축기(10)는 입력 문자 버퍼(22)로부터의 입력 데이터 문자 획득을 제어 버스(24)를 통해 제어한다.
간단하게 말해서, 압축기(10)의 동작은 다음과 같다. 입력 데이터 문자들이 입력 문자 버퍼(22)로부터 현 문자 레지스터(13)와 룩-어헤드 버퍼(14)에 페치(fetch)되어, 로직(20)이 현 문자와 다음의 두 룩-어헤드 문자를 비교한다. 만약 상기 세 개의 문자가 같으면, 동문자나열 처리가 수행된다. 그렇지 않을 경우, 상기 현재 문자 레지스터(13)의 문자가 출력되고, 현 문자에 이어지는 다음 문자가 현 문자 레지스터(13)에 페치된다.
동문자나열이 검출되면, 현 문자 레지스터(13) 내에 위치하는 상기 동문자나열을 시작하는 문자와, 코드 계수기(17)의 코드가 출력된다. 그후 코드 계수기(17)는 1만큼 증분된다. 수치증가하는 동문자나열 세그먼트들이 동문자나열 내에 존재하는 지를 결정하기 위해 동문자나열이 검사된다. 구체적으로, 세 문자들, 네 문자들, 다섯 문자들, 여섯 문자들, 등등의 연속적인 동문자나열 세그먼트들이 상기 동문자나열 내에 존재하는 지가 결정된다. 즉, 현재 문자 레지스터(13)의 문자에 이어지면서 이 문자와 일치하는 두 룩-어헤드 문자들 다음에 상기와 같은 연속적인 동문자나열 세그먼트들이 상기 동문자나열 내에 존재하는 지가 결정된다. 이렇게 검출된 각각의 동문자나열 세그먼트에 대하여, 코드 계수기(17)의 코드가 출력되고, 코드 계수기(17)가 1만큼 증분된다. 이 시퀀스의 다음 동문자나열 세그먼트를 채워야할 상기 동문자나열 내의 문자들이 불충분할 때까지 이 처리과정이 계속된다. 이같은 경우가 발생되면 상기 코드 계수기(17)가 다시 "1" 만큼 증분된다.
상기 현재 문자 레지스터(13), 룩-어헤드 버퍼(14), n-레지스터(15), 그리고 상기 로직(20)은 도 2와 관련하여 하기에서 설명되는 바와 같이 상기 문자 동문자나열 처리를 수행하는데 사용된다.
도 2에서는 발명에 따른 데이터 압축을 수행하도록 압축기(10)에 의해 수행될 상세한 동작들을 보여주는 제어 순서도가 도시된다. 제어부(21)는 동작들의 실행을 제어하기 위한 상태 머신같은 적절한 회로들을 지니는 것으로 간주된다.
도 2 의 순서도는 가변 길이 출력을 근간으로 하며, 이 효과를 위해 코드 사이즈 레지스터(16)가 사용된다. 당 분야에 잘 알려진 바와 같이, 가령, 8비트 알파벳을 가지는 ASCII 구현에서, 상기 코드 사이즈는 9비트로 시작되어 코드 512, 1024, 2048 등에서 10, 11, 12 비트 등으로 각각 증가될 수 있다.
따라서, 블록(30)에서, 코드 계수기(17)는 ASCII 환경의 258과 같은 제 1 가용 코드로 초기화된다. 블록(31)에서, 상기 코드 사이즈 레지스터(16)는 상기 ASCII 실시예의 9비트같은 시작 코드 사이즈로 초기화된다.
블록(32)에서, 제 1 입력 문자가 현재 문자 레지스터(13)에 페치되며, 블록(33)에서, n-레지스터(15)가 2로 설정된다. 블록(34)에서, 현재 문자 레지스터(13)의 상기 문자가 출력부(12)에 제공된다. 이 문자가 출력되었더라도, 현재 문자 레지스터(13) 내에 이 문자가 여전히 위치한다.
블록(35)에서 처리가 계속되어, 상기 레지스터(13)내 현재 문자가 현재 문자를 뒤따르는 다음 n개의 룩-어헤드 문자들에 대하여 테스트되어 이들이 같은가를 결정하도록 한다. 상기의 처리는 상기 룩-어헤드 버퍼(14)내로 페치된 적절한 문자를 이용하여 로직(20)에 의해 수행된다. "n" 이 2로 설정되었기 때문에, 블록(35)이 상기 현재 문자를, 현재 문자에 뒤따르는 두개의 룩-어헤드 문자들과 비교한다.
상기 블록(35)은 이러한 동일 문자들의 동문자나열이 시작될 것인지를 결정한다. 만약 상기 현재 문자가 다음의 두 룩-어헤드 문자와 같다면, 동문자나열 처리는 블록(35)의 YES 브랜치를 취함으로서 시작된다. 상기 두 룩-어헤드 문자중 한 문자가 현재 문자와 매치하지 않는다면, 블록(35)의 NO 브랜치가 선택되어, 비-동문자나열 처리를 수행한다.
도 2 의 로직에서는, 동일 문자 나열이 발생될 것이라고 블록(35)이 결정할 때(YES 브랜치), 현재 문자 레지스터(13) 내의 문자가 출력되어야 한다. 마찬가지로, 동일 문자 나열이 발생되지 않을 것이라고 블록(35)이 결정하면(NO 브랜치), 현 문자가 출력되어야 한다. 경제적 이유로, 브랜치에 상관없이 현 문자가 출력되기 때문에, 블록(34)은 블록(35)의 결정에 앞서 상기 작용을 수행한다.
블록(35)으로부터 비-동문자나열 처리인 No 브랜치가 선택될 경우, 현재 문자가 블록(34)에서 이미 출력되어 있다. 블록(36)에서, 코드 계수기(17)의 코드가 테스트되어, 코드 사이즈의 증가가 필요한 지를 결정한다. 만약 증가가 필요하다면, 처리는 블록(37)으로 진행되어, 코드 사이즈 레지스터(16)가 1만큼 증분된다. 코드 사이즈 증가가 필요하지 않다면, 블록(37)을 우회하여 블록(38)으로 처리가 이어진다. 블록(38)에서는, 블록(34)의 현재 문자 출력과 동기화되어 코드 계수기가 1만큼 증분된다.
처리과정은 블록(39)으로 이어져, 현재 문자를 뒤따르는 문자가 현재 문자 레지스터(13)에 페치된다. 그후 제어는 블록(34)으로 되돌아가, 입력 데이터 처리가 계속된다.
동일 문자의 나열이 시작되고 있음을 블록(35)의 결정이 표시할 때, YES 브랜치가 블록 50으로 이어진다. 블록(50)에서는, 코드 계수기(17)의 코드가 압축기(10)의 출력부(12)에 제공된다. 제어 순서도의 이 시점에서, 잠재적 동문자나열을 위한 첫 번째 세 개의 문자들이 처리되었다. 이 동문자나열의 최초 문자는 현재 문자 레지스터(13) 내의 문자로서, 블록(34)에서 출력된 바 있다. 블록(50)에서 출력되는 코드 계수기(17)의 코드는 블록(35)에서 사용되는 두 개의 룩-어헤드 문자들을 나타낸다. 이 두 문자들은 현재 문자를 뒤따르는 동문자나열의 제 1 세그먼트에 해당한다. 블록(51, 52)에서, 블록(36, 37)에 대하여 앞서 상술한 코드 사이즈 로직이 수행된다.
블록(53)에서, 코드 계수기(17)는 1만큼 증분되어, 동문자나열의 다음 세그먼트의 처리를 위해 코드 계수기(17)를 준비한다. 블록(54)에서, 앞서 처리된 n개의 룩-어헤드 문자들이 폐기된다. 이 문자들을 나타내는 코드가 블록(50)에서 출력되었기 때문에 폐기가 발생한다. 문자들의 폐기는 적절한 문자들의 룩-어헤드 버퍼(14)를 소거함으로서 로직(20)에 의해 수행된다.
처리과정은 블록(55)으로 이어져, 인덱스 n이 n+1로 증분된다. 이 단계는 n-레지스터(15)에 대하여 이루어진다. 따라서, 처리과정의 이 시점에서, 앞서 2로 설정되었던 n이 3으로 증가하고, 따라서, 다음의 세 룩-어헤드 문자들이 그 다음 수치증가하는 동문자나열 세그먼트로 동문자나열을 계속하는 지를 결정하는 것을 대비한다.
따라서, 블록(54)에서 폐기되었던 문자들을 뒤따르는 다음 n개의 룩-어헤드문자들에 대하여 현재 문자 레지스터(13) 내의 문자를 테스트하는 결정 블록(56)에 진입한다. 이 처리과정은 룩-어헤드 버퍼에 페치되는 적절한 문자들을 이용하여 로직(20)에 의해 수행된다. n개의 모든 룩-어헤드 문자들이 현재 문자와 일치할 경우, YES 브랜치가 선택된다. 그렇지 않을 경우, NO 브랜치가 선택된다.
블록(56)에서 YES 브랜치가 선택될 경우, 현재 문자 레지스터(13) 내 문자의 동문자나열이 그 다음 n개의 문자 세그먼트로 계속된다. 그후 제어는 블록(50)으로 되돌아가, 상술한 바와 같은 과정을 계속한다. 간단하게 말해서, 블록(54)에서 폐기된 n개의 동문자나열 세그먼트를 표현하는 코드를 블록(50)이 출력한다. 코드 계수기(17)가 다시 증분된다(블록(53)). 블록(55)에서 인덱스 n이 증분되어, 연속적이면서 수치증가하는 또다른 동문자나열 세그먼트가 입력에 존재하는 지를 결정하기 위해 동문자나열을 조사한다.
블록(56)에서 다음 동문자나열 세그먼트를 채우기에는 현재 문자 레지스터(13) 내의 문자와 동일한 입력 문자들이 불충분하다고 결정될 경우, 블록(56)으로부터 NO 브랜치가 선택된다. 블록(36, 37)과 관련하여 상술한 코드 사이즈 테스트가 블록(57, 58)에서 수행된다. 블록(59)에서 코드 계수기(17)가 1만큼 증분된다. 블록 60에서, 로직(20)의 제어 하에, 블록(54)에서 폐기된 문자들을 뒤따르는 다음 문자가 현재 문자 레지스터(13)로 페치되어, 상기 처리과정을 계속 진행한다. 따라서, 그후 제어는 블록(33)으로 되돌아온다.
블록(56)으로부터 NO 브랜치가 선택될 경우, 블록(56)의 테스트 수행에 사용되는 n개의 룩-어헤드 문자들이 룩-어헤드 버퍼(14)에 놓인다. 이 문자들은 현재 문자처럼 블록(60)에서 사용되고 있는 문자들 중 첫 번째 문자와 함께 처리과정을 계속하는 데 사용된다. 현재 문자를 뒤따르는 룩-어헤드 버퍼(14)에 저장된 문자들은 룩-어헤드 문자들이 요구될 때 블록(35)에서 사용될 수 있다. 로직(20)은 현재 문자 레지스터(13)와 룩-어헤드 버퍼(14)를 제어하며, 따라서, 이들 작용 및 도 2의 그 외 다른 작용들은 요구하는 바에 따라 문자들을 이용하고, 페치하며, 폐기함으로서 적절하게 수행된다.
요약하자면, 결정 블록(35)은 동문자나열의 발생을 검출하고 상기 동문자나열이 블록(50-56)에서 처리된다. 비-동문자나열 데이터의 처리는 블록(36-39)에 의해 수행된다. 블록(57-60)은 동문자나열의 다음 세그먼트를 채우기에 문자들이 불충분한 경우에 나타나는 처리과정을 수행한다.
도 3에서는, 도 2의 순서도에 따른 압축기(10)의 동작의 일례가 도시된다. 페이지 상단에서, 입력 데이터 스트림이 도시되는 데, 각각의 동문자나열에 대한 문자들은 문자 시퀀스 번호로 식별된다. 이는 일례의 단계들을 통해 문자의 진행을 따라 촉진되도록 행하여진다. 이 시퀀스 번호들은 문자 식별 용도로 도시되며, 실제 입력 데이터 문자 스트림에서 나타나지는 않는다.
본 예는 설명을 위한 것으로서, 좌측 열에 도시되는 작용들과, 우측열에 명시된 작용들에 참가하는 도 2의 블록들을 가진다.
예를 들어, 작용 2에서, 코드 계수기의 코드 258이 블록(50)에서 출력되고, 코드 사이즈가 블록(51, 52)에서 테스트되며, 코드 계수기는 블록(53)에서 259로 증분되고, 그리고 룩-어헤드 문자들 a(2)와 a(3)는 블록(54)에서 폐기된다. 마찬가지로, 작용 3에서는, 블록(55)에서 n-레지스터가 3으로 증분되고, 그 다음 세 개의 룩-어헤드 문자들 a(4), a(5), a(6)가 블록(56)에서 검사되며, 제어가 다시 블록(50)으로 되돌아가 코드 259를 출력하고, 코드 계수기는 블록(53)에서 260으로 증분되며, 세 개의 룩-어헤드 문자들이 블록(54)에서 폐기된다. 추가적인 예로서, 작용 10에서는, 코드 사이즈가 블록(36, 37)에서 테스트되고, 코드 계수기가 블록(38)에서 265로 증분된다. 다음 문자 x가 현 문자 레지스터로 인출되며(블록(39)), 블록(34)에서 출력된다. 그 다음 룩-어헤드 문자들 yz가 블록(35)에서 테스트된다.
도 2의 블록들에 비교한 도 3의 작용들에 대한 추가적인 기재는 쉽게 이해될 것이므로 더 이상 상세한 설명을 제공하지 않는다.
도 4에서는 본 발명의 또다른 선호되는 실시예의 개략적 블록도표가 도시된다. 도 4는 도 1과 관련하여 상술한 바와 동일한 다수의 구성요소들을 구비한 데이터 압축기(70)를 도시하며, 상기 다수의 구성요소들에 대해서는 도 1에서와 동일한 도면부호들이 부여된다. 도 1과 관련하여 제공된 기재사항들은 도 4에도 적용가능하다.
압축기(70)는 도 1의 룩-어헤드 버퍼(14)와 유사한 룩-어헤드 버퍼(71)를 포함한다. 이를 위해 도 4의 압축기(70)에서 추가적인 기능이 요구되는 데, 이는 도 6과 관련하여 설명될 것이다. 압축기(70)는 도 1의 로직(20)과 유사한 룩-어헤드 비교 및 문자 폐기 로직(72)을 또한 포함한다. 이를 위해 압축기(70)에서 추가적인 기능이 요구되는 데, 이는 도 6과 관련하여 설명될 것이다.
압축기(70)는 도 6과 관련하여 설명되는 방식으로 압축기(70)의 동작에 사용되는 변수들을 고정시키기 위해 M-레지스터(73)와 R-레지스터(74)로 표시되는 작업 레지스터들을 포함한다. 압축기(70)는 압축기의 동작을 제어하기 위한 제어부(75)를 또한 포함한다.
도 1의 압축기(10)와는 달리, 압축기(70)는 테이블 및 플래그(Tables and Flags))(80)를 포함하는 데, 이는 동문자나열 세그먼트 카운트 및 코드들을 저장하고 제 1 인카운터 플래그(First Encounter Flag)를 제공한다. 테이블 및 플래그(80)와의 데이터 통신은 양방향 버스(81)를 통해 수행된다. 데이터 전달 제어는 양방향 제어 버스(82)에 의해 수행된다. 테이블 및 플래그(80)의 세부사항은 도 5에서 제공된다.
도 5에서, 테이블 및 플래그(80)는 압축이 발생하고 있는 알파벳 문자 각각에 대하여 동문자나열 세그먼트 테이블(a Run Segment Table)(85)과 제 1 인카운터 플래그(a First Encounter Flag)(86)를 포함한다. 예를 들어, "문자 1" 에 대한 동문자나열 세그먼트 테이블(85)은 데이터 문자 입력에서 만나는 문자 1의 동문자나열들에 대한 동문자나열 세그먼트들의 카운트와 코드들을 저장한다. 최초에, 모든 제 1 인카운터 플래그(86)들이 설정된다. "문자 1" 의 동문자나열을 처음 만날 때, "문자 1" 에 대한 제 1 인카운터 플래그(86)가 재설정된다. 도 5의 테이블 및 플래그(80)의 이용에 관한 세부사항은 도 6과 관련하여 아래에서 설명될 것이다.
간단하게 말해서, 압축기(70)의 동작은 다음과 같다. 압축기(70)는 동문자나열 세그먼트들이 처리됨에 따라 테이블(85)에 압축기(70) 동문자나열 세그먼트 데이터가 저장되는 점을 제외하고는 압축기(10)에 대하여 앞서 설명한 방식으로 동작한다. 후에, 동일 문자의 나열을 만날 때, 저장된 데이터가 압축 향상을 위해 사용된다.
동작에서의 이러한 차이점 때문에, 압축기(70)의 동문자나열 검출 로직이 압축기(10)의 동문자나열 검출 로직과 차별화되게 동작한다. 압축기(70)에서, 현재 문자가 그 다음 뒤따르는 문자와 동일하지 않을 경우, 압축기(10)의 비-동문자나열 동작과 실질적으로 동일한 방식으로 비-동문자나열 처리가 수행된다. 다음 문자가 현재 문자와 동일한 경우, 현재 문자에 대하여 제 1 인카운터 플래그가 테스트된다. 압축기(10)가 처음으로 현재 문자의 동문자나열을 만날 경우, 동문자나열 세그먼트 데이터 저장을 제외하고는 압축기(10)의 경우와 동일한 동문자나열 처리가 수행된다. 본 경우에, 현재 문자와 그 다음의 두 문자들은 동일할 것이다. 그러나 이렇게 만난 현재 문자의 동문자나열이 이러한 첫 번째 동문자나열에 해당하지 않을 경우, 동문자나열 처리 과정에서 현재 문자에 대한 동문자나열 세그먼트 표(85)를 참조하게 된다.
현재 문자 레지스터(13), 룩-어헤드 버퍼(71), n-레지스터(15), M-레지스터(73), R-레지스터(74), 그리고 로직(72)은 도 6과 관련하여 아래에서 설명되는 바와 같이 동문자나열 처리를 수행하는 데 사용된다.
도 6과 관련하여, 압축기(70)에 의해 수행될 상세한 동작들을 설명하는 제어순서도가 도시된다. 제어부(75)는 동작들의 수행을 제어하는 데 적절한 회로들을 지닌다고 간주된다. 도 2와 관련하여 상술한 방식으로, 도 6의 순서도는 가변 길이 출력으로 예측된다. 도 6의 블록들 중 다수는 도 2의 블록들과 동일하며, 동일한 도면 부호들에 의해 표시된다. 도 2의 이 블록들에 대해 앞서 제시한 설명들이 도 6의 유사 도면부호 블록들에게 또한 적용될 수 있다. 도 2의 블록과 도 6의 블록에서의 차이점은 도 6에 대한 다음의 설명에서 나타날 것이다.
도 6의 블록(30-32)에서, 코드 계수기(17)와 코드 사이즈 레지스터(16)가 초기화되고, 제 1 문자가 현재 문자 레지스터(13)에 페치된다. 블록(90)에서, 모든 제 1 계수기 플래그(86)들이 동문자나열의 제 1 인카운터(즉, 첫 번째 만남)를 준비하도록 설정된다.
현재 문자 레지스터(13)의 문자를 그 다음 문자와 비교하여, 이들이 동일한지를 결정하는 블록(91)으로 처리과정이 계속된다. 룩-어헤드 버퍼(71)와 로직(72)이 이 기능을 수행하는 데 사용된다. 문자들이 동일하지 않을 경우, 블록(91)으로부터 NO 브랜치가 선택되어 비-동문자나열 처리를 수행한다. 두 문자가 동일할 경우, 블록(91)으로부터 YES 브랜치가 선택되어, 블록(92)으로 이어진다. 블록(92)에서는, 현재 문자 레지스터(13)의 문자에 대한 제 1 인카운터 플래그(86)의 상태가 테스트된다. 제 1 인카운터 플래그가 재설정되었으면, 블록(92)으로부터 YES 브랜치가 선택되어, 현재 문자의 동문자나열 처리를 수행한다. 이때, 이 문자의 동문자나열은 앞서 나타난바 있고, 그 동문자나열 데이터는 이 문자에 대한 동문자나열 세그먼트 테이블(85)에 저장되어 있다.
현재 문자에 대한 제 1 인카운터 플래그(86)가 여전히 기설정된 상태라면, 블록(92)으로부터 NO 브랜치가 선택되어 블록(33)으로 이어진다. 블록(33)에서는 n이 2로 설정된다. 처리과정은 블록(33)에서 블록(35)으로 이어져, 현재 문자가 다음 n개의 룩-어헤드 문자들과 동일한 지를 결정한다. 블록(33)에서 n이 2로 설정되었기 때문에, 현재 문자가 다음 두 문자와 동일한 지를 블록(35)에서 결정한다. 현재 문자에 대한 제 1 인카운터 플래그가 여전히 기설정된 상태이기 때문에, 이 문자에 대한 동문자나열 데이터는 아직 저장되지 않았다. 이 상황 하에서, 블록(35)으로부터 YES 브랜치가 선택되어, 도 2의 경우와 유사한 동문자나열 처리가 수행된다. 블록(35)으로부터 NO 브랜치가 선택될 경우, 비-동문자나열 처리가 수행된다.
따라서, 블록(33, 35, 91, 92)은 다음의 방식으로 동문자나열들을 검출하는 기능을 한다. 현재 문자가 다음 문자와 다를 경우, 비-동문자나열 처리가 수행된다. 현재 문자가 다음 문자와 동일하고, 이 문자에 대한 동문자나열이 앞서 처리된 바 있을 경우, 앞서 저장된 데이터를 이용하여 동문자나열 처리가 수행된다. 문자의 동문자나열이 아직 나타나지도 않았고 처리된 바도 없다면, 현재 문자가 다음 두 문자와 동일한 경우 동문자나열 처리가 수행되고, 그렇지 않을 경우엔 비-동문자나열 처리가 수행된다.
블록(35)이나 블록(91)으로부터 NO 브랜치가 선택될 경우, 비-동문자나열 처리가 수행된다. 블록(93)에서, 현재 문자 레지스터(13)의 문자가 출력된다. 그후, 블록(36-39)의 비-동문자나열 처리가 도 2와 관련하여 설명한 방식으로 수행된다. 블록(39) 이후, 처리는 블록(91)으로 되돌아간다.
현재 문자의 세-문자 동문자나열이 첫 번째로 검출되었을 때, 블록(35)으로부터 YES 브랜치가 선택된다. 처리과정은 블록(94, 95)으로 진행되어, 현재 문자에 대한 제 1 인카운터 플래그가 재설정되고(블록(94)) 현재 문자 레지스터(13)의 문자가 출력된다(블록(95)). 그후 제어는 도 2의 블록(50-56)과 관련하여 설명한 방식으로 동문자나열의 세그먼트들을 처리하는 루프에 들어간다.
따라서, 도 6의 처리과정은 블록(50)으로 진행되어, 코드 계수기(17)의 코드가 출력된다. 그후, 블록(96)에 진입하여, 코드 계수기(17)로부터의 코드와, n과 동일한 카운트가 현재 문자에 대한 동문자나열 세그먼트 테이블(85)에 저장된다. 블록(96) 이후, 블록(51-55)은 도 2의 블록들에 대해 설명한 방식으로 처리과정을 수행한다. 예를 들어, 블록(54, 55)에서, n개의 룩-어헤드 문자들이 폐기되고 n이 n+1로 증분된다.
블록(97)에서는 로직(72)이 테스트를 수행하여, 현재 문자들이, 폐기된 문자(가령, 블록(54)에서 폐기된 문자)를 뒤따르는 그 다음 n개의 룩-어헤드 문자들과 동일한 지를 결정한다. 처리 과정이 블록(55)으로부터 블록(97)에 진입할 경우, 블록(54)에서 여러 문자들이 항상 폐기되어 있을 것이다. 블록(97)의 기능은 도 2의 블록(56)의 기능과 실질적으로 동일하다. 다만, 도 2의 블록(56)에서는 여러개의 문자들이 항상 폐기된 상태일 것이다. 아래 설명되는 이유로, 블록(97)에서는, 블록(132)으로부터 블록(97)에 진입할 때 단 한 개의 문자만이 폐기된 상태일 수 있다. 따라서, 도 2의 비교가능한 블록(56)의 경우와는 다른 도면 부호가 블록(97)에 제공된다. 도 2의 블록(56)에 대해 앞서 설명한 방식으로, 블록(97)으로부터의 YES 브랜치는 블록(50)으로 되돌아가, 동문자나열 처리를 계속한다.
도 6의 블록(50-55, 96, 97)은 도 2의 블록(50-56)과 실질적으로 동일한 처리를 수행한다. 도 2와 도 6간의 근본적 차이는 도 2에서는 동문자나열 데이터가 저장되지 않으나 도 6에서는 동문자나열 데이터가 저장된다는 점이다. 따라서, 상기 저장을 수행하는 도 6의 블록(96)은 도 2와 6에 모두 나타나는 블록(50)과 블록(51) 사이의 처리 순서에 삽입된다.
도 5와 도 6을 참고할 때, 도 6의 블록(50-55, 96, 97)의 동작은 도 5에 표시되는 바와 같이 "문자 1" 의 동문자나열에 의해 예시될 수 있다. "문자 1" 은 현재 문자 레지스터(13) 내에 있고, 이는 "문자 1" 의 세-문자 동문자나열을 첫 번째 만나는 것(first encounter)이다. 블록(50-55, 96, 97)을 포함하는 도 6의 루프의 일련의 반복들은 코드 258-267에서 "문자 1" 에 대한 동문자나열 세그먼트 테이블(85)의 엔트리들을 도출한다. 따라서, 블록(55)에서 n이 증분됨에 따라, "문자 1" 의 동문자나열에 대한 수치증가하는 세그먼트들이, 테이블(85)에 나타나는 바와 같이 저장된 동문자나열 세그먼트 데이터와 만난다. 앞서 설명한 바와 같이, 동문자나열의 각 세그먼트를 나타내는 코드가 블록(50)에서 출력된다.
따라서, "문자 1" 의 이러한 예시 동문자나열은 현재 문자 레지스터(13) 내의 현재 문자와, 이어서, 코드 258로 표시되는 두 문자들의 동문자나열 세그먼트, 이어서, 코드 259로 표시되는 세 문자들의 동문자나열 세그먼트, 등등하여, 마지막으로, 코드 267로 표시되는 11개 문자들의 세그먼트로 구성된다. 따라서, 이 동문자나열은 66개와 77개의 문자들 사이의 문자들로 구성된다.
도 6과 관련하여, 블록(97)에서는, 다음 세그먼트를 채우기에 불충분한 문자들이 동문자나열에 남아있을 경우, 블록(97)으로부터 NO 브랜치가 선택된다. 처리과정은 블록(57-59)과 블록(100)으로 이어진다. 블록(57-59)은 상술한 바와 같이 도 2의 유사 번호 블록과 동일하며, 블록(100)은 도 2의 블록(60)과 실질적으로 동일하다. 블록(97)에 대하여 앞서 제시한 이유로 블록(100)에 대해 새로운 도면부호가 사용되었다.
폐기된 문자를 뒤따르는 다음 문자가 현재 문자 레지스터(13)에 페치된 후, 제어는 블록(91)으로 되돌아가, 입력 데이터 문자 스트림의 처리를 계속한다.
블록(91)에서 두-문자 동문자나열이 나타나고 이 문자에 대한 제 1 인카운터 플래그가 재설정되어 있다면, 블록(92)으로부터 블록(110)으로 이어지는 YES 브랜치가 선택되어, 동문자나열 처리를 시작한다. 이 경우엔, 이 문자에 대한 앞서의 동문자나열 데이터가 저장되어 있다. 현재 문자와 같으면서 현재 문자를 뒤따르는 순차적 문자들의 수 더하기 1로 매개변수 R이 설정된다. 따라서, R은 방금 만난 현재 문자의 동문자나열에서의 문자들 수와 동일하다. 룩-어헤드 버퍼(71)와 로직(72)은 블록(110)의 기능을 수행하는 데 사용된다. 이때, R의 값은 R-레지스터(74)에서 유지된다.
처리과정은 블록(111)으로 진행되어, 현재 문자 레지스터(13)의 문자에 대한 동문자나열 세그먼트 테이블의 최대 카운트로 매개변수 M이 설정된다. 이 최대 카운트 M을 결정하기 위해 도 5의 적절한 동문자나열 세그먼트 테이블(85)로부터 상기 테이블의 아래쪽까지 스크롤링에 의해, M이 결정된다. 그후 M은 M-레지스터(73)에서 유지된다.
처리과정은 블록(112)으로 진행되어, R-레지스터(74)의 값이 M-레지스터(73)의 값과 비교된다. R이 M보다 클 경우 블록(112)으로부터 YES 브랜치가 선택되고, R이 M보다 작거나 같을 경우 블록(112)으로부터 NO 브랜치가 선택된다. YES 브랜치가 선택되면, 현재 문자의 현재 만난 동문자나열이, 관련된 동문자나열 세그먼트 테이블(85)에 저장된 최대 동문자나열 세그먼트보다 크다. NO 브랜치가 선택될 경우, 현재 문자의 현재 만난 동문자나열이, 관련된 동문자나열 세그먼트 테이블에 저장된 최대 동문자나열 세그먼트보다 작거나 같다.
블록(112)으로부터 NO 브랜치가 선택될 경우, 처리과정은 블록(113)으로 진행하여, R과 같은 카운트에 대한 관련 동문자나열 세그먼트 테이블로부터의 코드가 압축기(70)에 의해 출력된다.
블록(113)의 기능은 R-레지스터(74)의 값을 관련 동문자나열 세그먼트 테이블의 카운트와 연계하여 비교함으로서 수행된다. R이 상기 테이블에 있을 경우, 대응하는 코드가 위치하여 있을 것이며, 출력된다. 대안으로, 상기 테이블에 저장된 카운트를 통한 간단한 시퀀싱은, 카운트가 R과 같은 적절한 위치를 발견하는 데 사용될 수 있다.
처리과정은 블록(114, 115)으로 진행하여, 블록(36, 37)에 대하여 설명한 방식으로 코드 사이즈를 테스트하고 조정한다.
블록(116)에서는 압축기(70)의 코드 계수기(17)가 1만큼 증분되고, 블록(117)에서는 현재 문자를 뒤따르는 R-1 문자가 폐기된다. 이 폐기된 문자들은 현재 문자 레지스터(13)의 문자와 함께, 블록(113)에서 출력되는 코드로 표시된다. 이 문자들의 폐기는 로직(72)의 제어 하에 룩-어헤드 버퍼(71)를 이용하여 수행된다.
블록(118)에서는 블록(117)에서 폐기된 문자를 뒤따르는 문자가 현재 문자 레지스터(113)로 페치된다. 이 기능은 로직(72)의 제어 하에 룩-어헤드 버퍼(71)에 의해 수행된다. 그후, 제어는 블록(91)으로 되돌아가, 입력 데이터 문자 스트림 처리를 계속한다.
현재 만난 현재 문자의 동문자나열이 관련 동문자나열 세그먼트 테이블(85)에 저장된 가장 긴 동문자나열 세그먼트보다 클 경우, 블록(112)으로부터 YES 브랜치가 선택된다. 처리과정은 블록(130)으로 진행하여, 관련 동문자나열 세그먼트 테이블로부터 M에 대응하는 코드가 출력된다. M은 M-레지스터(73)에 저장된 값이다. 관련 동문자나열 세그먼트 테이블은 M의 카운트에 대해 대응하는 코드를 위치시키거나 출력하도록 연계방식에 의해 또는 스캐닝에 의해 이러한 M의 값으로 액세스된다.
처리과정은 블록(131)으로 진행되어, 현재 문자를 뒤따르는 M-1 문자가 폐기된다. 이 폐기 동작은 블록(54, 117)같은 블록들에 대하여 상술한 방식으로 구현된다. 현재 문자 레지스터(13)의 문자와 함께 블록(131)에서 폐기된 M-1 문자는 현재 만난 현재 문자의 동문자나열의 세그먼트를 포함한다. 이 M개의 문자들을 표시하는 코드가 블록(130)에서 출력되었다.
블록(132)에서 n을 M+1로 설정함으로서 동문자나열의 나머지가 처리된다. 블록(132)의 기능은 레지스터(73)의 M 값을 1만큼 증분시킴으로서, 그리고 이 값을 n-레지스터(15)에 전달함으로서 수행된다. 그후 제어는 블록(97)으로 넘어가, 앞서 기술한 바와 같은 동문자나열 처리를 계속한다.
도 6과 관련하여, 블록(93)은 비-동문자나열 처리의 진입구이고, 블록(94)은 문자를 첫 번째 만난 동문자나열에 대한 처리과정의 진입구이다. 블록(110)은 해당 문자에 대한 동문자나열이 기처리되어 저장되어 있는 경우의 동문자나열 처리과정에 대한 진입구이다. 이러한 실행의 경우에, 블록(112)은 저장된 최대 동문자나열 세그먼트보다 큰 동문자나열을, 또는 최대 저장 동문자나열 세그먼트보다 작거나 같은 동문자나열을, 처리하는 분기점이다.
도 4-6의 실시예는 도 6의 블록(91, 92, 33, 35)으로 구성되는 동문자나열 검출 로직을 들어 설명되었다. 도 2의 블록(33-35)으로 구성되는 도 1 및 2 실시예의 동문자나열 검출 로직이 도 6에 사용될 수 있었음을 이해할 수 있을 것이다. 이러한 실시예로, 길이 2의 저장된 동문자나열 세그먼트들이 동문자나열 세그먼트 테이블에 액세스되지 못할 것이다. 대안의 배열에서, 블록(33, 35)은 블록(35)을 뒤따르는 블록(92)과 함께 이용될 것이다. 블록(92)의 NO 브랜치는 블록(94)으로 안내될 것이다. 블록(92)의 YES 브랜치는 앞서 설명한 바와 같이 블록(110)으로 안내될 것이다.
도 7과 관련하여, 도 6의 순서도에 따른 압축기의 동작이 예시된다. 도 7의 포맷은 도 3의 포맷과 동일하며, 도 3에 관련하여 앞서 제시한 설명들이 또한 적용될 수 있다. 도 7은, 동문자나열 세그먼트 테이블에 저장되어 차후 동문자나열을 처리하는 데 사용되는 동문자나열 세그먼트 데이터가 나타나는 점과, 매개변수 R 및 M, 그리고 제 1 인카운터 플래그의 설정 및 재설정이 나타나는 점에서 도 3과 차별화된다.
구체적으로, 도 7의 작용 1-6은 도 3의 작용 1-5와 실질적으로 동일하다. 다만, 도 7에서는 동문자나열 세그먼트 데이터가 동문자나열 세그먼트 테이블에 저장되며, 제 1 인카운터 플래그의 설정 및 재설정이 나타나 있는 점에 차이가 있다.
마찬가지로, 도 7의 작용 9-12의 비-동문자나열 처리는 도 3의 작용 9-12와 실질적으로 동일하다. 다만, 도 7에서는 한 개의 룩-어헤드 문자를 바탕으로 비-동문자나열 결정이 구현되는 데 반해, 도 3에서는 두 개의 룩-어헤드 문자를 바탕으로 결정이 이루어진다는 점에 차이가 있다.
도 7의 작용 13은 문자 "a" 의 동문자나열을 두 번째 만나는 것을 검출함을 도시한다. 이 동문자나열은 문자 "a(13)" 에서 "a(21)" 까지로 도시되며, 따라서 9개의 문자로 구성된다. "a" 문자의 동문자나열에 대한 최대 세그먼트는 작용 5에서 동문자나열 세그먼트 카운트 4와 함께 저장되었다. 작용 14에서, 저장된 세그먼트에 대한 코드 260이 출력되고, 3개의 문자 "a(14)" 에서 "a(16)" 까지가 폐기된다. 인덱스 n은 과정 15에서 5로 설정되어, 문자 "a(17)" 에서 "a(21)" 까지를 흡수하려 준비한다. 과정 16에서, 이 문자들을 나타내는 코드 267이 출력되고, 이 문자들이 폐기되며, 이 동문자나열 세그먼트가 동문자나열 세그먼트 테이블에 도시되는 바와 같이 저장된다.
도 7의 우측열에 표시되는 바와 같이, 도 6의 블록에 대한 도 7의 작용들의 상관관계는 도 3에 대해 앞서 설명한 바와 유사하며, 도 7의 구체적 예를 도 6에서의 블록의 기능과 비교함으로서 쉽게 이해할 수 있다.
대응하는 입력 데이터 문자들을 복원하기 위해, 동기화되어 동작하는 압축기(10, 70)의 압축된 출력을 수신하는 호환형 압축해제기가 제공될 수 있다.
출력 코드의 시퀀스가, 도 3 및 7의 "출력" 열에서 표현되는 것처럼, 압축해제기에 의해 처리될 경우, 도면에 도시되는 입력 데이터 문자 스트림이 복원될 것이다. 압축해제기의 프로토콜들이 압축기의 프로토콜들과 호환되어야 함을 이해하여야 한다. 도 3 및 7의 예에서, 8비트로 지원되는 ASCII 알파벳을 가정한다. ASCII 알파벳은 256개의 문자로 구성된다. 코드 계수기(17)는 도 2 및 6의 블록(30)에서 258의 코드로 초기화된다. 코드 257은 당 분야에서 잘 알려진 바와 같이 제어 코드로 예약될 수 있다. 압축해제기는, 초기 코드 계수기 값과 초기 코드 사이즈처럼, 압축기와 동일한 알파벳 사이즈 및 초기 조건들을 가져야 한다. 더욱이, 당 분야에 잘 알려진 바와 같이, 본 발명의 압축기 실시예에서의 코드 사이즈와 압축해제기의 코드 사이즈는 서로에 대해 동기화되어 진행되어야 하며, 그 예로 도 2와 관련한 설명을 참조할 수 있다.
당 분야에 잘 알려진 바와 같이, 압축기와 압축해제기는 모든 단일 문자 스트링들이나 단일 문자들로 초기화될 수 있고, 또는 서로의 값에 의해 압축 코드로부터 구별될 수 있다. ASCII 문자는 256보다 작거나 같은 값을 가지는 데, 반면에, 도 3과 도 7의 ASCII 예에서는 압축 코드들이 258보다 작거나 같은 값을 가진다. 다른 단일 문자 코드 프로토콜들도 또한 사용될 수 있다.
본 발명의 압축기 실시예에서 사용되는 단일 문자 코드 프로토콜은 압축해제기에서도 사용될 수 있다.
동문자나열 및 비-동문자나열 처리 간의 동기화를 유지하기 위해 상술한 바와 같이 코드 계수기(17)가 구현된다. 이는 상술한 도면의 블록(38, 53, 59, 116)에서 특히 잘 나타나 있다. 예를 들어, 블록(38)에서 코드 계수기(17)가 1만큼 증분되어, 블록(34)의 현재 문자 출력과 동기화를 유지할 수 있다.상기 실시예들은 입력 데이터 문자들의 스트림을 압축한다. 입력 데이터 문자들은 대응하는 문자 비트 크기를 가진 어떤 크기의 알파벳에 대하여도 가능하다. 예를 들어, 데이터 문자들이 8비트 문자들의 256개 문자의 ASCII 알파벳처럼, 한 알파벳에 대해 ASCII 문자같이 원문 형태일 수 있다. 입력 데이터는 1비트 크기의 문자를 가진 두 문자 이진 알파벳 1과 0에 대한 이진 문자일 수도 있다. 원문 데이터가 이진 데이터의 두 문자 알파벳에 대하여 압축될 수도 있다.상술한 발명의 실시예들은 하드웨어적으로, 펌웨어적으로, 소프트웨어적으로, 또는 이들의 조합으로 구현될 수 있다. 상술한 여러 기능들을 수행하기 위해 별개의 회로 소자들이 구현될 수 있다. 소프트웨어 실시예에서, 상술한 순서도로부터 쉽게 발생되는 코딩으로 프로그래밍된 적절한 모듈들이 사용될 수 있다.

Claims (31)

  1. 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법으로서, 이때, 상기 입력 스트림은 동일한 데이터 문자들의 동문자나열을 형성하는 인접 데이터 문자들을 포함하고, 상기 방법은,
    - 지정 수치의 인접 데이터 문자들이 동일한 경우를 검출함으로서 상기 입력 스트림에 동문자나열이 존재하는 경우를 검출하고(35YES, 91YES),
    - 검출된 동문자나열의 데이터 문자 세그먼트들에 대응하는, 수치증가하는 수치 코드들에 대한 시퀀스의 코드들을 순차적으로 발생시키며(53),
    - 상기 검출된 동문자나열의 연속 세그먼트들에 각각 상기 시퀀스의 코드들을 할당하고(50, 55, 56YES, 97YES), 이때, 한 개의 세그먼트는 상기 검출된 동문자나열의 다음 인접 세그먼트보다 한 개 적은 데이터 문자를 가지며,
    - 각각의 검출된 동문자나열에 대하여, 상기 연속 세그먼트들에 할당된 코드들을 출력하며(50),
    - 지정 수치의 인접 데이터 문자들이 동일하지 않은 경우를 검출함으로서 상기 입력 스트림에 동문자나열이 존재하지 않는 경우를 검출하며(35NO, 91NO), 그리고
    - 동문자나열이 존재하지 않는 경우에, 검출되는 동문자나열 부분에 해당하지 않는 데이터 문자들의 표현들을 출력하는(34, 93)
    단계들을 포함하며, 이때, 상기 출력 스트림은 상기 각각의 검출된 동문자나열의 출력 코드들과 비-동문자나열 문자들의 출력 표현들을 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  2. 제 1 항에 있어서, 상기 검출된 동문자나열은 상기 검출된 동문자나열의 앞선 인접 세그먼트보다 한 개 많은 데이터 문자를 가지는 최종 세그먼트를 포함하며,
    동문자나열이 존재하는 경우를 검출하는 상기 단계는, 상기 최종 세그먼트를 뒤따르는 상기 입력 스트림 내에서 상기 검출된 동문자나열의 데이터 문자와 동일한 인접 데이터 문자들의 수가 다음 인접 세그먼트를 채울만큼 충분하지 않은 경우를 검출하는 단계(56NO, 97NO)를 포함하며,
    시퀀스의 코드들을 순차적으로 발생시키는 상기 단계는, 상기 불충분한 수의 데이터 문자들이 검출된 후 상기 시퀀스를 그 다음 코드로 증분시키는 단계(59)를 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  3. 제 1 항에 있어서, 검출된 동문자나열의 경우에,
    - 할당된 코드가 출력된 후, 할당된 코드를 출력하는 상기 검출된 동문자나열의 각각의 세그먼트의 데이터 문자들을 폐기하는(54)
    단계를 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  4. 삭제
  5. 제 1 항에 있어서, 상기 방법은,
    - 검출된 동문자나열에 대하여 동문자나열 세그먼트 데이터를 저장하고(96), 이때, 상기 동문자나열 세그먼트 데이터는 검출된 동문자나열의 세그먼트에서의 데이터 문자 수와, 상기 세그먼트에 할당된 코드들을 함께 포함하며,
    - 현재 검출된 동문자나열이 저장된 세그먼트의 데이터 문자들의 수를 포함하는 지를 결정하기 위해 저장된 동문자나열 세그먼트 데이터에 액세스하며(110-112), 그리고
    - 상기 저장된 세그먼트에 할당된 저장된 코드를 출력하며(113), 이때, 상기 출력 스트림은 저장된 코드를 포함하는,
    이상의 단계를 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치로서, 상기 입력 스트림은 동일 데이터 문자의 동문자나열을 형성하는 인접 데이터 문자들을 포함하며, 상기 장치는,
    - 지정 수치의 인접 데이터 문자들이 동일한 경우를 검출함으로서 상기 입력 스트림에 동문자나열이 존재하는 경우를 검출하는 수단(13, 14, 20, 35YES),
    - 검출된 동문자나열의 데이터 문자 세그먼트들에 대응하는 수치증가하는 수치 코드들에 대한 시퀀스의 코드들을 순차적으로 발생시키는 수단(17, 53, 55, 56YES),
    - 상기 검출된 동문자나열의 연속 세그먼트들에 상기 시퀀스의 코드들을 각기 할당하는 수단(50, 55, 56YES)으로서, 이때, 한 개의 세그먼트는 상기 검출된 동문자나열의 다음 인접 세그먼트보다 한 개 적은 데이터 문자를 가지는, 이러한 할당 수단(50, 55, 56YES),
    - 각각의 검출된 동문자나열에 대하여, 상기 연속 세그먼트들에 할당된 코드들을 출력하는 수단(17, 12, 50),
    - 지정 수치의 인접 데이터 문자들이 동일하지 않은 경우를 검출함으로서 상기 입력 스트림에 동문자나열이 존재하지 않는 경우를 검출하는 수단(13, 14, 20, 35NO),
    - 동문자나열이 존재하지 않는 경우에, 검출되는 동문자나열 부분에 해당하지 않는 데이터 문자들의 표현들을 출력하는 수단(12, 13, 34, 39),
    을 포함하며, 이때, 출력 스트림은 상기 검출된 동문자나열에서 출력된 코드들과 비-동문자나열 문자들에서 출력된 표현들을 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  15. 제 14 항에 있어서,
    상기 검출된 동문자나열은 상기 검출된 동문자나열의 앞선 인접 세그먼트보다 한 개 많은 데이터 문자를 가지는 최종 세그먼트를 포함하고, 상기 장치는,
    - 상기 최종 세그먼트를 뒤따르는 상기 입력 스트림 내에 상기 검출된 동문자나열의 데이터 문자와 동일한 인접 데이터 문자들의 수가 다음 인접 세그먼트를 채울만큼 충분하지 않은 경우를 검출하는 수단(13, 14, 20, 56NO), 그리고
    - 데이터 문자의 수가 불충분하다고 결정된 후 상기 시퀀스를 다음의 코드로 증분시키는 수단(17, 59)
    을 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  16. 제 15 항에 있어서, 상기 장치는,
    - 할당된 코드가 출력되는 상기 검출된 동문자나열의 상기 세그먼트 각각의 데이터 문자를 폐기하는 수단(14, 20, 54)
    을 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  17. 삭제
  18. 제 14 항에 있어서, 상기 장치는,
    - 검출된 동문자나열의 경우에, 동문자나열 세그먼트 데이터를 저장하는 수단(80, 96)으로서, 이때, 상기 동문자나열 세그먼트 데이터는 검출된 동문자나열의 세그먼트의 데이터 문자들의 수(n)를 세그먼트들에 각기 할당된 코드들과 함께 포함하는, 이러한 저장 수단(80, 96),
    - 현재 검출된 동문자나열이 저장된 세그먼트의 데이터 문자들의 수(n)를 포함하는 지를 결정하기 위해 상기 저장된 동문자나열 세그먼트 데이터에 액세스하는 수단(13, 73, 74, 110-112), 그리고
    - 상기 저장된 세그먼트에 할당된 저장된 코드를 출력하는 수단(113)
    을 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 제 14 항에 있어서,
    상기 발생시키는 수단은 상기 시퀀스를 발생시키도록 1만큼씩 증분가능한 코드 계수기(17)를 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  28. 제 1 항에 있어서,
    - 검출된 동문자나열의 경우에, 상기 동문자나열의 데이터 문자를 출력하고(34, 95), 이때, 상기 출력 스트림은 상기 동문자나열의 출력된 문자를 포함하는
    단계를 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  29. 제 1 항에 있어서,
    - 비-동문자나열에서 출력된 각각의 표현에 대하여 상기 시퀀스를 그 다음 코드로 증분시키는(38)
    단계를 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 방법.
  30. 제 14 항에 있어서,
    할당된 코드를 출력하는 상기 수단은, 검출된 동문자나열의 경우에, 상기 동문자나열의 데이터 문자를 출력하는 수단(13, 12, 34)을 추가로 포함하고, 이때, 상기 출력 스트림은 상기 동문자나열에서 출력된 문자를 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
  31. 제 14 항에 있어서,
    - 비-동문자나열에서 출력된 각각의 표현에 대하여 상기 시퀀스를 그 다음 코드로 증분시키는 수단(17, 38)
    을 추가로 포함하는 것을 특징으로 하는 데이터 문자들의 입력 스트림을 출력 스트림으로 변환하는 장치.
KR10-2001-7011350A 1999-03-08 2000-02-29 데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치 KR100481204B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/264,269 US6166665A (en) 1999-03-08 1999-03-08 Data compression method and apparatus with embedded run-length encoding
US09/264,269 1999-03-08

Publications (2)

Publication Number Publication Date
KR20010102525A KR20010102525A (ko) 2001-11-15
KR100481204B1 true KR100481204B1 (ko) 2005-04-07

Family

ID=23005298

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2001-7011350A KR100481204B1 (ko) 1999-03-08 2000-02-29 데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치

Country Status (8)

Country Link
US (2) US6166665A (ko)
EP (2) EP1159785B1 (ko)
JP (1) JP3653226B2 (ko)
KR (1) KR100481204B1 (ko)
AU (1) AU3384500A (ko)
CA (1) CA2367446C (ko)
DE (1) DE60013414D1 (ko)
WO (1) WO2000054412A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6188333B1 (en) * 1999-08-12 2001-02-13 Unisys Corporation LZW data compression apparatus and method using look-ahead mathematical run processing
US20020085764A1 (en) * 2000-12-29 2002-07-04 Brady Thomas S. Enhanced data compression technique
US8125364B2 (en) 2007-08-13 2012-02-28 Nec Corporation Data compression/decompression method

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4929946A (en) * 1989-02-09 1990-05-29 Storage Technology Corporation Adaptive data compression apparatus including run length encoding for a tape drive system
US4971407A (en) * 1989-08-09 1990-11-20 Unisys Corp. Two stage run and string data compressor providing doubly compressed output
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
US5247638A (en) * 1990-06-18 1993-09-21 Storage Technology Corporation Apparatus for compressing data in a dynamically mapped virtual data storage subsystem
US5389922A (en) * 1993-04-13 1995-02-14 Hewlett-Packard Company Compression using small dictionaries with applications to network packets
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
GB2301252A (en) * 1995-05-23 1996-11-27 Ibm Run length data compression
US5861827A (en) * 1996-07-24 1999-01-19 Unisys Corporation Data compression and decompression system with immediate dictionary updating interleaved with string search
US6124811A (en) * 1998-07-02 2000-09-26 Intel Corporation Real time algorithms and architectures for coding images compressed by DWT-based techniques
US6137428A (en) * 1999-04-27 2000-10-24 Unisys Corporation Data compression method and apparatus with embedded run-length encoding using mathematical run processing

Also Published As

Publication number Publication date
DE60013414D1 (de) 2004-10-07
EP1159785A1 (en) 2001-12-05
JP2002539663A (ja) 2002-11-19
WO2000054412A1 (en) 2000-09-14
EP1478094A2 (en) 2004-11-17
EP1159785B1 (en) 2004-09-01
US6268811B1 (en) 2001-07-31
JP3653226B2 (ja) 2005-05-25
AU3384500A (en) 2000-09-28
CA2367446A1 (en) 2000-09-14
CA2367446C (en) 2004-09-28
KR20010102525A (ko) 2001-11-15
US6166665A (en) 2000-12-26

Similar Documents

Publication Publication Date Title
KR100332709B1 (ko) 스트링 검색이 포함되어 있는 즉각적인 사전 갱신을 갖춘 데이터
JP2610084B2 (ja) データ伸長方法および装置ならびにデータ圧縮伸長方法および装置
CA2077271C (en) Method and apparatus for compressing data
EP1195010B1 (en) Lzw data compression/decompression apparatus and method with embedded run-length encoding/decoding
EP0903866B1 (en) Method and apparatus for data compression
US6188333B1 (en) LZW data compression apparatus and method using look-ahead mathematical run processing
KR100481204B1 (ko) 데이터 문자의 입력 스트림을 코드의 출력 스트림으로 압축시키기 위한 데이터 압축 방법 및 장치
JP3631144B2 (ja) 数学的ラン処理を使用した埋込み型ランレングス符号化を用いたデータ圧縮方法および装置
JPH0764765A (ja) データ圧縮装置及びデータ復元装置
RU2190295C2 (ru) Система уплотнения и разуплотнения данных с непосредственным обновлением каталога, которое чередуют с поиском строк
CN1656688B (zh) 在压缩之前处理数字数据
GB2311704A (en) Compression of arbitrary data using context modelling and entropy coding
JP3124887B2 (ja) データ圧縮・復号方式
JPH06291677A (ja) データ圧縮装置及びデータ復元装置
US6756923B1 (en) Data compressor utilizing switched input coincidence elements arranged in virtual levels
JPH04265020A (ja) データ圧縮方式
US6653949B1 (en) Data compression apparatus and method utilizing tandem coupled matrices
US6788226B1 (en) Data compressor with string code reassignment utilizing switched input coincidence elements
JPH06178124A (ja) 画像データ圧縮伸長装置
JPH08116271A (ja) データ圧縮方法及びその装置並びにデータ伸長方法及びその装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20080117

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee