鉴于一些价值观,我想制作一个(相当不错)独特的结果。
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plnmjfys'));
//now $unique1 == "sqef3452y";
我还需要能够返回相同结果的东西。在这种情况下,缺少20%的值。
$unique2 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8'));
//also $unique2 == "sqef3452y";
我不知道从哪里开始使用这样的算法,但我有一些假设。
有什么好处是一个权重因子,人们可以说'价值1比价值3更重要'。这将需要多维数组用于输入而不是一维。
我只是在键盘上捣乱了这些值,但实际上它们可能是短或长字母数值。
答案 0 :(得分:1)
你的两个要求似乎有点矛盾。如果数组的最后20%是非重要的(即如果它等于'0plnmjfys'或者它是null,你想获得相同的结果)那么你为什么要首先包含它呢?
第一步是澄清你想要消除歧义的内容。如果它不重要,只需放弃它。
一旦你决定了这个,你必须问自己,你是否希望两个“接近”的结果有“关闭”的ID ...也许你想要
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plnmjfys'));
//now $unique1 == "sqef3452y";
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plSsa45'));
//now $unique1 == "sqef3452k";
后者比较棘手,因为大多数唯一的id生成器都使用hashes(你可能也希望看一下这些),所以两个非常相似的字符串可以返回截然不同的结果。
如果要确保唯一性并且不关心结果中的“接近度”,只需计算连接字符串的哈希值,或每个输入字符串的哈希值,并连接哈希码。
如果您想要“贴近”特权,您可以计算最相关部分的哈希值,并为其他不太相关的部分应用Soundex algorithm或类似的东西。
请记住你在这方面有相互矛盾的要求:唯一ID很难给出(疯狂地)字符串的不同代码,即使唯一的区别是1000个字符串中的一个字符。
Closeness(此字符串与第二个字符串“或多或少相同”)尝试完全相反,并希望返回两个相同的代码:引用维基百科关于Soundex算法:
使用这个算法,两个“罗伯特” 和“Rupert”返回相同的字符串 “R163”而“鲁宾”产生“R150”。 “Ashcraft”和“Ashcroft”都屈服了 “A261”。
所以......哪个是哪个?你是否认为在你的示例作品中使用前4个元素(在你的例子中)和Soundex中最不重要的20%的哈希值?
这可能会导致(回到你的例子),例如:
$unique2 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8',));
//now $unique2 == "AB67R45-000000";
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plSsa45'));
//now $unique2 == "AB67R45-012000";
答案 1 :(得分:0)
我建议你阅读随机数生成器(RNG),种子和随机度。
通常,大多数软件RNG使用称为“种子”的值来初始化算法。此后,生成的每个随机数用作下一次迭代的种子。这意味着如果您总是使用相同的种子(例如1或42),您将始终获得相同的“随机”数字序列。因此,这些类型的RNG通常被称为“伪随机”。出于安全考虑,种子的值通常使用当前系统时间(以毫秒为单位)或硬件随机化设备来选择,以减少在任何合理的时间段内两次选择相同种子的机会。
你似乎提出的是一个RNG,它可以接收多个字符串,可能带有权重,并使用一些公式来计算种子。然后,您使用种子RNG随机选择字符以创建新字符串。这很有意思,但遗憾的是,如上所述,它不会仅仅从数字种子和现有RNG开始有意义地变得更有意义。但是,作为一项运动,可能会很有趣!
http://en.wikipedia.org/wiki/Random_number_generation
您也可以谷歌'随机字符串生成器'或其他一些内容来查找有关创建随机字符串的更多资源。