KR20160055986A - 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법 - Google Patents

바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법 Download PDF

Info

Publication number
KR20160055986A
KR20160055986A KR1020140155765A KR20140155765A KR20160055986A KR 20160055986 A KR20160055986 A KR 20160055986A KR 1020140155765 A KR1020140155765 A KR 1020140155765A KR 20140155765 A KR20140155765 A KR 20140155765A KR 20160055986 A KR20160055986 A KR 20160055986A
Authority
KR
South Korea
Prior art keywords
binary
cluster
bit
tail
clusters
Prior art date
Application number
KR1020140155765A
Other languages
English (en)
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 김정훈
Priority to KR1020140155765A priority Critical patent/KR20160055986A/ko
Publication of KR20160055986A publication Critical patent/KR20160055986A/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
    • 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/3002Conversion to or from differential modulation
    • 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/3002Conversion to or from differential modulation
    • H03M7/3004Digital delta-sigma modulation

Landscapes

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

Abstract

발명을 실시하기 위한 구체적인 내용에 상술

Description

바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법{DATA COMPRESSION METHOD OF MAPPING BINARY CLUSTERS WITH UNIVERSAL CODES}
유니버설 코드생성 및 데이터 압축분야
유니버설 코드생성 및 데이터 압축분야
발명을 실시하기 위한 구체적인 내용에 상술
발명을 실시하기 위한 구체적인 내용에 상술
발명을 실시하기 위한 구체적인 내용에 상술
이진데이터를 분할하는 방법은 매우 다양한데,
예를들어, 10110100010111011101010 라는 이진데이터에 있어서,
먼저, "1" 에서 "0"으로 또는 "0"에서 "1"로 변환될때마다 분리하는 방법을 생각해보면, 아래와 같이 분할이 될 수 있다.
1 /0/11/0/1/000/1/0/111/0/111/0/1/0/1/0
그런데 만약 이진데이터가 반드시 "1"부터 시작한다고 약속을 한다면,
연속된 1개이상의 "1" 다음에는 반드시 연속된 1개이상의 "0"이 나오는 성질을 이용한다면,
1 /0/11/0/1/000/1/0/111/0/111/0/1/0/1/0 를
1 /1/11/1/1/111/1/1/111/1/111/1/1/1/1/1 로 표현하여도, 짝수번째 분할을 "1"에서 "0"으로 바꾸어 주는 프로토콜만 있다면, 원본데이터로 복구가 가능하다.
상기와 같이, 1 회의 위상변화가 있을때마다 분할할 경우에는,
1 /1/11/1/1/111/1/1/111/1/111/1/1/1/1/1 과 같이 "1"로만 이루어진 바이너리 클러스터로 변환하면서 분할이 가능하다.
원본데이터가 "0"으로 시작하는 경우가 있을수 있는데, 반드시 "1"로 시작하도록 최상위 비트에는 무조건 "1"을 추가하여 압축한뒤, 복호화한 결과에서 최상위 비트의 "1"을 제거하면 되기때문에, 반드시 "1"로 시작한다는 원본데이터의 조건은 만족이 가능하다.
일례로, 940,154 비트의 이진데이터를 상기와 같이 1회의 위상변화가 있을때마다 분할한뒤, 짝수번째 클러스터에 대하여는 "0"을 "1"로 비트변환한 결과로 생성된 클러스터는 아래 표1과 같은 순서로 분할되었다.
참고로 940,154 비트의 이진데이터의 최상위 비트부터 예시적으로 보이면
"100101000010010110000001100000100000101...." 과 같고 상기 서술한 바이너리클러스터 분할 및 변환에 따라 아래 표1과 같이 나타난다.
바이너리 클러스터
1
11
1
1
1
11111
1
11
1
1
11
111111
11
11111
1
11111
1
1
1
111111111111111111111111111111
1
1111111111111111
...
다음으로 이러한 클러스터별 분포를 전체 466,256개의 클러스터가 생성되고 그 분포는 아래 표2와 같다.
바이너리 클러스터 개수
1 233171
11 115854
111 57509
1111 29168
11111 14906
111111 7690
1111111 3729
11111111 1974
111111111 1136
1111111111 510
11111111111 269
111111111111 121
1111111111111 95
11111111111111 33
111111111111111 26
1111111111111111 11
11111111111111111 10
111111111111111111 1
1111111111111111111 8
11111111111111111111 2
111111111111111111111 2
11111111111111111111111 1
111111111111111111111111 1
1111111111111111111111111 5
11111111111111111111111111 2
111111111111111111111111111 1
1111111111111111111111111111 2
11111111111111111111111111111 4
111111111111111111111111111111 9
11111111111111111111111111111111111111 1
11111111111111111111111111111111111111111111111111111111111111 1
11111111111111111111111111111111111111111111111111111111111111111111111111 3
1111111111111111111111111111111111111111111111111111111111111111111111111111 1
총합계 466256
본 발명의 압축의 기본원리는 상기 표2의 아랫부분을 보면, 바이너리 클러스터의 길이가 일정하게 증가하다가 갑자기 불규칙하게 길어지는 부분을 확인할 수 있는데, 이부분을 규칙적인 코드에 대응하게 되면, 압축의 효과가 나타나게 된다. 표3과 같이 바이너리 클러스터 길이가 23 비트인 지점부터 압축코드의 길이가 더 짧아져서 압축의 효과가 나타나게 된다.
아래 표3과 같은 테이블에서 바이너리 클러스터와 압축코드가 매핑된 테이블을 매핑테이블이라고 명명하기로 한다.
압축코드는, 특별한 규칙성을 가지고 있어서, 자동적으로 부호화측과 복호화 측에서 상호 일치된 계산으로 생성이 가능한데,
위상변화가 1인 경우에는 바이너리 클러스터도 모두 "1"로만 구성되도록 분할/변환하였으므로, 압축코드도 길이 1부터 시작하여 길이 N까지 순차적으로 연속된 "1"로만 이루어지도록 아래 표3과 같이 규칙성을 가지고 생성을 하여 매핑을 한다.
바이너리 클러스터 빈도수 바이너리 클러스터 길이 압축코드 압축코드길이 압축코드당절감비트수
1 233171 1 1 1 0
11 115854 2 11 2 0
111 57509 3 111 3 0
1111 29168 4 1111 4 0
11111 14906 5 11111 5 0
111111 7690 6 111111 6 0
1111111 3729 7 1111111 7 0
11111111 1974 8 11111111 8 0
111111111 1136 9 111111111 9 0
1111111111 510 10 1111111111 10 0
11111111111 269 11 11111111111 11 0
111111111111 121 12 111111111111 12 0
1111111111111 95 13 1111111111111 13 0
11111111111111 33 14 11111111111111 14 0
111111111111111 26 15 111111111111111 15 0
1111111111111111 11 16 1111111111111111 16 0
11111111111111111 10 17 11111111111111111 17 0
111111111111111111 1 18 111111111111111111 18 0
1111111111111111111 8 19 1111111111111111111 19 0
11111111111111111111 2 20 11111111111111111111 20 0
111111111111111111111 2 21 111111111111111111111 21 0
11111111111111111111111 1 23 1111111111111111111111 22 -1
111111111111111111111111 1 24 11111111111111111111111 23 -1
1111111111111111111111111 5 25 111111111111111111111111 24 -1
11111111111111111111111111 2 26 1111111111111111111111111 25 -1
111111111111111111111111111 1 27 11111111111111111111111111 26 -1
1111111111111111111111111111 2 28 111111111111111111111111111 27 -1
11111111111111111111111111111 4 29 1111111111111111111111111111 28 -1
111111111111111111111111111111 9 30 11111111111111111111111111111 29 -1
11111111111111111111111111111111111111 1 38 111111111111111111111111111111 30 -8
11111111111111111111111111111111111111111111111111111111111111 1 62 1111111111111111111111111111111 31 -31
11111111111111111111111111111111111111111111111111111111111111111111111111 3 74 11111111111111111111111111111111 32 -42
1111111111111111111111111111111111111111111111111111111111111111111111111111 1 76 111111111111111111111111111111111 33 -43
압축을 위하여는, 상기 표1에 대응되는 각 바이너리 클러스터에 대하여 상기 표3과 같은 매핑테이블을 이용하여 압축코드로 변환한다음,
최종압축결과화일에는, 짝수번째 바이너리 클러스터의 경우에는, 모든 "1"을 "0"으로 변환하여 압축화일을 구성하면, 클러스터 분할이라는 상태특성이 훼손되지 않게 된다.
그리고 복호화를 위한 사전데이터가 추가되어야 하는데, 상기 표3에서 보면, 사전데이터는, 압축코드와 바이너리 클러스터가 불일치하는 지점 즉, 바이너리 클러스터 비트 길이 21 까지는 바이너리 클러스터와 압축코드 모두 일치하고, 바이너리 클러스터 23부터는 불일치하므로, 불일치하는 바이너리 클러스터의 길이 정보 즉 23,24,25,26,27, ...30,38,62,74,76의 정보와 불일치가 시작되는 지점의 압축코드의 길이 즉 22 라는 정보만 저장하면 압축사전이 효율적으로 구성된다.
복호화 측에서는, 압축결과화일로부터, 각각 압축코드 클러스터를 분할하는데, 위상변화가 있는 지점에서 분할이 가능하다 예를들어,
"10011100001111000001111100001111..." 압축결과 화일이었다면,
"1"-"00"-"111"-"0000"-"1111"-"00000"-"11111"-"0000"-"1111"... 과 같이 압축코드를 우선 비트변화가 있는 지점에서 분할을 한다음,
짝수번째의 압축코드의 모든 "0"은 모두 "1"로 변환하면,
"1"-"11"-"111"-"1111"-"1111"-"11111"-"11111"-"1111"-"1111" 과 같이
압축당시의 압축코드 클러스터 구분 상태가 복원된다.
이제 매핑사전을 통해서, 표3과 같이 바이너리 클러스터와 압축코드 배열을 복원할 수 있다.
즉, 압축코드 길이 불일치 시작점이 길이 22라는 정보를 알고있으므로, 길이 1~21까지는 자동적으로 압축코드를 생성하고 바이너리 클러스터 또한 압축코드와 동일하게 생성한다. 그리고, 압축코드길이 22부터는, 불일치 바이너리 클러스터 길이정보 23,24,25,26,...30,38,62,74에 각각 압축코드 22,23,24,25,...33을 대응시키면서 매핑테이블을 표3과 같이 복원한다.
복원한 매핑테이블에 따라 압축코드로부터 바이너리 클러스터를 순차적으로 복구하고, 짝수번째 바이너리 클러스터의 경우는 모든 "1"을 다시 모두 "0"으로 변환한뒤 모든 클러스터를 연결하면, 원본데이터가 완벽히 복구되고, 최상위 비트 "1"은 제거하면 된다.
상기에서 상술한 바가 위상변화 횟수가 1일 경우에의 압축방법이었고, 위상 변화 횟수가 1인 조건은 위상변화가 생길때마다 그때까지 생성중인 바이너리 클러스터의 길이가 1이상인 조건에서 바이너리 클러스터를 구분하라는 조건과 동일한 결과를 얻게 된다.
이제 위상변화가 생길때마다 그때까지 생성중인 바이너리 클러스터 길이가 2이상인 조건을 이용한 클러스터 분할방법 확장 및 압축방법을 설명하고자 한다.
첫번째 예시의 경우에는, 위상변화가 1번 있기만하면 바로 바이너리 클러스터로 분할하는 방법이었다면, 아래 표4를 보듯이, 위상변화의 횟수를 고정할 필요없이, 위상변화가 생길때마다 생성중인 바이너리 클러스터의 길이를 확인하여 특정길이 이상이 되는 경우에는 바이너리 클러스터로 분할하는 방법이고, 특정길이 미만이면, 계속 다음 위상변화가 생길때 다시 길이를 확인하는 방식이다.
예를들어,
1로 시작하는 이진데이터 "1000111000110101011010101" 경우에
최상위 비트로부터 최하위 비트로 이동하면서, 비트의 변화가 있을때마다, 그때까지의 생성중이던 바이너리 클러스터의 길이를 확인하여 특정길이(이 예에서는 2이상일 경우에 바로 분리)에서 바로 분리하는 규칙을 적용하여 바이너리 클러스터를 생성하면 아래와 같다.
최상위 비트로부터 최하위 비트 방향으로 이동하면서, 비트변화가 없을경우에는 그대로 계속 이어서 비트를 붙이고, 비트변화가 생길때마다, 그때까지 성장시킨 바이너리 클러스터의 길이를 확인하는 방식인데,
최상위 비트에서 "1" 이 나오고, 2번비트에서 "0"이므로 비트 변화가 있었는 데, 그때까지 생성중이던 바이너리 클러스터 "1"만으로는 길이가 2 비트가 되지 않으므로, 계속 바이너리 클러스터를 성장시킨다. 2번,3번,4 번비트 모두 "0"이므로 비트변화가 없으므로 계속 바이너리 클러스터에 이어붙이고 , 5번비트에서 "1"이되므로, 비트변화가 생기고 이때까지 생성된 바이너리 클러스터가 "1000" 이므로, 길이는 4비트로서 2비트 이상이다. 따라서 "1000"을 바이너리 클러스터로 하여 분할한다.
다음으로 5,6,7번 비트는 모두 "1"이고 다음 8번비트에서 "0"이므로 이진수 비트의 변화가 생기므로 클러스터 분할여부를 결정하는데, 7번비트 까지 성장시킨 바이너리 클러스터가 "111" 이고 마침 길이가 2이상이므로, "111"을 바로 바이너리 클러스터로 하여 분할한다.
다음 8,9,10 번비트는 "0"이고, 11번비트가 "1"이므로 이진수의 비트변화가 생기므로, 10번비트까지 읽어서 성장시킨 바이너리 클러스터가 "000" 이다. 길이는 2이상이므로, 분할을 하되, 본 발명에서의 분할되는 바이너리 클러스터는 반드시 "1"로 시작해야 하기 때문에, "0"으로 시작하는 바이너리 클러스터의 경우에는, 바이너리 클러스터에 대해 비트 반전을 진행하면 "111" 이것을 바이너리 클러스터로 하여 분할한다.
상기와 같은 이러한 분할 방식에 따라
"1000111000110101011010101" 을 분할하면, 아래와 같고,
"1000"-"111"-"000"-"11"-"01"-"01"-"011"-"01"-"01"-01"
"0"으로 시작하는 바이너리 클러스터는 비트반전을 실시하여 분할하므로, 아래와 같이 된다.
"1000"-"111"-"111"-"11"-"10"-"10"-"100"-"10"-"10"-10"
이와 같은 방식을 좀더 대규모의 데이터에 적용하여 보면, 645,306 비트의 이진데이터에 있어서, 상기방식에 따라 바이너리 클러스터의 분포를 집계하면 표4와 같다. 바이너리 클러스터별로 해당 빈도수가 확인되고, 213,483개의 바이너리 클러스터가 본 기준에 따라 분류가 된다.
이렇게 분리된 바이너리 클러스터는 "1" 다음에 연속된 1개이상의 "0" 이 있는 형태 "10" type 와 연속된 2개이상의"1"로만 구성된 "11" type 것 두가지로 크게 분류가 가능하다.
압축을 위한 유니버설 코드도 "11" type 과 "10" type 2가지를 바이너리 클러스터의 종류에 따라 자동적으로 생성을 한다. "10" type 의 유니버설 코드는, 최초에 "10"으로 부터 시작하여, 다음 순번에서는 "0"을 추가로 이어붙이고, 계속적으로 그 과정을 반복하면 되고, "11" type의 유니버설 코드의 경우에도, 최초에 "11"부터 시작하여 다은순번에서는 "1"을 추가로 이어붙이는 과정을 반복하면 된다. 생성된 유니버설 코드를 바이너리 클러스터의 길이 오름차순의 순서대로 표5와 같이 매핑을 진행한다. 표를 보면 알수있듯이, "10" type 바이너리 클러스터의 경우에는, 길이 21까지는 유니버설 코드와 동일하므로, 최초로 동일하지 않는 유니버설 코드의 길이 22 와 이에 대응하는 길이 25, 28,30, 33, ... , 78인 바이너리 클러스터의 길이값만 매핑사전에 저장하고,
한편, "11" type 바이너리 클러스터의 경우에는, 길이 16까지는 유니버설 코드와 동일하므로, 최초로 동일하지 않는 유니버설 코드의 길이 17과, 이에 대응하는 19,20,23, ... , 76, 78 비트 길이의 바이너리 클러스터의 길이정보값만 매핑사전에 저장하면 된다.
위상변화시마다 클러스터 생성된 길이가 2이상인 경우에 분리하는 조건의 경우, 바이너리 클러스터는 "10"type과 "11" type 두종류가 생성되고 , 매핑사전도 두종류가 생성됨을 알 수 있다.
각 바이너리 클러스터에 대응하여 유니버설 코드를 1:1로 매핑한 매핑테이블에 따라 실제 바이너리 클러스터를 유니버설 코드로 변환하여 연속적으로 최종압축화일에 생성하도록 한다.
바이너리 클러스터 빈도수 바이너리 클러스터 길이 유니버설 코드 종류 유니버설코드 클러스터당 압축이득 전체 압축효과
10 53124 2 10 2 0 0
100 26433 3 100 3 0 0
1000 13565 4 1000 4 0 0
10000 6682 5 10000 5 0 0
100000 3510 6 100000 6 0 0
1000000 1680 7 1000000 7 0 0
10000000 916 8 10000000 8 0 0
100000000 447 9 100000000 9 0 0
1000000000 221 10 1000000000 10 0 0
10000000000 112 11 10000000000 11 0 0
100000000000 67 12 100000000000 12 0 0
1000000000000 32 13 1000000000000 13 0 0
10000000000000 22 14 10000000000000 14 0 0
100000000000000 11 15 100000000000000 15 0 0
1000000000000000 2 16 1000000000000000 16 0 0
10000000000000000 5 17 10000000000000000 17 0 0
100000000000000000 3 18 100000000000000000 18 0 0
1000000000000000000 1 19 1000000000000000000 19 0 0
10000000000000000000 3 20 10000000000000000000 20 0 0
100000000000000000000 3 21 100000000000000000000 21 0 0
1000000000000000000000000 1 25 1000000000000000000000 22 -3 -3
1000000000000000000000000000 1 28 10000000000000000000000 23 -5 -5
100000000000000000000000000000 7 30 100000000000000000000000 24 -6 -42
100000000000000000000000000000000 1 33 1000000000000000000000000 25 -8 -8
10000000000000000000000000000000000000000000000000000000000000 1 62 10000000000000000000000000 26 -36 -36
100000000000000000000000000000000000000000000000000000000000000000000000000000 1 78 100000000000000000000000000 27 -51 -51
11 52998 2 11 2 0 0
111 26540 3 111 3 0 0
1111 13411 4 1111 4 0 0
11111 6733 5 11111 5 0 0
111111 3464 6 111111 6 0 0
1111111 1697 7 1111111 7 0 0
11111111 897 8 11111111 8 0 0
111111111 430 9 111111111 9 0 0
1111111111 224 10 1111111111 10 0 0
11111111111 100 11 11111111111 11 0 0
111111111111 59 12 111111111111 12 0 0
1111111111111 33 13 1111111111111 13 0 0
11111111111111 17 14 11111111111111 14 0 0
111111111111111 7 15 111111111111111 15 0 0
1111111111111111 7 16 1111111111111111 16 0 0
1111111111111111111 4 19 11111111111111111 17 -2 -8
11111111111111111111 1 20 111111111111111111 18 -2 -2
11111111111111111111111 1 23 1111111111111111111 19 -4 -4
111111111111111111111111 2 24 11111111111111111111 20 -4 -8
11111111111111111111111111 1 26 111111111111111111111 21 -5 -5
111111111111111111111111111 2 27 1111111111111111111111 22 -5 -10
1111111111111111111111111111 1 28 11111111111111111111111 23 -5 -5
111111111111111111111111111111111111111 1 39 111111111111111111111111 24 -15 -15
1111111111111111111111111111111111111111111111111111111111111111111111111111 1 76 1111111111111111111111111 25 -51 -51
111111111111111111111111111111111111111111111111111111111111111111111111111111 1 78 11111111111111111111111111 26 -52 -52
복호화를 할때에는,
먼저 표4와 같은 매핑테이블을 매핑사전에 의해서 복호화장치에서 복구를 한다. 매핑사전이 2종류이므로, 먼저 "10" type과 "11" type에 대해서 매핑테이블을 복원하는데, 바이너리 클러스터와 유니버설 클러스터가 동일하다고 부호화시에 저장한 지점까지는 자동으로 바이너리 클러스터와 유니버설 코드를 복구하고 매핑한다음, 동일하지 않는 부분부터는 각각 저장된 바이너리 클러스터의 비트길이 정보에 따라 바이너리 클러스터를 복원한다음, 대응하는 유니버설 코드를 동일한 지점이후부터 규칙적으로 자동생성하여 매핑하면 표4와 같은 매핑테이블이 복원될 것이다.
그리고, 이렇게 구성된 매핑테이블에 따라 최종압축화일에 대하여 유니버설 코드로부터 바이너리 클러스터를 복원하기 위하여 먼저,
부호화에서 원본이진데이터를 바이너리 클러스터와 나누었던 방식과 동일한 조건의 알고리 즘을 최종압축화일에 대하여 적용을 한다.
즉, 부호화에서 원본이진데이터에 대하여, 비트변화가 있을때마다 그때까지 생성된 바이너리 클러스터의 길이가 2이상인 경우 바이너리 클러스터로 분할하였듯이, 복호화에서는, 먼저 최종압축데이터에 대하여 비트변화가 있을때마다 그때까지 생성된 바이너리 클러스터의 길이가 2이상인 경우 바이너리 클러스터(=복호화에서는 유니버설 코드)로 분할을 하여, 유니버설 코드가 순차적으로 분리되도록 하고,
이렇게 분리된 각 유니버설 코드를 매핑사전을 통해 표4의 바이너리 클러스터-유니버설 코드의 관계를 복호화장치에서 복구한다음, 최종압축데이터로부터 분리된 각 유니버설 코드를 바이너리 클러스터로 재환원한다음, 바이너리 클러스터의 순서대로 순차적으로 이어붙이는 과정을 진행한다.
재환원된 바이너리 클러스터의 경우에 순차적으로 이어붙이는 과정에서,
원본데이터를 포함한 모든 1로 시작하는 이진데이터의 경우는 1개이상의 연속된 "1"로시작하고, 다음에 1개이상의 연속된 "0"으로 다시 다음에 처음의 과정을 반복하는 구조이다. 따라서, 재환원된 바이너리 클러스터가 예를들어,
"100" - "111" - "111" - "1000"이라고 한다면, 이를 이어붙여서 최종이진데이터를 만들때, 첫번째 두번째 바이너리 클러스터의 경우에는, 두번째 바이너리 클러스터에 대하여 비트 반전이 없이도 "100111" 이 되어, 상기 요건을 만족하게 된다. 그런데 세번째 바이너리 클러스터를 붙이게 될 경우 다시 직전에 "1"로 끝났기 때문에 이번에는 "0"으로 시작하는 이진수가 나와야 하는데, 다시 "111"을 붙이게 되면, 유일복호성의 원칙과 각 클러스터간의 구분은 기본적으로 비트변화가 있어야 한다는 조건을 만족시키지 못하므로, 이러한 경우에 세번째 클러스터는 비트반전을 시행하여 "111" 을 "000"으로 변환한다음, 원본이진데이터로 하여 붙여냐간다. 즉 아래의 경우
"100111"- "111" 는
"100111"-"000" 으로 비트반전한다음, 원본이진데이터로서 이어 붙여나가면 "100111000" 으로 복구가 되는 과정을 계속적으로 진행한다.
상기까지, 원본이진데이터의 비트변화가 있을때마다 그때까지 성장한 바이너리 클러스터의 길이 조건이 1이상일때,2이상일때의 바이너리 클러스터의 분할방법, 유니버설 코드의 생성 및 매핑테이블 구성방법, 매핑사전생성방법, 최종압축결과데이터 생성방법, 복호화방법으로서, 매핑사전을 통해 매핑테이블을 복원하는 방법, 최종압축결과데이터로부터 각 유니버설 코드를 분리하는 방법, 유니버설 코드로부터 바이너리 클러스터를 환원한다음, 원본데이터로 다시 이어붙이는 방법을 설명하였다.
상기 과정을 도식화하면 아래와 같다.
Figure pat00001

