【数学】彻底打乱数组中元素的次序
来源:互联网 发布:凯立德车载导航软件 编辑:程序博客网 时间:2024/05/07 10:02
题目:《程序员面试金典(第5版)》P332
编写一个函数,洗一副牌。要求做到完美洗牌,换言之,这副牌52! 种排列组合出现的概率相同。假设给定一个完美的随机数发生器。
提示:问题实际上等价为彻底打乱某个数组。
方法一:该方法和“蓄水池抽样算法”有类似之处。
void Swap(int &a,int &b){int temp=a;a=b;b=temp;}bool shuffleArrayInteratively(int* a,int len){if(a==nullptr || len<=0)return false;for(int i=1;i<len;i++){//PerfectRand()的作用是随机生成一个大于等于0、小于等于i的整数,由出题者提供int randnum = PerfectRand(i); Swap(a[randnum],a[i]);}return true;}
方法二(更加简单明了):已随机序列从右向左扩大,未随机序列中随机选一个,与未随机序列的尾元素交换。
若要解决“从n个数中随机选出m个数”这个问题,则方法二中数组最后的m个数,就是随机选出的m个数。
bool shuffleArrayInteratively2(int* a,int len) { if(a==nullptr || len<=0) return false; for(int i=len-1;i>0;i--) { //PerfectRand()的作用是随机生成一个大于等于0、小于等于i的整数,由出题者提供 int randnum = PerfectRand(i); swap(a[randnum],a[i]); } return true; }
0 0
- 【数学】彻底打乱数组中元素的次序
- NSMutableArray 随机打乱元素次序
- 二维数组中元素遍历次序
- UE4数组的遍历、数组元素位置打乱 foreachloop、shuffle
- 请问如何将数组中元素顺序打乱
- JavaScript随机打乱数组元素的位置(洗牌算法)
- 将一个JS数组彻底打乱顺序
- 随机取数组,打乱数组元素
- OC中数组打乱顺序
- random_shuffle函数改变vector容器中元素的次序
- 打乱数组的顺序 c#
- 打乱数组的顺序 c#
- JS打乱数组的方法
- 数组打乱顺序的方法
- C之有趣-数组中不改变次序的排名
- 不打乱顺序的情况下去除数组中的重复元素
- 完美洗牌问题(打乱数组间各元素的顺序)
- C++将数组的元素顺序随机打乱(条件概率证明算法充分随机)
- poj 2914 Minimum Cut(无向图最小割)
- Log4J使用教程
- OC基础总结
- SimpleAdapter响应item点击事件
- 关于import matplotlib.pyplot as plt报错问题的解决方法
- 【数学】彻底打乱数组中元素的次序
- 设置button上的label距离四个边的距离
- awakeFromNib小结
- AFNetworking 文件上传Data,File图片,文件等上传
- UVa 130 - Roman Roulette
- unity3d性能优化汇总
- 实现图片拉伸
- android 录音
- Using_server-sent_events