用于为字符串生成唯一(常量)代码的算法,该代码应该是可逆的

Tah*_*her 11 algorithm url-shortener

要求:

我们在DB中有值

Chennai
Baroda
Bangalore
New Delhi
São Paulo, Lisboa
San Jose
Run Code Online (Sandbox Code Playgroud)

等等...

所以我想将这些字符串转换为唯一的短字符串.例如

Chennai –> xy67kr

San Jose –> iuj73d
Run Code Online (Sandbox Code Playgroud)

基本上类似于URL缩短.

并且转换它的算法应该是可逆的.即,当我将"xy67kr"传递给解码函数时,它应该给我"Chennai".

期待着寻求帮助.

Raf*_*ird 5

正如其他发帖者所说,你不能有一个函数来缩短任意字符串,这在数学上是不可能的。但是您可以创建一个适合您的特定字符串集的自定义函数。

一种示例方法是计算集合中的字符频率,然后仅使用前缀代码对字符进行编码,以便使用短前缀对最常见的字母进行编码(即霍夫曼编码。)

上面的方法没有利用这样一个事实,即在自然语言中,下一个字符可以从前面的字符中非常准确地预测出来,因此您可以扩展上述算法,以便它不是独立地对字符进行编码,而是对 n 中的下一个字符进行编码-公克。当然,这需要比简单方法更大的压缩表,因为您实际上拥有一个取决于前缀的单独代码。例如,如果“e”在“th”之后非常频繁,则“th”之后的“e”会使用非常短的前缀进行编码。如果“e”在“ee”之后很少出现,那么在这种情况下可以用很长的前缀对其进行编码。解码算法显然需要查看当前解压缩的前缀来检查如何解码下一个字符。

这种一般方法假设频率不会改变,或者至少改变缓慢。如果您的数据集发生变化,您可能需要重新计算统计数据并重新编码字符串。