给定一个序列,随机打乱这个序列,新产生的序列和任意一个序列产生的可能性是一样的,就是所谓的完美随机洗牌。
看下面的运行结果:
上面第一列是原数列,下面一行是新产生的打乱的数列。
基本思想:如果n-1个数是乱序的,我们可以使用一个随机数发生器,如C的rand(),那么产生一个数字代表数列下标,把这个下标和n下标的数值对换,那么就产生了n个乱序数。
问题是我们怎么得到n-1个乱序数?
这就是从底到顶的思想方法:如果数列只有一个数,那么可以说这个数就是个乱序数列了。接下来就是2个,然后是3个数……
这是个经典的思想方法,要记住!
最后就得到n个乱序数了。
下面是递归和非递归的程序。
int rangeRandNum(int a, int b)
{
return rand()%(b-a+1) + a;
}
int *shuffleRecur(int cards[], int n)
{
if (n == 1) return cards;
shuffleRecur(cards, n-1);
int k = rangeRandNum(0, n-1);
swap(cards[k], cards[n-1]);
return cards;
}
int *shuffleIter(int cards[], int n)
{
for (int i = 1; i < n; i++)
{
int t = rangeRandNum(0, i);
swap(cards[t], cards[i]);
}
return cards;
}
int main()
{
int tar = 7;
int cand[] = {1,2,3,0,3,2,0,3,1,4,5,3,2,7,5,3,0,1,2,1,3,4,6,8,1,8};
srand(time(NULL));
for (int x:cand)
cout<<x<<" ";
cout<<endl;
int *r = shuffleRecur(cand, sizeof(cand)/sizeof(int));
for (int i = 0; i < sizeof(cand)/sizeof(int); i++)
{
cout<<r[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}
所谓的真随机,也是随机因素的程度高低罢了,比如下面的文章解析:
http://engineering.mit.edu/ask/can-computer-generate-truly-random-number
下面的网站是依靠大气等因素产生随机性非常高的随机:
http://www.random.org/
分享到:
相关推荐
Getting a high score on the GRE Math Subject Test isn’t about memorizing everything there is to know about math–it’s about targeting your test preparation. We teach you only the information you’ll...
杯子破碎模型INP文件 直接导入ABAQUS即可得到模型 模型 材料 装配 。。。。。
Meduza哈希破解 它是一个简单的程序,可让您解密加密的...解密md5,sha1,sha224,sha256,sha384和sha512中的哈希值对于Linux,MAC OS和Windows要求:Python3和txt Wordlist 执行:python3 Meduza_Hash_Craking.py
CATIA R20 crack,It's Service Pack only! To install it you need CATIA V5R20 Win64 to be already preinstalled! 1) install CATIA V5R20 SP6 Win64 Update 2) put JS0GROUP.dll in %installdir%\win_b64\code...
ruoyi-vue-pro-vben 芋道管理后台,基于 vben 最新版本,最新的 vue3 vite4 ant-design-vue 4.0 typescript 语法进行重构开发,支持 springboot3 springcloud 版本
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
该项目是一个基于Java语言开发的水果管理系统设计源码,包含53个文件,其中包括30个Java源文件、13个XML配置文件、6个JAR包文件、1个Git忽略文件、1个属性文件以及1个SQL脚本文件。此系统旨在用于期末答辩展示,展示了开发者对Java编程和系统设计的深入理解。
java回顾、知识整理、拾遗、面试_java-review
mysql主从复制用struts2,spring,hibernate框架,搭建在线考试系统。网站支持(1)老师创建题库,创建题目,查看题目对题目进行增删改,发布考试(选择考试难中易比例),批改学生试卷,查看学生成绩。(.zip
一个基于Go语言实现的搜索引擎项目资源
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于grpc开发的跨语言的交互系统,集成BCS,Brower
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于go语言,使用gocv和socket实现摄像头视频传输项
apache-seatunnel-web-1.0.2
内容概要:本篇文章主要介绍了如何在VMware虚拟化平台上搭建并配置QNX Neutrino实时操作系统的步骤方法。文章首先给出了获取必要的安装文件来源,然后逐步指导用户如何完成QNX在虚拟机中的安装过程以及相关网络参数配置,包括选择适当的网络模式来实现宿主机器与QNX虚拟机之间的通信,具体为设置NAT模式或者桥接模式下的网络参数,如指定静态或动态获取IP地址的方法。 适用人群:对嵌入式开发感兴趣的技术人士,尤其是需要在Linux环境下开展工作的程序员和系统工程师。 使用场景及目标:通过详细的操作指南帮助初学者快速掌握在Windows或Linux主机上利用虚拟机搭建QNX Real-Time Operating System开发环境的基础技能,能够实现在该环境中运行简单的C/C++应用程序。 其他说明:本文不仅适用于QNX初学者作为入门引导资料,也为经验丰富的开发者提供了有关于特定环境配置的重要参考。由于涉及到的具体细节比较多,读者最好边操作边对照文章内容进行练习。同时要注意保持最新版本的虚拟化平台客户端和服务端程序以确保兼容性和稳定性。
stm32中dma结合ad的使用