sách gpt4 ăn đã đi

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

In lại Tác giả: Walker 123 更新时间:2023-11-29 20:06:17 28 4
mua khóa gpt4 giày 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);
}

câu trả lời hay nhất

您的算法非常低效。当数组几乎填满时,您实际上会进行数百万次无用的迭代,直到您走运并且 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)
} khác {
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
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress