【发布时间】:2018-10-01 19:50:12
【问题描述】:
这是一个小挑战,希望对其他人也有用。
任务是从英文字母中获取一个ID字符。从头到尾
我的解决方案目前允许 26 个 diff 长度(最大可能)的 ID(单词)。有 90 个可能的单词。
我知道如果我们在获得单个字符 ID 后选择随机字符(完成),这可以增加。(但是)我发现很难弄清楚如何管理不击中已经找到的组合(ID 必须是独特)。正如我们所看到的,如果它开始一遍又一遍地找到相同的组合需要很长时间。随着我们获得越来越多的 ID 组合,这种概率会增加。
这是我要测试和检查的代码和小提琴:
代码:
html
<p>
start
</p>
jquery:
function addto(t) {
$("p").append("<b>" + t + "</b>");
}
global_ID_array = [];
lowerAlpha = "abcdefghijklmnopqrstuvwxyz";
var myIDlength = 1;
function getIDChar (){
do {
var myIDchar = lowerAlpha.substr(0, myIDlength);
lowerAlpha = lowerAlpha.replace(myIDchar,'');
if (lowerAlpha.length < myIDlength){
lowerAlpha = "abcdefghijklmnopqrstuvwxyz"; //reset
myIDlength++;
}
} while (global_ID_array.indexOf(myIDchar) > -1)
global_ID_array.push(myIDchar);
addto(myIDlength+':'+global_ID_array.length+',');
}
do{
getIDChar();
}while (myIDlength < 26);
addto('<br \>myIDlength='+myIDlength);
addto('<br \>global_ID_array last val='+global_ID_array[global_ID_array.length-1]+'<p>');
【问题讨论】:
-
随机数很可能是随机生成的,但在随机数出现某些情况后或在生成随机数的阶段内,它们可以相同地重复。这就是为什么这些被称为伪随机数。这些不是自然随机的。
-
如果您生成 26 个字符,则两次获得相同字符的机会大约是 6e36 中的 1。
-
不要删除您使用的字符。无需防止唯一 ID 中出现重复字符。
标签: javascript math random