gpt4 book ai didi

javascript - 生成随机唯一数据花费的时间太长,占用 100% 的 CPU

转载 作者:行者123 更新时间:2023-11-29 20:06:17 28 4
gpt4 key购买 nike

警告:CPU 使用率达到 100%,请小心。

Link to the jsFiddle

编写此脚本是为了设计动态蛇梯板。每次刷新页面时,都会创建一个新板。大多数时候所有的背景图像都不会出现,CPU 使用率高达 100%。但有时它们都出现并且CPU使用率正常。

Opera 显示一些背景图像,Firefox 滞后并询问我是否要停止脚本。

我认为问题出在这些代码行上:

        for(var key in origin)      // Need to implement check to ensure that two keys do not have the same VALUES!
{
if(origin[key] == random_1 || origin[key] == random_2 || key == random_2) // End points cannot be the same AND starting and end points cannot be the same.
{
valFlag = 1;
}
console.log(key);
}

最佳答案

您的算法非常低效。当数组几乎填满时,您实际上会进行数百万次无用的迭代,直到您走运并且 RNG 不小心选择了丢失的数字。将其重写为:

  1. 生成一个包含所有可能数字的数组 - 从 1 到 99。
  2. 当你需要一个随机数时,在这个数组的当前边界生成一个随机索引,拼接元素和这个随机位置,将它从数组中移除并使用它的值作为你想要的随机数。
  3. 如果生成的数字不符合您的某些条件(minDiff?),请将它们返回数组。请注意,如果数组中剩余的所有内容都无法满足您的条件,您仍然可以永远停止循环。

您以这种方式从数组中提取的每个值都保证是唯一的,因为您最初用唯一的数字填充它并在使用时删除它们。

我已经剥离绘图并将生成的数字放入数组中,您可以在控制台中检查。把你的画放回去,它应该可以工作 - 现在会立即生成数字:

var snakes = ['./Images/Snakes/snake1.png','./Images/Snakes/snake2.jpg','./Images/Snakes/snake3.gif','./Images/Snakes/snake4.gif','./Images/Snakes/snake5.gif','./Images/Snakes/snake6.jpg'];
var ladders = ['./Images/Ladders/ladder1.jpg','./Images/Ladders/ladder2.jpg','./Images/Ladders/ladder3.png','./Images/Ladders/ladder4.jpg','./Images/Ladders/ladder5.png'];


function drawTable()
{
// Now generating snakes.
generateRand(snakes,0);
generateRand(ladders,1);

}

var uniqNumbers = []
for(var idx = 1; idx < 100; idx++){ uniqNumbers.push(idx) }

var results = []

function generateRand(arr,flag)
{
var valFlag = 0;
var minDiff = 8; // Minimum difference between start of snake/ladder to its end.
var temp;

for(var i = 0; i< arr.length; ++i) {

var valid = false

// This is the single place it still can hang, through with current size of arrays it is highly unlikely
do {
var random_1 = uniqNumbers.splice(Math.random() * uniqNumbers.length, 1)[0]
var random_2 = uniqNumbers.splice(Math.random() * uniqNumbers.length, 1)[0]
if (Math.abs(random_1 - random_2) < minDiff) {
// return numbers
uniqNumbers.push(random_1)
uniqNumbers.push(random_2)
} else {
valid = true
}
} while (!valid);


if(flag == 0) // Snake
{
if(random_1 < random_2) // Swapping them if the first number is smaller than the second number.
{
var temp = random_1; random_1 = random_2; random_2 = temp
}
}
else // Ladders
{
if(random_1>random_2) // Swapping them if the first number is greater than the second number.
{
var temp = random_1; random_1 = random_2; random_2 = temp
}
}
// Just for debug - look results up on console
results.push([random_1, random_2])
}
}

drawTable()

关于javascript - 生成随机唯一数据花费的时间太长,占用 100% 的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11842533/

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