gpt4 book ai didi

java - 有没有一种方法可以将一个字符串压缩为一个可逆的更小的字符串?

转载 作者:行者123 更新时间:2023-11-30 01:57:24 28 4
gpt4 key购买 nike

我正在尝试通过铱星网络传输字符串,并且发送数据的成本相当大。我想知道是否有办法压缩大字符串,例如:
{"数据包":01,"报告时间":1500,"高度":6500,"纬度":0,"经度":0,"镇流器":34,"降落伞":0}

转换为更小的字符串,例如: f5fk43d2 。该过程必须是可逆的,以便数据可以在另一端被解码和读取。这可能吗?如果可以,我将如何去做。

我已经尝试过 j.w.r 的这个答案:Shortening a string in Java ,然而这似乎是不可逆转的。它确实将大字符串转换为较小的字符串。

该过程产生的字符串必须小于原始字符串。

感谢任何帮助!

最佳答案

考虑尝试将某些 X 字符串转换为 Y 字符串的数学原理,使得 X > Y(即您试图缩短字符串的长度)。

然后,假设该字符串是字母数字;这给了我们 26 个可能的小写字母、26 个可能的大写字母和 10 个可能的数字(即 62 种可能性)。这意味着对于 X 字符串,我们将有 62^X 个可能的字符串,而对于 Y 字符串,我们将有 62^Y 个可能的字符串。

现在,考虑一下我们是否尝试将所有 X 字符串映射到 Y 字符串。让我们让函数 f(S) 将字符串 S(X 字符串)映射到 Y 字符串。然后,因为 X > Y,我们必须将一些 X 字符串映射到一些相同的 Y 字符串。考虑以下简单示例:

X = 3。Y = 2。那么,我们有 62^3 个可能的 3 字符字符串 (238,000) 和 62^2 (3800) 个可能的 Y 字符字符串。那么,3 字符字符串比 2 字符字符串多 234,000 个。

现在,假设我们尝试使用某个函数 f(S),尝试将每个 3 字符字符串转换为 2 字符字符串。然后,当我们尝试将 2 个字符的字符串转换回 3 个字符的字符串时,我们自然会遇到问题,因为这意味着 f(S) 必须将一些 3 个字符的字符串转换为同一个字符串(因此我们无法不知道要映射回哪一个!)。这是因为 2 字符字符串的域小于 3 字符字符串的域(发生这种情况是因为 f(S) 不能单射,这意味着没有有效的逆)。

因此,没有足够的 2 字符字符串可能映射回每个 3 字符字符串,并且您会发现这可以推广到所有 X > Y。

您可能会限制较大字符串域中的某些字符,尽管正如您所描述的问题一样,这是不可能的。

编辑,因为我觉得我应该提到这一点:有一些算法用于将较少字符的字符串压缩为较多字符的较小字符串。话虽这么说,我建议看看这个: An efficient compression algorithm for short text strings

关于java - 有没有一种方法可以将一个字符串压缩为一个可逆的更小的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53926612/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com