首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阵元随机序列

阵元随机序列
EN

Stack Overflow用户
提问于 2012-07-13 07:30:16
回答 2查看 316关注 0票数 0

可能重复: 这是Fisher-Yates洗牌的C实现正确吗?

为了在我的应用程序中模拟不同顺序的输入序列,我想为数组输入生成一个随机序列列表。例如,给定一个arr10,默认的序列是0,1,..,8,9,但是,我想将序列操作成随机顺序,例如,2,4,5,1,9,0,3,7,8,6。

我认为rand()会在0-9之间生成一个随机值,但它不能保证每个元素至少生成一次。在这种情况下,我正在考虑下面的伪,但是否有更好的方法产生随机输入序列,并确保在给定范围内的每个数字至少产生一次?

代码语言:javascript
运行
复制
round #1:  
  generate a random number within 0-9.  
    let say 2 is selected  

round #2:  
    generate a random number within 0-1  
    generate a random number within 3-9  
    let say 0 and 4 are selected  

round #3:  
    generate a random number within 1  
    generate a random number within 3  
    generate a random number within 5-9  
    let say 1, 3, 7 are selected  

round #4:  
    generate a random number within 5-6  
    generate a random number within 8-9  

continue until 10 numbers are selected
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-13 07:35:16

查看费舍-耶茨洗牌算法这里以满足您的需求。

票数 2
EN

Stack Overflow用户

发布于 2012-07-13 07:34:32

以下是另一种方法:

  1. 创建由10个元素组成的数组,并用要随机化的值填充它(0、1、.、9)。
  2. 将k从9向下迭代到0,并选择一个随机数索引= rand(k)。
  3. 将位置k处的元素与位置索引处的元素交换。

最后,数组将包含原始值的随机排列,这正是您想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11466008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档