2015-01-16 4 views
0

나는 현재 SMS를 통해 URL을 보내는 기능이있는 Android에서 마케팅 앱을 개발 중입니다. SMS를 사용하고 있으므로 은 가능한 한 짧은 텍스트를으로 만들기 때문에 부분으로 분할되지 않습니다.Android - String Shortening Approach

URL은 앱에 의해 동적으로 생성됩니다. 응용 프로그램이 "연락처 관련 정보"를 URL에 넣으므로 서로 다른 연락처는 다른 URL을 생성합니다. 이 정보는 기본 URL이 아닌 단축되어야하는 정보입니다.

문자열을 줄이기 위해 Base64을 사용해 보았지만 작동하지 않습니다.

After Text: TXlzZWxmfDEyMzQ1Njc4OTA= Length: 25

Before Text: Myself|1234567890 Length: 17

은 그 때 나는 Deflater을 시도, 그 결과는보다 나은 이다 Base64로,하지만 여전히 문자열을 단축 아닙니다.

After Text: x��,N�I�1426153��4����3�� Length: 24

Before Text: Myself|1234567890 Length: 17

는 또한 GZIP을 시도했습니다, 그 결과는 다른 방법보다 훨씬 더 나쁘다.

After Text: ����������������,N�I�1426153��4�����w�������� Length: 36

Before Text: Myself|1234567890 Length: 17

테스트 결과를 비교 한 후, 나는 그것이 때로는 작품으로 에게 Base64로를 사용하기로 결정,하지만 난 완전히 만족하지 않다. 누구든지 나에게 더 나은 접근법을 줄 수 있습니까?

편집 :

나는 인터넷 연결없이 오프라인 실행되는 단축이 문자열이 필요합니다. 개발자 팀이 결정한대로이 갑작스러운 변경에 대해 대단히 죄송합니다. 어떤 생각?

+0

String Shortening Approach는 인코딩 된 양식의 텍스트를 바로 짧게하려는 것입니다. –

+0

마지막 두 가지 접근 방식에는 오버 헤드가 있으며, 이는 최종 결과에 항상 포함됩니다. 그러나 이러한 방법은 많은 양의 문자열 데이터를 압축 할 때만 유용합니다. 소량의 경우 (예에서와 같이) 사용하지 않으면 더 좋습니다. – waqaslam

+0

@Ando : 예, 인코딩 된 짧은 버전입니다. 너는 어떤 생각을 가지고 있니? – Harry

답변

1

Base64는 일반적으로 인코딩 된 문자열의 길이를 약 37% 늘려서 작동하지 않습니다.

Deflater와 GZIP은 모두 짧은 문자열의 길이를 늘리는 헤더를 포함합니다.

그러나 Huffman coding 또는 Arithmetic coding을 사용하면 일부 문자가 다른 문자보다 URL에서 훨씬 더 많이 사용된다는 이점을 활용할 수 있습니다. 천 개 정도를 생성하고 각 문자의 발생을 합산하여 문자열에 대한 빈도 테이블을 생성 한 다음이 빈도를 기반으로 허프만 코딩 테이블을 생성하십시오. 그런 다음이 하드 코딩 된 테이블을 사용하여 문자열을 인코딩하고 디코딩 할 수 있습니다. 메시지와 함께 테이블을 전송하지 마십시오.

Here is an interactive webpage 다양한 문자열을 입력하고 허프만 인코딩 할 수 있습니다. URL로 시도해 볼 수있는 압축률의 종류에 대한 일반적인 아이디어를 얻을 수 있지만 실제로는 약간 낮은 압축률을 얻습니다. 모든 문자열에 대해 동일한 테이블을 사용하는 경우 속도.샘플 텍스트 "Myself | 1234567890"의 경우 허프만 인코딩 문자열의 크기는 원본의 51 %입니다.

허프만 인코딩 된 문자열을 생성 한 후에는 SMS에서 전송할 수없는 잘못된 문자 (예 : Base64 인코딩 허프만 코드 문자열)를 이스케이프 처리해야 할 수도 있습니다. 이로 인해 비용이 절감 될 수 있습니다. 허프만 인코딩에서 다소 차이는 있지만 잘하면 당신은 넷 세이빙으로 끝날 것입니다.

허프만 코딩으로 50 % 정도의 압축률을 얻은 다음 Base64로 인코딩하면 (다시 크기를 늘리면) 결과가 원본보다 약 30 % 작아집니다.

+0

나는 이것이 내가 필요한 대답이라고 생각한다. 허프만 코딩에 대한 연구를 계속할 것입니다. 감사! – Harry