2013-10-26 317 views
1

我有一個字符串,我想編碼成長的Java;我也想從長久以來將其解碼爲一個字符串。重要的是它是一個「長」(原始)而不是一個長(對象)。字符串最大長度爲128個字符,但通常要小得多。字符串的字符以ASCII編碼,只使用標準ASCII值(0-127)而不使用擴展ASCII碼(0-256)。Java編碼/解碼字符串長/長

我能夠通過將每個字符轉換爲長(8字節)的每個字節來編碼長度爲8的字符串。由於每個字符的範圍是0-127(7位),我相信我可以編碼長達9個字符(64位/ 7位= 9.14),但我還沒有實現它。

我有一種感覺,它可能是不可能的(編碼所有128個字符),但我想打開這個問題,看看是否有更好的技術。

如果128個字符是不可能的,那麼您可以編碼成長字符的最大字符數是多少?

P.S.我也研究過一些哈希算法,但它似乎不能解決問題的解碼要求。

+1

這是壓縮問題嗎?您正在嘗試將896(128 * 7)位合併到64位中?壓縮只能做很多事情,尤其是對於這麼小的輸入。如果我正確地理解了你,你實際上說你想要代表每位2個字符。這聽起來很牽強。 –

+0

@RyanStewart我同意這聽起來很牽強(我甚至在我的問題中使用了不可能的詞),但我希望得到SO世界的共識。我還有另一種選擇,我不知道。 – Justin

+0

除了不會做太多的壓縮算法,如果這是人類可讀的,我可以看到一種可能性,即需要更少的數據......可能是雙倍或四倍的存儲......通過丟棄一兩個最重要的然後做一些字典匹配。 – sdanzig

回答

0

我相信Shannon's source coding theorem可以用來確定有多少數據可以壓縮成64位。

您需要達到14:1的壓縮比率,但這是高度依賴於您的數據集的。例如,如果輸入字符串恰好是重複128次的單個字符,則可以將896位(128個字符)壓縮爲64位。我懷疑是否可能實現這個壓縮比率爲所有字符串的128個字符。

看看有點相關的問題:What is the maximum compression ratio of gzip?

此外,您可能會在cs.stackexchange.com上得到更好的答案,因爲這更像是一個理論問題而不是一個編程問題。

0

如果不進行壓縮,您可以表示12位字符,長度爲64位,每個字符長度爲5位。這爲您的編碼26提供了32個可能的代碼點,用於保留alpha和6。對於7位ASCII碼,您只能容納9個字符。

如果將64位編碼限制爲2個編碼點並將它們表示爲位,則通常64位的128個字符是不可能的(一般情況下可能是壓縮) 。

壓縮可能能夠將它拉到某些字符串中,但通常不能用於所有可能的128個字符的字符串。