2014-12-03 69 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