2014-12-03 28 views
5

我想收縮像-1234B56789C;ABC1D3E/FGH4IJKL這樣的字符串,大約是20 - 25個不區分大小寫的字符。如何壓縮字母數字字符串?

我的目標是要有一個最大爲16字符的字母數字字符串。它們必須保持可讀性。

這可能嗎?有沒有算法可以用來壓縮也有一些特殊字符的字母數字字符串?

還必須能夠恢復壓縮。

+1

我在你的字符串中看到一個分號。你還有什麼其他的非字母數字字符? – 2014-12-03 15:03:47

+0

我現在還不知道,但肯定是:' - ; /' – membersound 2014-12-03 15:04:27

+1

你也可以使用小寫字母嗎?或者在您的工作流程的某個地方是否將字符解釋爲不區分大小寫? – cello 2014-12-03 15:15:35

回答

2

我認爲一般情況下這是不可能的,除非你使用不同的目標字母表。
據我瞭解,目前您的source alphabet是0-9和A-Z。
如果您延長target alphabet包括也一定N> 0其他字符,
那麼你可以編碼與它原來有更少的字符輸入字符串
(例如因爲你可以從源字母表與
編碼字符的夫婦 來自目標字母表的單個字符)。

+0

我會去那個選項編碼總是塊。 – membersound 2014-12-06 11:28:03

2

您可以嘗試類似LZW的方法並在輸入中查找常見模式。例如 - 如果您發現「1234」經常出現在您的字符串中,那麼您可以將其編碼爲「Q」。

這種方法不能一致地實現16字符編碼字符串的要求,除非您能證明您選擇的壓縮映射總是會在源中以足夠的規律性出現,以達到16個字符的長度。

+0

這是一個好主意。但是:當再次解壓字符串時,如何知道「Q」是真實的字母數字塊還是壓縮的十進制數? – membersound 2014-12-03 15:20:31

+0

@membersound - 你必須建立一本詞典 - 詞典中的任何東西都會被翻譯,任何東西都不會被原封不動地傳遞。看看[LZW](http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch)是如何工作的。 – OldCurmudgeon 2014-12-03 15:27:07