Lon*_*guy 4 string algorithm math text
我有一大堆名字(数百万).它们中的每一个都有名字,可选的中间名和姓氏.我需要将这些名称编码为唯一代表名称的数字.编码应该是一对一,即名称应该只与一个数字相关联,并且数字应该只与一个名称相关联.
什么是编码的智能方法?我知道根据字母集中的位置(a-> 1,b-> 2 ..等等)标记每个字母的名称很容易,所以像Deepa这样的名字会得到 - > 455161,但是如果'16'真的是16或1和6的组合,我无法弄清楚.
所以,我正在寻找一种智能的名称编码方式.
此外,编码应该使得任何名称的输出数字中的数字位数应该具有固定的数字位数,即,它应该与长度无关.这可能吗?
谢谢Abhishek S.
要获得相同的宽度数字,你不能只在左边填零吗?
一些选择:
如果您需要能够不时更新您的姓名和号码列表,那么#2,#4和#5应该有效.#1和#3会有问题.#5可能是最具前瞻性的,但你可能会发现在某些时候你需要unicode.
我相信你可以使用unicode作为#5的变体,使用2 ^ 32而不是2 ^ 8 == 256的幂.
你试图做的实际上是散列(至少如果你有固定数量的数字)。有一些很好的哈希算法,几乎没有冲突。例如,尝试一下 sha1,它经过了良好的测试并且可用于现代语言(请参阅http://en.wikipedia.org/wiki/Sha1)——它似乎对于 git 来说足够好,所以它可能适合您。
当然,两个不同名称的相同哈希值的可能性很小,但哈希总是出现这种情况,并且可以处理。使用 sha1 之类的名称和 ID 之间不会有任何明显的联系,这可能是好事也可能是坏事,具体取决于您的问题。
如果你确实想要唯一的ID,你需要像NealB建议的那样,自己创建ID并连接数据库中的名称和ID(你可以随机创建它们并检查冲突或增加它们,从0000000000001左右开始) 。
(经过一番思考并阅读第一条评论后改进了答案)