이제 본 발명에서 가장 중요한 개념인 유니버설 코드 생성에 있어서, 새로운 방식을 설명하고자 한다.
바이너리 클러스터 구분은 상기에서 설명한 바와 같이 위상변화가 생길때마다 하되, 그때까지 성장한 바이너리 클러스터의 길이가 2이상이 되면 분리하는 조건을 그대로 사용하여 분리한 다음, 분리된 바이너리 클러스터가 "0"으로 시작하는 경우 해당 바이너리 클러스터의 비트를 반전하여 변환하는 과정을 시행하여 원본이진데이터를 분리한 다음, 바이너리 클러스터별로 빈도수 내림차순 및 길이 내림차순이라는 두가지 조건으로 혹은 이 두조건중에 한가지 조건으로 정렬을 시행한다. 본 실시례에서는 보다 효율이 높은 빈도수 내림차순 및 길이 내림차순이라는 두가지 조건으로 정렬하였다.
예를들어, 아래와 같은 377,450 비트의 "1"로 시작하는 이진데이터에 있어서(이때 데이터가 "1"부터 시작하지 않는다면, 강제적으로 "1"을 최상위 비트앞에 덧붙이고, 압축한다음, 압축해제시 원본데이터 복구후 역으로 강제적으로 최상위 비트의 "1"을 제거하면 된다)
1001010000010010110000001100000100000101000000000000000110000000000000100000000000000000000000000000100001000000000011000101011110111010001100100101111000000000100000000000000000101000110000111100000000000000000001001100000000110110010000000..........
상기 데이터를 위의 조건대로 바이너리 클러스터로 분할하면 아래표6과 같다.
바이너리 클러스터
100
10
100000
100
10
11
111111
11
11111
100000
10
1000000000000000
11
1111111111111
100000000000000000000000000000
10000
10000000000
11
111
10
10
1111
1000
10
111
11
11
100
10
1111
111111111
100000000000000000
10
1000
11
1111
1111
1111111111111111111
100
....
이제 표6과 같은 바이너리 클러스터를 종류를 모두 분석하여 각 종류별로의 출현빈도 내림차순 및 바이너리 클러스터의 길이 내림차순으로 정렬하면 표7과 같다.
바이너리 클러스터 출현빈도 길이(비트수)
11 28826 2
10 27484 2
111 13640 3
100 13473 3
1111 7321 4
1000 6439 4
11111 3425 5
10000 3329 5
111111 1792 6
100000 1788 6
1111111 996 7
1000000 894 7
11111111 486 8
10000000 380 8
111111111 307 9
100000000 279 9
1000000000 159 10
1000000000000000 152 16
100000000000000000000000000000 148 30
1111111111111 146 13
11111111111 122 11
1111111111 118 10
1111111111111111 93 16
10000000000 84 11
1111111111111111111111111 48 25
10000000000000000000 47 20
1000000000000000000 44 19
100000000000 39 12
111111111111 37 12
111111111111111111111111111 34 27
111111111111111111111111 32 24
1111111111111111111 32 19
11111111111111111 31 17
11111111111111111111111111 30 26
100000000000000000 28 18
100000000000000000000 21 21
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 20 104
1000000000000 18 13
100000000000000000000000000 13 27
111111111111111111 13 18
10000000000000000 12 17
1111111111111111111111111111 11 28
10000000000000 11 14
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 10 107
1000000000000000000000000 9 25
11111111111111111111111111111 8 29
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 7 106
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 7 105
100000000000000000000000000000000 7 33
1000000000000000000000000000 7 28
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6 106
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 5 108
1000000000000000000000 5 22
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4 107
1000000000000000000000000000000 4 31
1111111111111111111111111111111 4 31
11111111111111 4 14
10000000…………. 3 2049
100000000000000 3 15
111111111111111 3 15
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2 111
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 105
10000000000000000000000000000000 2 32
11111111111111111111111111111111 2 32
10000000000000000000000000 2 26
1111111111111111111111 2 22
11111111111111111111 2 20
10000000…………. 1 3722
10000000………….. 1 3634
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1 137
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 111
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 110
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 109
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1 109
100000000000000000000000000000000000 1 36
10000000000000000000000000000000000 1 35
1111111111111111111111111111111111 1 34
111111111111111111111111111111111 1 33
100000000000000000000000 1 24
이제 상기 표7과 같은 분포표에, 유니버설 코드를 순차적으로 매핑을 실시하는데, 본 발명의 핵심적인 요소인 유니버설 코드를 상기에서 상술한 방법과 달리,
아래의 표14와 같은 유니버설 코드를 생성하게 된다. 유니버설 코드이긴 하지만, 헤더부와 테일부가 하나로 연결된 것은 아니며, 헤더부와 테일부를 확인가능하면 곧바로 1:1로 매핑가능한 바이너리 클러스터를 알수있다는 점이 차이점이다.
참고로 표14의 유니버설 코드는 2개의 부문으로 나뉜다.헤더부와 테일부이며, 헤더부는 유일복호성을 가지도록 해독가능하고, 헤더부가 "110"일 경우, 별도의 저장공간에 저장된 테일부를 순차적으로 읽어와서 유니버설 코드의 헤더부와 테일부를 확인할 수 있다.
헤더부 테일부
00
01
100
101
1110
1111
110 10
110 100
110 101
110 1000
110 1001
110 1011
110 10000
110 10001
110 10011
110 10111
110 100000
110 100001
110 100011
110 100111
110 101111
110 1000000
110 1000001
110 1000011
110 1000111
110 1001111
110 1011111
... ...
상기 표 14에서 알수 있듯이,
순번 1번에서 순번 6번까지는
"00", "01", "100", "101", "1110", "1111" 을 통일적으로 적용하고, 테일부는 존재하지 않는다.
7번순번부터는 헤더부는 "110"으로 통일되고, 대응하는 테일부는, 순번대로
"10"으로 시작하여, "100", "101", "1000", "1001", "1011", "10000",...과 같은 테일 클러스터라고 하는 형태인데 이를 좀 더 일반화 시키면,
테일 클러스터의 각각은 "10", "1011(10/11)","1000111(10/00/111)" 등과 같이 각 메인 클러스터의 최하위 비트로부터 연속된 적어도 0개 이상의 "1", 최상위비트로부터 배치된 "10", 및 상기 연속된 적어도 0개 이상의 "1"과 상기 최상위비트로부터 배치된 "10" 사이에 배치되는 적어도 0개 이상의 연속된 "0"을 포함하여 구성된다. 이러한 조건을 만족하는 테일 클러스터 중 비트길이가 가장 작은 이진수는 "10"이 되며, 그 이후로 100, 101, 1000, 1001,1011, 10000, 10001, 10011, 10111, 100000...와 같이 순차적으로 나열할 수 있다. 여기서 알 수 있는 바와 같이, 테일 클러스터는 맨 앞에 "10"을 가지고 있어야 하 며, 이후 비트자릿수를 늘려 가면서 최하위비트로부터 "1"의 갯수를 늘려가되 최상위비트 쪽에 "10"은 반드시 남아 있어야 하고 "101111"과 같이 "10" 다음에 더 이상 "0"이 존재하지 않게 되면 비트자릿수를 한자리 늘려서 "1000000"로 넘어가게된다. 코드를 비트 길이가 작은 것부터 순차적으로 나열하면 테일부를 자동적으로 생성할 수 있다.
중요한 점과 헤더부와 테일부는 별도의 분리된 저장공간 또는 기억공간에 위치하고 있다.
표14와 같이 생성된 유니버설 코드들은 헤더부의 경우 한 공간에 연속되어 있어도 유일복호성을 가지면서 분리가 가능한데, 바로 유니버설 코드들의 연속된 최상위 비트에서 최하위 비트로 이동하면서, "0"으로 시작하는지, "1"로 시작하는지를 검토하면서 해독해나간다. 예를들어,
"00"-"01"-"100"-"1110"-"1111"-"101" 이라는 표14와 같은 유니버설 코드에 있어서, 후술하겠으나 압축을 수행하면 바이너리 클러스터가 각 1:1로 대응하여 "000110011101111101" 과 같이 실제로는 연속되어 있을것인데,
최상위 비트에서 부터 최하위 비트방향으로 방향성을 가지고 1비트를 읽는다. 1번비트가 "0"이므로, "00", "01" 둘중에 하나이므로, 다음 1비트를 더 읽고 분리한다.
즉 아래와 같이 된다.
"00" - "0110011101111101"
이제 다음으로, 나머지 유니버설코드 덩어리에서, 최상위 1비트를 읽으면 역시 "0"이므로, 다시 1비트를 추가로 읽어서 분리하면, 아래와 같다.
"00"-"01"- "10011101111101"
다음으로, 남은 유니버설 코드 덩어리에서 최상위 1비트를 읽으면, "1"인데, 다음 1비트를 더 읽어서 살펴보면 이때에는 "10"인지 "11" 인지에 따라 다르다.
"10"이라면, 추가로 1비트를 더 읽어서 분리를 하면 되며,
"11"이라면, 추가로 1비트를 더 읽어서 "1" 일 경우는 다시 1 비트를 더 읽어서 분리하고, "0"일경우에는, "0"을 포함하여 분리하면 된다.
즉, "00"-"01"- "10011101111101" 에서,
최상위 비트가 "1"이므로, 다음 1비트를 더 읽어서 보면, "10" 이 된다.
따라서. 상기 시나리오에 따라 다시 1비트를 더 읽어서 총 3비트를 읽은 결과물인 "100"을 분리한다.
"00"-"01"- "100"-"11101111101"
다음으로, 남은 유니버설 코드 덩어리에서 최상위 1비트를 읽으면, "1"이므로, 다시 다음 1비트를 더 읽으면, "11" 이다.
따라서 추가로 1비트를 더 읽은 결과 "1"이 이다. 따라서 추가로 1비트를 더 읽은 4비트의 "1110"을 분리한다.
"00"-"01"- "100"-"1110"-"1111101"
다음으로 남은 유니버설 코드 덩어리에서 최상위 1비트를 읽으면 "1"이르모, 다시 다음 1비트를 더 읽으면, "11"이다.
따라서 추가로 1비트를 더 읽은 결과 "1"이 나왔는데 이 경우 추가로 1비트를 더 읽은 4비트를 분리하면, "1111" 이다.
"00"-"01"- "100"-"1110"-"1111"-101"
이제 마지막 유니버설 코드 덩어리인 "101"의 최상위 비트 1비트를 읽으니 "1"이므로 다음 1비트를 읽어보니 "0"이므로 "10" 이 된다. "10"일 경우에는 추가로 1비트만 더 읽으면 되므로, "101" 이렇게 3비트가 자연스럽게 마지막 유니버설 코드로 분리된다. 상기에 보인바와 같이 표14와 같은 방식으로 헤더부의 경우 최상위에서 최하위비트로 스캔하면서 각 비트값에 따라 분리시나리오를 달리하면 유일복호성을 가지면서 압축화일내의 연속된 유니버설 코드를 분리할 수 있다.
분리된 헤더부가 "110" 일 경우에는, 순차적으로 스택 또는 큐등 First IN First OUT구조 또는 LAST in Last out 구조의 자료구조에 저장된 테일 클러스터를 하나씩 읽어온다.
테일클러스터의 연속된 이진수 배열은,
"10100010110101010111..." 등과 같이 "10"으로 반드시 시작하므로, 최상위 비트 또는 최하위 비트에서 반대방향으로 처음으로 "10"을 만날때 마다 분리하면서 읽어온뒤, 헤더부와 테일부를 보고 매핑테이블에서 바이너리 클러스터를 역산할 수 있다.
이제 다시 표7로 돌아가서,
표7과 같이 분석된 바이너리 클러스터 분포표에 순차적으로 유니버설 코드를 매핑하여 매핑테이블을 표8과 같이 산출하여 1:1로 매핑된 바이너리 클러스터에 대하여 압축을 수행할 수 있으므로, 미리 압축효율을 미리 계산해볼 수 있다. 표8에서 압축효과는, 1:1로 바이너리 클러스터와 유니버설 코드가 매핑될때, 각 (유니버설 코드 길이-바이너리클러스터길이) * 바이너리 클러스터 출현빈도를 통해 미리 계산을 할 수가 있음을 이용하였다.
순번 바이너리 클러스터 출현빈도 길이(비트수) 헤더부테일부 유니버설코드길이
1 11 28826 2 00 2 0
2 10 27484 2 01 2 0
3 111 13640 3 100 3 0
4 100 13473 3 101 3 0
5 1111 7321 4 1110 4 0
6 1000 6439 4 1111 4 0
7 11111 3425 5 110 10 5 0
8 10000 3329 5 110 100 6 3329
9 111111 1792 6 110 101 6 0
10 100000 1788 6 110 1000 7 1788
11 1111111 996 7 110 1001 7 0
12 1000000 894 7 110 1011 7 0
13 11111111 486 8 110 10000 8 0
14 10000000 380 8 110 10001 8 0
15 111111111 307 9 110 10011 8 -307
16 100000000 279 9 110 10111 8 -279
17 1000000000 159 10 110 100000 9 -159
18 1000000000000000 152 16 110 100001 9 -1064
19 100000000000000000000000000000 148 30 110 100011 9 -3108
20 1111111111111 146 13 110 100111 9 -584
21 11111111111 122 11 110 101111 9 -244
22 1111111111 118 10 110 1000000 10 0
23 1111111111111111 93 16 110 1000001 10 -558
24 10000000000 84 11 110 1000011 10 -84
25 1111111111111111111111111 48 25 110 1000111 10 -720
26 10000000000000000000 47 20 110 1001111 10 -470
27 1000000000000000000 44 19 110 1011111 10 -396
28 100000000000 39 12 110 …….. 11 -39
29 111111111111 37 12 110 …….. 11 -37
30 111111111111111111111111111 34 27 110 …….. 11 -544
31 111111111111111111111111 32 24 110 …….. 11 -416
32 1111111111111111111 32 19 110 …….. 11 -256
33 11111111111111111 31 17 110 …….. 11 -186
34 11111111111111111111111111 30 26 110 …….. 11 -450
35 100000000000000000 28 18 110 …….. 12 -168
36 100000000000000000000 21 21 110 …….. 12 -189
37 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 20 104 110 …….. 12 -1840
38 1000000000000 18 13 110 …….. 12 -18
39 100000000000000000000000000 13 27 110 …….. 12 -195
40 111111111111111111 13 18 110 …….. 12 -78
41 10000000000000000 12 17 110 …….. 12 -60
42 1111111111111111111111111111 11 28 110 …….. 12 -176
43 10000000000000 11 14 110 …….. 13 -11
44 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 10 107 110 …….. 13 -940
45 1000000000000000000000000 9 25 110 …….. 13 -108
46 11111111111111111111111111111 8 29 110 …….. 13 -128
47 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 7 106 110 …….. 13 -651
48 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 7 105 110 …….. 13 -644
49 100000000000000000000000000000000 7 33 110 …….. 13 -140
50 1000000000000000000000000000 7 28 110 …….. 13 -105
51 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 6 106 110 …….. 13 -558
52 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 5 108 110 …….. 14 -470
53 1000000000000000000000 5 22 110 …….. 14 -40
54 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4 107 110 …….. 14 -372
55 1000000000000000000000000000000 4 31 110 …….. 14 -68
56 1111111111111111111111111111111 4 31 110 …….. 14 -68
57 11111111111111 4 14 110 …….. 14 0
58 1000… 3 2049 110 …….. 14 -6105
59 100000000000000 3 15 110 …….. 14 -3
60 111111111111111 3 15 110 …….. 14 -3
61 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2 111 110 …….. 14 -194
62 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2 105 110 …….. 15 -180
63 10000000000000000000000000000000 2 32 110 …….. 15 -34
64 11111111111111111111111111111111 2 32 110 …….. 15 -34
65 10000000000000000000000000 2 26 110 …….. 15 -22
66 1111111111111111111111 2 22 110 …….. 15 -14
67 11111111111111111111 2 20 110 …….. 15 -10
68 1000…. 1 3722 110 …….. 15 -3707
69 1000…. 1 3634 110 …….. 15 -3619
70 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1 137 110 …….. 15 -122
71 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 111 110 …….. 15 -96
72 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 110 110 …….. 15 -95
73 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 109 110 …….. 16 -93
74 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1 109 110 …….. 16 -93
75 100000000000000000000000000000000000 1 36 110 …….. 16 -20
76 10000000000000000000000000000000000 1 35 110 …….. 16 -19
77 1111111111111111111111111111111111 1 34 110 …….. 16 -18
78 111111111111111111111111111111111 1 33 110 …….. 16 -17
79 100000000000000000000000 1 24 110 …….. 16 -8
총79번 순번까지의 바이너리 클러스터 종류에 유니버설 코드가 1:1로 대응하여, 압축효과가 본 실시례에서는 26,317 비트 나타났다.
다음으로 , 표8과 같은 매핑테이블을 이용하여, 표6과 같은 바이너리 클러스터에 대하여 순차적으로 유니버설 코드로 매핑하여 압축한다. 압축결과는 별도의 유니버설 코드에 대한 반전이나 처리없이 그대로 이어붙여도 상기 서술한 순차적인 스캐닝에 따른 시나리오에 따라 분리하는 과정을 통해 유니버설 코드의 유일복호성이 유지될 수 있는데, 유니버설 코드는 헤더부와 테일부로 분리된다는 점이 특징적이다. 각 헤더부와 테일부에서는 유일복호성이 유지되면서 저장되나, 각각은 테일부와 헤더부를 하나로 묶은 코드를 만들라는 의미는 아니다.
그리고 매핑사전을 생성하여 최종 압축결과화일에 부가해야 하는데,
매핑사전은 복호화시에 표8과 같은 매핑테이블중에 표9과 같은 바이너리 클러스터와 유니버설 코드와의 매핑관계를 기본적으로 요약한 자료이다. 먼저 표9와 같은 정보를 요약하여 매핑사전을 만들기 위해, 바이너리 클러스터는 상술한데로 10type과 11type 두가지로 구성된다. 따라서, 본 실시례에서 제1순번 부터 제79순번까지 10type인지 11type인지를 구분하는 1비트짜리의 구분값을 79비트 생성하여 저장하고, "101010...." 과 같은 79비트의 1비트 값들은 바이너리 클러스터가 순번별로 11type이었는지, 10 type이었는지를 나타내는 심볼이 된다. 본 발명에서는 이를 바이너리 클러스터 타입데이터라고 명명하기로 한다.
순번 바이너리 클러스터
1 11
2 10
3 111
4 100
5 1111
6 1000
7 11111
8 10000
9 111111
10 100000
11 1111111
12 1000000
13 11111111
14 10000000
15 111111111
16 100000000
17 1000000000
18 1000000000000000
19 100000000000000000000000000000
20 1111111111111
21 11111111111
22 1111111111
23 1111111111111111
24 10000000000
25 1111111111111111111111111
26 10000000000000000000
27 1000000000000000000
28 100000000000
29 111111111111
30 111111111111111111111111111
31 111111111111111111111111
32 1111111111111111111
33 11111111111111111
34 11111111111111111111111111
35 100000000000000000
36 100000000000000000000
37 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
38 1000000000000
39 100000000000000000000000000
40 111111111111111111
41 10000000000000000
42 1111111111111111111111111111
43 10000000000000
44 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
45 1000000000000000000000000
46 11111111111111111111111111111
47 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
48 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
49 100000000000000000000000000000000
50 1000000000000000000000000000
51 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
52 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
53 1000000000000000000000
54 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
55 1000000000000000000000000000000
56 1111111111111111111111111111111
57 11111111111111
58 10000000………….
59 100000000000000
60 111111111111111
61 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
62 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
63 10000000000000000000000000000000
64 11111111111111111111111111111111
65 10000000000000000000000000
66 1111111111111111111111
67 11111111111111111111
68 10000000………….
69 10000000…………..
70 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
71 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
72 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
73 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
74 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
75 100000000000000000000000000000000000
76 10000000000000000000000000000000000
77 1111111111111111111111111111111111
78 111111111111111111111111111111111
79 100000000000000000000000
다음으로 상기 표9의 바이너리 클러스터의 각 순번 각각의 길이는 표10과 같은 값이다.
바이너리 클러스터길이
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
16
30
13
11
10
16
11
25
20
19
12
12
27
24
19
17
26
18
21
104
13
27
18
17
28
14
107
25
29
106
105
33
28
106
108
22
107
31
31
14
13
15
15
111
105
32
32
26
22
20
13
14
137
111
110
109
109
36
35
34
33
24
표10 의 값은 기존의 공지알고리즘인 허프만이나 LZE등 다양한 압축알고리즘으로 추가적으로 부호화하여 매핑사전에 저장하여도 무방하다.
상기 두가지 정보만 매핑사전에 저장하여 두면,복호화에서는 표 14와 같은 유니버설 코드는 자동적으로 생성하여, 상기 두가지 정보로부터 자동적으로 생성된 바이너리 클러스터에 1:1로 순번대로 매핑함으로써 매핑테이블을 복구하여 압축해제에 사용할 수 있다.
한편, 매핑사전에 속해있는 바이너리 클러스터 심볼타입 데이터 79비트의 값을 순차적으로 읽어서, "0"일 경우 10 type의 바이너리 클러스터가 있음을 알수 있고, 이에 대응하여 1:1로 해당 순번에 대하여 매핑사전에 부호화되어있는 표10의 해당 순번의 바이너리 클러스터의 길이값을 이용하여, "1"로 시작하고 연속된 1개이상의 "0"이 이어진 표10의 해당순번의 값을 길이로 갖는 바이너리 클러스터를 생성하면 되고, "1"일경우 11type의 바이너리 클러스터이므로, "1"로만 이루어진 표10의 해당 순번의 값을 길이로 갖는 바이너리 클러스터를 생성하여 1:1로 자동생성된 유니버설 코드와 매핑되어 복호화를 위한 매핑테이블이 생성된다. 그 결과는 다음 표 11과 같이 생성된다.
순번 바이너리 클러스터 헤더부 테일부
1 11 00
2 10 01
3 111 100
4 100 101
5 1111 1110
6 1000 1111
7 11111 110 10
8 10000 110 100
9 111111 110 101
10 100000 110 1000
11 1111111 110 1001
12 1000000 110 1011
13 11111111 110 10000
14 10000000 110 10001
15 111111111 110 10011
16 100000000 110 10111
17 1000000000 110 100000
18 1000000000000000 110 100001
19 100000000000000000000000000000 110 100011
20 1111111111111 110 100111
21 11111111111 110 101111
22 1111111111 110 1000000
23 1111111111111111 110 1000001
24 10000000000 110 1000011
25 1111111111111111111111111 110 1000111
26 10000000000000000000 110 1001111
27 1000000000000000000 110 1011111
28 100000000000 110 ……..
29 111111111111 110 ……..
30 111111111111111111111111111 110 ……..
31 111111111111111111111111 110 ……..
32 1111111111111111111 110 ……..
33 11111111111111111 110 ……..
34 11111111111111111111111111 110 ……..
35 100000000000000000 110 ……..
36 100000000000000000000 110 ……..
37 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
38 1000000000000 110 ……..
39 100000000000000000000000000 110 ……..
40 111111111111111111 110 ……..
41 10000000000000000 110 ……..
42 1111111111111111111111111111 110 ……..
43 10000000000000 110 ……..
44 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
45 1000000000000000000000000 110 ……..
46 11111111111111111111111111111 110 ……..
47 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
48 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
49 100000000000000000000000000000000 110 ……..
50 1000000000000000000000000000 110 ……..
51 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
52 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
53 1000000000000000000000 110 ……..
54 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
55 1000000000000000000000000000000 110 ……..
56 1111111111111111111111111111111 110 ……..
57 11111111111111 110 ……..
58 1000… 110 ……..
59 100000000000000 110 ……..
60 111111111111111 110 ……..
61 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
62 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
63 10000000000000000000000000000000 110 ……..
64 11111111111111111111111111111111 110 ……..
65 10000000000000000000000000 110 ……..
66 1111111111111111111111 110 ……..
67 11111111111111111111 110 ……..
68 1000…. 110 ……..
69 1000…. 110 ……..
70 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
71 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
72 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
73 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 110 ……..
74 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 110 ……..
75 100000000000000000000000000000000000 110 ……..
76 10000000000000000000000000000000000 110 ……..
77 1111111111111111111111111111111111 110 ……..
78 111111111111111111111111111111111 110 ……..
79 100000000000000000000000 110 ……..
매핑사전의 상기 2가지 정보로 상기 표11과 같은 매핑테이블이 복호화기에서 복호화된다.
이 과정을 아래 그림에 보였다.
Figure pat00002

