base95 인코딩과 ascii85 인코딩의 효율이 비슷하다는 게 무슨 뜻인가요?
http://en.wikipedia.org/wiki/Ascii85
"The basic need for a binary-to-text encoding comes from a need to communicate arbitrary binary data over preexisting communications protocols that were designed to carry only human-readable text. Those communication protocols may only be 7-bit safe (and within that avoid certain ASCII control codes), and may require line breaks at certain maximum intervals, and may not maintain whitespace. Thus, only the 94 printable ASCII characters are "safe" to use to convey data.
4 bytes can represent 2^32 = 4,294,967,296 possible values. 5 radix-85 digits provide 85^5 = 4,437,053,125 possible values, enough to provide for a unique representation for each possible 32-bit value. Further, notice that five radix-84 digits provide 84^5 = 4,182,119,424 representable values. The implication of this is that 85 is the minimum possible integral base that will represent four bytes in five characters, hence its choice.
When encoding, each group of 4 bytes is taken as a 32-bit binary number, most significant byte first (Ascii85 uses a big-endian convention). This is converted, by repeatedly dividing by 85 and taking the remainder, into 5 radix-85 digits. Then each digit (again, most significant first) is encoded as an ASCII printable character by adding 33 to it, giving the ASCII characters 33 ("!") to 117 ("u")."
여기 보면 94개의 인쇄가능 아스키 문자를 다 안쓰고 85개만 써도 효율이 같다고 하는데 이게 무슨 뜻인가요?
그리고 왜 4바이트를 예로 들었을까요? 2바이트는 안되나요?
94와 256의 최소공배수 단위로 채우는 방법이 아닌가요?
살짝 상상의 나래를 펼쳐본 내용입니다. 근거 없는
살짝 상상의 나래를 펼쳐본 내용입니다. 근거 없는 썰이니 읽어나 보시기 바랍니다.
"256 ^ x ~= A ^ y, 양수 A의 최대값은 94, x와 y는 정수 조건"을 만족하는 A, x, y 조합을 찾는 문제로 볼수 있습니다.
살짝 풀어보면, y / x ~= log(256) / log(A)
A가 94, 85, 84, 64인 경우를 조사해 보면
A == 94, y/x ~= 1.2205 <= 5 / 4
A == 85, y/x ~= 1.2482 <= 5 / 4
A == 84, y/x ~= 1.2515 >= 5 / 4
A == 64, y/x ~= 1.3333 == 4 / 3
A == 64 인 base64의 경우, 3byte(24bit) binary가 4문자(4 radix-64 digits)로 변환되는 형태입니다.
A 가 85인 경우나 94인 경우 둘 다, 4byte <==> 5문자 변환으로 쓸 수 있습니다만, 사용 문자가 적은 쪽(base85)이 좋습니다. 이 때 효율은 5/4=1.25이므로 25% 오버헤드가 있다고 표현할 수 있겠습니다. 또는 5byte 공간으로 4byte binary 정보를 표현하므로 80% 효율이다 라고 할 수도 있겠습니다.
왜 4, 5를 선택했냐 질문한다면? 물론 A==94인 경우인 1.2205 에 대한 다른 정수 조합을 찾을 수 있겠습니다. 4/3도 가능합니다. 3byte binary가 4문자로 변환되는 경우죠. 하지만 이 조합은 A == 64 인 경우에도 가능하고, 이경우가 보다 적은 개수의문자로 구현가능합니다.
그래서, 위에 4바이트는 단지 예시가 아니라 설명을 위한 필수 요소입니다. 2바이트도 가능합니다. 조건에 맞는 것은 4/2 인 경우겠지요. 2byte <==> 4문자 변환이 됩니다. 50% 효율이라서 5/4 조합보다 비효율적입니다. 실제로 우리가 bynary를 16진수 표현하는 것이 이 방법에 해당합니다. 0~9,A~F의 16문자를 사용해서 bynary를 표현하는 방법이죠^^. base16이라고 합니다.
정리하자면, 2/1 조합에 최적은 base16, 4/3의 최적은 base64, 5/4의 최적은 base85, ... 이런 식입니다.
아! base85란 표현이 아니고
아! base85란 표현이 아니고 Ascii85군요.
base16, base32, base64, Ascii85 등은 binary data의 16진수, 32진수, 64진수, 85진수 표현이라고 볼수 있습니다. 실제로 진수 변환하는 방법으로 변환 알고리즘을 짜는 것도 가능합니다.
알려주셔서 정말 고맙습니다.막연한 것이
알려주셔서 정말 고맙습니다.
막연한 것이 정리되었습니다.
94와 256의 최소공배수인 base(2*47*128)=base12032로는 안하는 이유가 있을까요?
된다면 효율이 백퍼센트인데요.
재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.
아이디의 아이디어 무한도전
http://blog.aaidee.com
귀태닷컴
http://www.gwitae.com
처음 글에서 인용하신 영문글의 첫단락에 나와 있듯이,
처음 글에서 인용하신 영문글의 첫단락에 나와 있듯이, Ascii 영역에서 사용가능한 문자는 최대가 94개입니다. 따라서 이런 방식의 변환에서 최대 가능한 표현은 base94 입니다.
base12032란 표현에 대해서는, 과연 지금 무얼 할려고 하는지 곰곰히 생각해 보시기 바랍니다. 처음 인용하신 위키피디아 글의 첫단락을 다시 한번 읽어 보시기 바랍니다. 굳이 표현하자면 base12032의 기본 단위는 그냥 8비트 data 47개가 연속된 문자열인데 ...
제 생각으론 직관적으로나 논리적으로나 왜 최소공배수와 관계있다고 생각하시는지 모르겠는데, 한번 곰곰히 왜 그렇게 생각하고 계신지 되새겨 보셨으면 좋겠습니다.
보통 2진법, 10진법, 16진법, 60진법 등을 영어로 base-2, base-10, base-16, base-60 system이라고도 표현합니다. base64 encoding이란 이름이 괜히 지은 이름이 아닙니다. 서양인들에게는 직관적으로 바로 이해될 내용일텐데, 우리가 영어 사용자가 아니다 보니 뭔가 새로운 이름인 것처럼 보이는 것입니다.
256가지짜리 47자를 94가지짜리 128자로
256가지짜리 47자를 94가지짜리 128자로 변환하면 효율이 36%네요.
잘못 생각했습니다.
256*47이 아니고 256^x 군요.
멍청한 저를 일깨워주셔서 감사합니다.
수학에서 2^a=3^b가 성립할 때 a와 b는 무슨 관계라고 하는 게 있는지도 궁금해집니다.
alog(2)=blog(3)
a/b=log(3)/log(2)~=1.584...
재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.
아이디의 아이디어 무한도전
http://blog.aaidee.com
귀태닷컴
http://www.gwitae.com
댓글 달기