`
jgsj
  • 浏览: 960484 次
文章分类
社区版块
存档分类
最新评论

Craking the coding interview 面试题:完美随机洗牌

 
阅读更多

给定一个序列,随机打乱这个序列,新产生的序列和任意一个序列产生的可能性是一样的,就是所谓的完美随机洗牌。

看下面的运行结果:


上面第一列是原数列,下面一行是新产生的打乱的数列。

基本思想:如果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/





分享到:
评论

相关推荐

    杯子破碎模型brittle cracking

    杯子破碎模型INP文件 直接导入ABAQUS即可得到模型 模型 材料 装配 。。。。。

    Meduza-Hash-Cracking:这是一个简单的程序,可让您解密加密的密码

    Meduza哈希破解 它是一个简单的程序,可让您解密加密的...解密md5,sha1,sha224,sha256,sha384和sha512中的哈希值对于Linux,MAC OS和Windows要求:Python3和txt Wordlist 执行:python3 Meduza_Hash_Craking.py

    CATIA R20 crack

    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...

    2014年311教育学专业基础综合答案解析.pdf

    教育学考研,考研真题,全国硕士研究生统一考试教育学专业基础综合真题及解析,311历年真题,参考答案,答案解析。教育学统考。

    大语言模型安全测试方法

    4月16日联合国日内瓦总部万国宫,由世界数字技术院(WDTA)与云安全联盟大中华区(CSA GCR)联合主办第27届联合国科技大会AI边会上,世界数字技术院(WDTA)发布了两项具有重要意义的国际标准:“生成式人工智能应用安全测试标准”和“大语言模型安全测试方法”。这是国际组织首次在生成式AI应用安全、大模型安全领域发布国际标准,为业界提供了统一的测试框架,标准的发布将对人工智能领域产生深远影响,推动人工智能技术的安全、可靠发展。 这两大标准由云安全联盟大中华区研究院副院长黄连金带领的专家团队编制而成,他们来自CSA大中华区、OpenAI、蚂蚁集团、谷歌、微软、亚马逊、英伟达、OPPO、科大讯飞、百度、腾讯、加州大学伯克利分校、芝加哥大学、香港科技大学等数十家单位,体现了业界的广泛协作与集体智慧。 云安全联盟大中华区主席、世界数字技术院执行理事长李雨航院士发布时介绍,“生成式人工智能应用安全测试标准”为测试和验证生成式AI应用的安全性提供了一个框架,特别是那些使用大语言模型构建的应用程序。它定义了人工智能应用程序架构每一层的测试和验证范围,确保AI应用各个方面都经过严格的安全性和合规性

    基于ssm电商网站的设计与实现(部署视频)_kaic.zip

    目 录 目 录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 MYSQL数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可扩展性指标 3.2.3 健壮性指标 3.2.4 安全性指标 3.3 系统流程分析 3.3.1 操作流程分析 3.3.2 登录流程分析 3.3.3 信息添加流程分析 3.3.4 信息删除流程分析 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1用户信息管理 5.2 商品信息管理 5.3商品分类管理 5.1商品资讯管理 6 系统测试 6.1 系统测试的特点  6.2 系统功能测试 6.2.1 登录功能测试 6.2.2 添加类别功能测试 6.3 测试结果分析 结 论 致 谢 参考文献

    Comfast CF-924AC V3无线网卡驱动

    https://editor.csdn.net/md/?articleId=137978326文章对应USB 1300M无线网卡驱动,使用方式请参考博文。本驱动为博文对应的RDK X3平台所用,其它平台根据博文链接下载源码编译。

    2024-2030全球与中国实时老化测试市场现状及未来发展趋势.docx

    2024-2030全球与中国实时老化测试市场现状及未来发展趋势

    fieldmeta基于springboot的字段元数据管理,通用代码生成框架.zip

    springboot框架 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置,简单来说就是你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时才需要对约定进行替换配置。 特征: 1. SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。 2,使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。 3.自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们。 4.使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了

    课设&大作业-基于SSM和SpringBoot的毕业设计动态旅游网站&gt;.zip

    【资源说明】【毕业设计】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!

    同济大学-答辩通用PPT模板(1)我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    基于tensorflow2+django的Python本科毕业设计图像翻译系统源码.zip

    高分设计源码,详情请查看资源内容中使用说明 高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明

    基于java实现的车联网OBD行车数据智能分析系统

    基于车联网OBD行车数据智能分析系统 **report-forms-core** -- 基础模块 **report-forms-hadoop** -- mapreduce任务(数据清洗) **report-forms-hive** -- hive任务(数据统计) **report-system-visualization** -- 数据可视化

    SpringBoot大学生就业信息管理源码.rar

    SpringBoot大学生就业信息管理源码.rarSpringBoot大学生就业信息管理源码.rar

    课设&大作业-毕业设计项目基于Vue等技术实现。.zip

    【资源说明】【毕业设计】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!

    嵌入式linux-简历模板.doc

    嵌入式linux-简历模板.doc

    c语言实现单链表 (数据结构与算法 严蔚敏版 作业)完整源码

    c语言实现单链表 完整源码 ,内含测试代码,用 VS 、GCC 编译器 打开,直接可以运行 。代码详细说明地址:https://blog.csdn.net/weiweiliude2/article/details/138145964

    西北农林科技大学-PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    Java SE Development Kit 11.0.23 macOS ARM64 DMG Installer

    Java SE Development Kit 11.0.23 macOS ARM64 DMG Installer

    2024-2030全球与中国冷冻有机毛豆市场现状及未来发展趋势.docx

    2024-2030全球与中国冷冻有机毛豆市场现状及未来发展趋势

Global site tag (gtag.js) - Google Analytics