将字符串映射到保持字典顺序的数字

Mic*_*Sim 1 sorting string mapping algorithm function

我正在寻找能够将字符串映射到数字的算法或函数,使得结果值对应于字符串的字典顺序.例:

"book" -> 50000
"car"  -> 60000
"card" -> 65000
"a longer string" -> 15000
"another long string" -> 15500
"awesome" -> 16000
Run Code Online (Sandbox Code Playgroud)

作为函数,它应该类似于:f(x)= y,因此对于任何x1 <x2 => f(x1)<f(x2),其中x是任意字符串,y是数字.

如果x的输入集是有限的,那么我总是可以进行排序并分配正确的值,但我正在为x的无限输入集寻找通用的东西.

jas*_*son 18

如果你需要f映射到整数,这是不可能的.

假设有这样的地图f.考虑串a,aa,aaa,等考虑价值观f(a),f(aa),f(aaa),等.我们要求f(a) < f(aa) < f(aaa) < ...我们看到,f(a_n)趋于无穷大n趋于无穷大; 在这里我使用的是明显的符号,它a_n是字符a重复n多次.现在考虑字符串b.我们要求f(a_n) < f(b)所有人n.但是f(b)是一些有限整数,我们只是表明它f(a_n)是无限的.我们有矛盾.没有这样的地图是可能的.

也许你可以告诉我们你需要什么?这是相当抽象的,我们可能会建议更合适的东西.此外,不一定担心一般解决"它".YAGNI等等.

  • @Jason:我很喜欢您的答案,正如它清楚表明的那样:证明一种方法错误或不可能使您安全地放弃它,并为其他解决方案腾出了头脑。 (2认同)