【发布时间】:2021-05-30 12:52:28
【问题描述】:
我想将一个固定长度(例如 50 个字符长的随机字符串)转换为 64 位整数,并能够在给定 64 位整数的情况下将其转换回原始文本。
是否存在用于此的算法?我想使用编码/解码而不是散列/反向查找。
【问题讨论】:
-
你听说过鸽巢原理吗?一个 64 位整数可以容纳 64 位数据,即 1.84e+19 个不同的值。这意味着最多可以来回转换许多字符串。如果您假设字符串只能是小写 a-z,那么您只能在其中压缩 13 个字符。
-
这在一般情况下似乎是不可能的——您如何能够将 50 个字符的字符串的所有可能性映射到唯一的 64 位值?唯一有效的情况是如果只有两个可能的字符,在这种情况下,您可以将一个编码为 0,另一个编码为 1。或者您必须缩短字符串,要求所有有效字符串更容易遵循可压缩模式等
-
@MooingDuck 是的,我明白了。在我的情况下,碰撞很好,我不需要唯一性。但是为了好玩,让我们来看看你对 13 个字符 a-z 的回答。如何在 64 位整数和 13 个字符的长字符串之间映射随机 a-z 字符串?
-
" 转换为 64 位整数,并能够在给定 64 位整数的情况下将其转换回原始文本。"如果发生碰撞,这基本上是不可能的。它需要独特性。 Pigeonhole Principle
-
您是否做过将基数为 10 的数字转换为基数为 2 或基数为 16 的数字的练习? (这是一个常见的家庭作业问题)。在这种情况下,您只需将基数为 2 的数字转换为基数为 32 的数字。
标签: algorithm encoding hash decoding