한편, 상기 표11과 같이 생성된 매핑테이블을 복호화 장치에서 가지고 있고, 압축화일내의 두가지로 물리적으로 구분되어 저장되어 있는 유니버설 코드의 헤더부 정보와 테일부 정보를 각각 순차적으로 읽어서, 상술한 유니버설 코드 해독방법에 따라 순차적으로 헤더부와 테일부를 해독 분리하여 표11의 매핑테이블상에서 유니버설 코드와 1:1로 매핑되어 있는 순번의 바이너리 클러스터를 찾아서, 유니버설 코드를 바이너리 클러스터로 변환하는 과정을 전체압축화일내에서 진행을 한다.
이렇게 재환원되어 생성된 바이너리 클러스터는 상기 표6과 같은 바이너리 클러스터의 순서가 될것이다. 이를 개념적으로 구분하여 재환원된 바이너리 클러스터라고 명명하기로 한다. 이제 이 바이너리 클러스터들을 연결하여 원본데이터를 복구해야하는데, 이때 재환원 클러스터에 일부 변형이 가해진다.
재환원된 바이너리 클러스터의 경우에 순차적으로 이어붙이는 과정에서, 원본데이터와 같은 모든 1로 시작하는 이진데이터의 경우는, 1개이상의 연속된 "1"로시작하고, 다음에 1개이상의 연속된 "0"으로 다시 다음에 처음의 과정을 반복하는 구조임을 이미 알고 있다. 이를 원본이진데터의 숫자배열 요건이라고 본 발명에서 명명하기로 한다.
재환원된 바이너리 클러스터가 예를들어,
"100" - "111" - "111" - "1000"이라고 한다면, 이를 이어붙여서 최종이진데이터를 만들때, 첫번째 두번째 바이너리 클러스터를 이어붙일 경우에는 , 두번째 바이너리 클러스터에 대하여 비트 반전이 없이도 "100111" 이 되어, 원본 이진데이터의 숫자배열 요건을 만족하게 된다. 그런데 세번째 바이너리 클러스터를 이 데이터에 계속 붙이게 될 경우 다시 직전에 "1"로 끝났기 때문에 이번에는 "0"으로 시작하는 이진수가 나와야 하는데, 다시 "111"을 붙이게 되면, 유일복호성의 원칙과 각 클러스터간의 구분은 기본적으로 비트변화가 있어야 한다는 조건을 만족시키지 못하므로, 이러한 경우에 세번째 클러스터는 동일길이의 데이터이고, 다만 비트반전을 강제적으로 시행하여 "111" 을 "000"으로 변환한다음, 이를 원본이진데이터로 하여 기존 최종 압축해제 결과에 게속 붙여 나간다. 즉 아래의 경우와 같이,
"100111"- "111" 는 "100111"-"000" 으로 비트반전한다음, 원본이진데이터로서 이어 붙여나가면 "100111000" 으로 복구가 되는 과정을 계속적으로 진행한다. 다음 바이너리 클러스터의 경우 "1000" 인데 직전 바이너리 클러스터의 변환된 결과의 마지막 비트가 "0"이므로 그대로 "1000"을 이어붙여도 상기 원본이진데이터의 숫자배열요건을 만족시키게 된다. 따라서, "100111000"-"1000" ==> "1001110001000" 과 같이 원본이진데이터로 복구가 된다. 이러한 과정을 모든 재환원된 바이너리 클러스터에 대해 거치면 최종적인 원본이진데이터가 압축해제되고, 압축당시 최상위 비트에 "1"을 붙인 원본이진데이터였다면, 최상위의 "1"을 강제적으로 제거함으로써 완벽히 일치하는결과를 확인할 수 있다.

