gpt4 book ai didi

string - 将名称字符串编码为唯一数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:21 25 4
gpt4 key购买 nike

我有一大堆名字(数以百万计)。他们每个人都有一个名字、一个可选的中间名和一个姓氏。我需要将这些名称编码成一个唯一代表这些名称的数字。编码应该是一对一的,即一个名字应该只与一个数字相关联,一个数字应该只与一个名字相关联。

编码这个的聪明方法是什么?我知道根据名称在字母集中的位置(a-> 1、b->2.. 等等)标记名称的每个字母很容易,因此像 Deepa 这样的名称会得到 -> 455161,但同样在这里我无法确定“16”是真的 16 还是 1 和 6 的组合。

所以,我正在寻找一种对名称进行编码的巧妙方法。

此外,编码应该使得任何名称的输出数字中的位数应该具有固定的位数,即它应该与长度无关。这可能吗?

谢谢阿布舍克 S

最佳答案

要获得相同的宽度数字,你不能只在左边补零吗?

一些选项:

  1. 对它们进行排序。数一数。第 10 个名字是数字 10。
  2. 将每个字符视为以 26 为基数的数字(不区分大小写,不数字)或 52(区分大小写,无数字)或 36(不区分大小写带数字)或 62(带数字区分大小写)数字。计算int 中的值。例如,对于名称“abc”,您将有 0 * 26^2 + 1 *26^1 + 2 * 20^0。有时中文名字可能会用数字来表示调性。
  3. 使用“完美哈希”方案:http://en.wikipedia.org/wiki/Perfect_hash_function
  4. 这个主要是为了好玩而建议的:使用 goedel 编号 :)。所以“abc”将是 2^0 * 3^1 * 5^2 - 它是素数幂的乘积。对数字进行因式分解可以返回字符。号码不过可能会变得很大。
  5. 转换为 ASCII,如果您还没有使用的话。然后分别对待字符的序号作为 base-256 编号系统中的数字。所以“abc”是 0*256^2 + 1*256^1 + 2*256^0。

如果您需要能够不时更新您的姓名和号码列表,#2、#4 和#5 应该可以。 #1 和#3 会有问题。 #5 可能是最有前途的,尽管您可能会发现在某些时候需要 unicode。

我相信您可以使用 2^32 的幂而不是 2^8 == 256 的幂将 unicode 作为 #5 的变体。

关于string - 将名称字符串编码为唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338599/

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