我有一些较大程序的代码。这部分产生一个范围内的随机数并检查重复。我已经放置了打印语句来帮助处理范围问题。如果检测到重复,我想要生成一个新的随机数。代码的作品,但我认为一个经验程序员会笑它如何无能为力。所以我希望得到一些关于如何改进这些代码的指导。低效代码:防止产生重复的随机数
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. 随机代码种子生产重复
- 2. 防止重复的随机代码生成?
- 3. 随机数发生器产生重复
- 4. 如何防止随机数字发生器重复数字?
- 5. 如何防止重复随机生成的数字
- 6. MD5随机生成代码重复
- 7. 在jscript中创建随机数生成器并防止重复
- 8. 随机选择防止一些重复
- 9. 防止在产生的SQL代码
- 10. 防止随机数多生成一次
- 11. 防止重复码
- 12. 防止jQuery中的代码重复
- 13. 防止EF代码首先重新生成我的生产数据库
- 14. 随机数产生
- 15. 随机数产生
- 16. 机器人 - 产生随机数且无重复
- 17. NUnit如何防止代码重复
- 18. 使随机骰子数组返回唯一attributres /防止重复
- 19. 如何防止重复组合两个随机数字?
- 20. 产生重复结果的随机函数
- 21. 产生非重复数的随机二维阵列,爪哇
- 22. 在java中不产生重复对的随机数对
- 23. UUID随机数的产生
- 24. Javascript - 不重复代码的随机报价生成器
- 25. 随机种子来产生随机数
- 26. Android - 生成非重复的随机数
- 27. 生成非重复的随机数
- 28. 避免生成重复的随机数
- 29. 生成没有重复的随机数
- 30. Java生成非重复的随机数
你可能想借此来的[代码审查(http://codereview.stackexchange.com/)站点。 – cbay
目前提出的这个问题在代码审查中是无关紧要的,因为要审查的代码必须包含在问题_中(而不是它的屏幕截图/图像)。除此之外,如果代码按预期工作并且作者正在寻求改进,Code Review将是适当的。 – Phrancis