Claims (1)

  1. 원본이진데이터에 "1"로 시작하도록 최상위 비트에 "1"을 부가하는 단계 및 원본 이진데이터의 최상위 비트에서 최하위 비트방향으로 이동하면서, 비트변화가 있을때까지의 성장된 바이너리 클러스터의 비트수가 2비트 이상일때 바이너리 클러스터를 분할하는 단계와 상기 단계에서 분할된 바이너리 클러스터가 "0"으로 시작할 경우에 분할된 바이너리 클러스터를 구성한 비트를 반전시켜서 분할하는 단계를 포함하고, 이렇게 생성된 바이너리 클러스터의 순차적인 추출결과를 바이너리 클러스터의 종류별 출현빈도로 정리한다음 유니버설 코드를 매핑하는 단계를 포함하되 유니버설 코드는
    순번 1번에서 순번 6번까지는 "00", "01", "100", "101", "1110", "1111" 을 통일적으로 적용하고, 테일부는 존재하지 않는다. 7번순번부터는 헤더부는 "110"으로 통일되고, 대응하는 테일부는, 순번대로 "10"으로 시작하여, "100", "101", "1000", "1001", "1011", "10000",...과 같은 형태인데 이러한 테일클러스터 각각은 "10", "1011(10/11)","1000111(10/00/111)" 등과 같이 각 테일 클러스터의 최하위 비트로부터 연속된 적어도 0개 이상의 "1", 최상위비트로부터 배치된 "10", 및 연속된 적어도 0개 이상의 "1"과 최상위비트로부터 배치된 "10" 사이에 배치되는 적어도 0개 이상의 연속된 "0"을 포함하여 구성된다. 이러한 조건을 만족하는 테일 클러스터 중 비트길이가 가장 작은 이진수는 "10"이 되며, 그 이후로 100, 101, 1000, 1001,1011, 10000, 10001, 10011, 10111, 100000...와 같이 테일 클러스터는 맨 앞에 "10"을 가지고 있어야 하 며, 이후 비트자릿수를 늘려 가면서 최하위비트로부터 "1"의 갯수를 늘려가되 최상위비트 쪽에 "10"은 반드시 남아 있어야 하고 "101111"과 같이 "10" 다음에 더 이상 "0"이 존재하지 않게 되면 비트자릿수를 한자리 늘려서 "1000000"로 넘어가게된다. 코드를 비트 길이가 작은 것부터 순차적으로 나열하면 테일부를 자동적으로 생성할 수 있으며, 헤더부와 테일부는 별도의 분리된 저장공간 또는 기억공간에 위치하고 있는 것을 특징으로 하며, 헤더부의 경우 한 공간에 연속되어 있어도 유일복호성을 가지면서 분리가 가능하므로 분리하면서 읽어온뒤, 헤더부와 테일부를 보고 매핑테이블에서 바이너리 클러스터를 역산할 수 있는것을 특징으로 하는 유니버설 코드를 헤더부와 테일부로 자동으로 생성하여 매핑 및 바이너리 클러스터를 변환하는 방법을 특징으로 하는 이진데이터 압축방법
