将任何字符串转换为-1到1之间的实数的算法

pyC*_*hon 1 algorithm encoding computer-science decoding

嗨,我正在寻找一种算法,将任何有限大的有限长字符串集转换为-1到1之间的特定实数,其中每个字符串都有唯一的实数表示.这个问题是编程语言无关的.

其中每个字符串可以包含许多单词和结束行,以及通过数学定义的实数.我也可以使用任意精度库.

cey*_*yko 8

假设您希望每个字符串映射到唯一的实数,也可以将其解码回原始字符串,我会使用算术编码.

基本上,你想要做的是将-1和1之间的实数组划分为一个等于你的字母表中字符数的部分n.要编码单个字符串,只需选择其中一个区域的开头即可.要对字符串的第二个字符进行编码,首先要找到第一个字符所在的区域,然后将该区域细分为n较小的区域,然后选择第二个字符所在的区域.然后,您可以对此解决方案进行递归,以便能够将任意长度的字符串转换为唯一的实数.

例如,让我们说我们的拼音只是人物ab我们要的字符串编码aba.第一个a给我们区域[-1,0),第二个字符然后细分这个区域,并产生[-0.5,0).重复决赛a以产生该区域[-0.5,-0.75).该区域中的任何数字只能被解码为序列aba(假设我们知道原始字符串的长度,或者我们可以在解码时永远递归).

(有关编码和解码过程的详细说明,请参阅维基百科.请注意,您可能只对此问题的等大小区域感兴趣.)


Oli*_*rth 6

[ 将我的评论转化为答案.]

你不需要做任何事情.字符串可以被视为实数.每个字符都是小数点后的数字,以256为基数(对于8位字符).

正如所指出的,这无法区分具有多个尾随\0字符的字符串.如果这是一个问题,那么你可以考虑这个数字base-257,并且没有字符映射到值0.

由于没有算法,因此没有额外的内存要求; 你的输入字符串也是你的输出!任意精度库等都没有问题.