2014-12-03 3 views
5

약식 대문자를 구분하지 않는 문자 인 -1234B56789C;ABC1D3E/FGH4IJKL과 같은 문자열을 축소하려고합니다.영숫자 문자열을 압축하는 방법은 무엇입니까?

내 목표는 최대 문자 수는 16자인 영숫자 문자열을 사용하는 것입니다. 그들은 인간이 읽을 수 있어야합니다.

는 것이 가능할까요? 특수 문자가있는 영숫자 문자열을 압축하는 데 사용할 수있는 알고리즘이 있습니까?

또한 압축을 되돌릴 수 있어야합니다.

+1

문자열에 세미콜론이 있습니다. 다른 영숫자가 아닌 문자는 무엇입니까? –

+0

정확히 알지 못하지만, 확실히 :'-; /' – membersound

+1

소문자도 사용할 수 있습니까? 또는 작업 흐름의 어딘가에서 대소 문자를 구분하지 않는 문자입니까? – cello

답변

2

다른 대상 알파벳을 사용하지 않으면 일반적으로 불가능하다고 생각합니다.
현재 귀하의 source alphabet은 0-9 및 A-Z입니다. 당신은 당신이 원래 가지고 적은 문자 입력 문자열을 인코딩 할 수 있습니다 또한 특정 N> 0 다른 문자,
을 포함하도록 target alphabet를 확장 할 경우

(예를 들어, 당신은
와 소스 알파벳에서 문자의 커플을 인코딩 할 수 있기 때문에 대상 알파벳의 단일 문자).

+0

나는 블록을 항상 인코딩하도록이 옵션을 사용할 것이다. – membersound

2

당신은 LZW와 같은 접근법을 시도하고 입력에서 일반적인 패턴을 찾을 수 있습니다. 예를 들어 - 문자열에 "1234"가 자주 나오는 경우 "Q"로 인코딩 할 수 있습니다.

사용자가 선택한 압축 매핑이 16 문자 길이를 얻기에 충분한 규칙 성으로 항상 원본에서 발생한다는 것을 증명할 수없는 경우이 접근법은 16 자 인코딩 된 문자열의 요구 사항을 일관되게 충족시킬 수 없습니다.

+0

좋은 생각입니다. 그러나 : 문자열을 다시 압축 해제 할 때 "Q"가 실제 영숫자 블록인지 또는 압축 된 십진수 블록인지 어떻게 알 수 있습니까? – membersound

+0

@ mememound - 사전을 작성해야합니다. 사전에있는 내용은 모두 번역되고, 아무 것도 변경되지 않습니다. [LZW] (http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch)의 작동 방식을 살펴보십시오. – OldCurmudgeon

관련 문제