KR1020140155765A 2014-11-11 2014-11-11 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법 KR20160055986A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140155765A KR20160055986A (ko) 2014-11-11 2014-11-11 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140155765A KR20160055986A (ko) 2014-11-11 2014-11-11 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법

Publications (1)

Publication Number Publication Date
KR20160055986A true KR20160055986A (ko) 2016-05-19

Family

ID=56103165

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140155765A KR20160055986A (ko) 2014-11-11 2014-11-11 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법

Country Status (1)

Country Link
KR (1) KR20160055986A (ko)

Similar Documents

Publication Publication Date Title
JP6025923B2 (ja) 整数値データのストリームを圧縮するシステム及び方法
CN110603595B (zh) 用于从压缩的基因组序列读段重建基因组参考序列的方法和系统
KR101737294B1 (ko) 심볼 압축을 수반하는 데이터의 소스 코딩 및 디코딩을 위한 방법들 및 디바이스들
US10090857B2 (en) Method and apparatus for compressing genetic data
CN107836083B (zh) 用于语义值数据压缩和解压缩的方法、设备和系统
US7492290B1 (en) Alternative encoding for LZSS output
JP5913748B2 (ja) セキュアで損失のないデータ圧縮
KR101023536B1 (ko) 데이터 무손실 압축 방법
Talasila et al. Generalized deduplication: Lossless compression by clustering similar data
KR20160055986A (ko) 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법
KR20160100496A (ko) 바이너리 클러스터를 이용한 허프만 부호화 효율화 방법 및 그 장치
KR20160055985A (ko) 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법
KR20160047686A (ko) 분할된 클러스터 종류수 기준 데이터 분할을 이용한 인위적 엔트로피 확대를 이용한 데이터 압축 및 그 해제방법
KR101590790B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
US6573847B1 (en) Multi-table mapping for huffman code decoding
Chudasama et al. Survey of image compression method lossless approach
KR20160054738A (ko) 바이너리 클러스터 분할 및 유니버설 코드 매핑을 이용한 데이터 압축 및 그 해제방법
CN116209983A (zh) 将数据认证用于数据压缩的方法
KR101268934B1 (ko) 데이터 압축/해제장치 및 방법
KR101573983B1 (ko) 데이터 압축 및 데이터 복원 방법과 장치
KR101632116B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
KR20160049627A (ko) 바이너리 클러스터별 분할 및 출현빈도수 내림차순 정렬에 따라 1:1 유니버설 코드 대응을 통한 압축법의 효율화 방법
KR101632115B1 (ko) 이진 데이터의 압축 및 복원 방법과 장치
Sidhu et al. An Advanced Text Encryption & Compression System Based on ASCII Values & Arithmetic Encoding to Improve Data Security
KR101760070B1 (ko) 데이터 부호화 및 복호화 방법과 장치

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination