我有一些较大程序的代码。这部分产生一个范围内的随机数并检查重复。我已经放置了打印语句来帮助处理范围问题。如果检测到重复,我想要生成一个新的随机数。代码的作品,但我认为一个经验程序员会笑它如何无能为力。所以我希望得到一些关于如何改进这些代码的指导。低效代码:防止产生重复的随机数
0
A
回答
1
-- prepare set of numbers to choose from
local r = {}
for i = c-8, c+12 do
table.insert(r, i)
end
-- take some numbers from the set
for i = 1, #options do
options[i] = table.remove(r, math.random(#r))
end
-- options[] is guaranteed to not contain duplicates
0
下面是当你只打算从大集拉几的数字,并放置在options
替代。它可能可能在这种情况下会比Egor快一点。发生下列情况时,假设整数A
和整数B
之间的随机数,你正在寻找C
独特的数字:
options = {}
local taken = {}
for i = 1,C do
repeat
options[i] = math.random(A,B)
while taken[options[i]] ~= nil
taken[options[i]] = true
end
0
你可以通过设置一个数组来记录是否一些已添加改进或不。这是一个示例伪代码。
//create a list whichs length is the num of possible numbers
numAddedState <- createList((upperBound-lowerBound+1),false)
generatedNums <- []
while length(generatedNums) < requiredLength {
num <- random(lowerBound, upperBound)
if (numAddedState[num - lowerBound]) {
//add the number into list and change the added state of this number to true
generatedNums.append(num)
numAddedState[num - lowerBound] <- true
}
else {
print(num + " is dup")
}
}
return generatedNums
如果您需要生成浮点数,您可以将numAddedState列表替换为存储分组数字的列表列表。通过这样做,您可以减少需要检查的项目数量。 下面是组号使用地板()的一个例子
//create a list whichs length is the num of possible numbers and default value is an empty list
numsAdded <- createList((floor(upperBound)-floor(lowerBound+1)),[])
generatedNums <- []
while length(generatedNums) < requiredLength {
num <- random(lowerBound, upperBound) //generate float point number
for numbers in numsAdded[floor(num)] {
if numbers == num {
print(num + " is dup")
continue
}
}
numsAdded[floor(num)].append(num)
generatedNums.append(num)
}
return generatedNums
相关问题
- 1. 在jscript中创建随机数生成器并防止重复
- 2. 随机选择防止一些重复
- 3. 防止随机数多生成一次
- 4. 随机数产生
- 5. 随机数产生
- 6. 机器人 - 产生随机数且无重复
- 7. 使随机骰子数组返回唯一attributres /防止重复
- 8. 产生非重复数的随机二维阵列,爪哇
- 9. 在java中不产生重复对的随机数对
- 10. UUID随机数的产生
- 11. 生成非重复的随机数
- 12. 生成没有重复的随机数
- 13. 避免生成重复的随机数
- 14. 如何让我的代码产生伪随机整数
- 15. 产生的范围(代码)随机整数
- 16. 想在1-45之间产生随机数而不重复
- 17. 随机长度仅环产生低的数字
- 18. 随机数发生器产生相同的随机数
- 19. PHP代码生成事件在1到20秒之间的随机随机重复中重复
- 20. CUDA随机数产生
- 21. 必须产生随机数
- 22. 生成随机数字而不重复
- 23. 随机数发生器没有重复
- 24. 随机数发生器不重复
- 25. 非重复随机数发生器?
- 26. 一个随机数和客户端随机数是如何防止重放的?
- 27. Python生成随机:uuid v。md5 v。随机效率最高或效率低*
- 28. 生成随机元素位置,并防止在JavaScript中重叠
- 29. 随机数发生器代码问题
- 30. 如何编写只会重复一次随机数的代码?
你可能想借此来的[代码审查(http://codereview.stackexchange.com/)站点。 – cbay
目前提出的这个问题在代码审查中是无关紧要的,因为要审查的代码必须包含在问题_中(而不是它的屏幕截图/图像)。除此之外,如果代码按预期工作并且作者正在寻求改进,Code Review将是适当的。 – Phrancis