《编程珠玑》--读书笔记12章:取样问题

2023-11-07

 

 第十二章,作者提出了一个问题:程序的输入包含两个整数m和n,其中m < n。输出是0~n- 1范围内的m个随机整数,不允许重复

有两种方法达到目的:

1.思路:从r个剩余的整数中选出s个,以概率s/r来选择下一个数:

比如,m=2,n = 5,选择第一个数的时候:rand()%n < m是否成立。0是否被选中,那么依赖于rand()%5是否小于m。A:如果成立,那么输出0;B:不成立,不输出0;

下一步:就判断1是否要被输出:

在A发生的情况下,1有1/4的概率输出;

在B发生的情况下,1有2/4的概率输出;

两种情况的不同,实际上是rand()%n < m此不等式中的m不同;

A:m = 1;B : m = 2; n 在两种情况下都是n - 1(相比于判断0是否输出的时候,因为总个数减少了一个)

不难写出下面的函数:

注意在不等式成立的时候,m要自减;

2:按序列生成数,然后再随即交换(类似于洗牌程序)

 

 

两种方法的比较:

两种方法的结果都达到了,但是有细微的区别:

1.方法1输出的是按升序的输出的随机数,方法2输出的是乱序的随机数

2.方法2需要一个额外的数组来存放,空间复杂度为O(N),而方法1没有此限制

测试程序及其结果:

 

测试结果:

 

 

genknuth:  9  12  22  34  39  46  50  74  91  96 
genbyme:  26  79  5  90  76  89  82  73  59  39 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《编程珠玑》--读书笔记12章:取样问题 的相关文章

  • Objective-C 中#import 和#include 有什么区别?

    Objective C 中 import 和 include 之间有什么区别 有时您应该使用其中之一而不是另一个 是否已弃用 我正在阅读以下教程 http www otierney net objective c html preamble
  • 可以拆分PHP配置文件php.ini吗?

    任何使用 php 的人都知道 php ini 是一个大文件 当您需要更改 ssh 时可能会让人头疼 例如我可以使用更改 nginx confinclude指令将启用站点的目录下的所有文件加载到主 nginx conf 中 所以我的问题很简单
  • 我应该按照什么顺序包含头文件?

    我是编程新手 在我开始使用大量头文件后 头文件的主题让我陷入了困境 除此之外 我正在尝试使用预编译头 我还使用 SFML 库 因此我还必须包含那些标头 现在我有 stdafx h main cpp 然后是 A h A cpp B h B c
  • Jekyll:包含 _includes 之外的目录中的文件

    我有一个名为 patterns在我的 Jekyll 网站中 其结构通常如下所示 includes layouts site patterns index html 我需要保留 patterns外部目录 includes出于多种原因 但主要是
  • 记录 C(或可能是 C++)中 X 宏的使用模式的良好参考资料是什么?

    的基本定义和示例以及一些参考资料X Macros http en wikipedia org wiki C preprocessor X Macros 在此给出C 预处理器的维基百科条目 http en wikipedia org wiki
  • Zk如何通过id到达包含的.zul页面组件?

    我无法通过包含的 zul 页面中的 id 访问组件 我有一个带有控制器的 main zul 我需要通过 java 控制器类获取包含的 zul 页面中的一个组件 但它返回 null 我知道包含的方法会创建新的 id 空间 但是有什么方法可以获
  • 为什么 Mac 上的 clang 会自动包含一些缺失的标头?

    我注意到clang 包括缺少的标头
  • C++ 中的名称冲突

    在编写一些代码时我遇到了这个问题 include
  • 根路径不适用于 php include

    在链接开头获取根文件夹在 php include 中不起作用 例如 example example php 解决办法是什么 我假设根文件夹是指您的网络文档根目录 而不是文件系统根目录 为此 您可以 将 Web 根文件夹添加到包含路径 htt
  • PHP 基于当前文件路径动态包含

    我想找到一种方法来包含基于当前文件路径的一些文件 例如 我有 website com templates name1 index php 这个 index php应该是一个独特的文件 我将在不同深度的许多不同目录中使用它 所以我想让代码通用
  • 保存 .php 文件并保存包含内容(可能)

    设置 我有一个标准 php 文件 index php 其中包含两个包含内容 一个用于页眉 header php 一个用于页脚 footer php index php 文件如下所示 索引 php h2 Hello h2 p class ed
  • 多次重复使用同一页面

    是否可以多次重用一页附加到不同的对象 我有一个页面 您可以输入个人信息 姓名 地址 社交号码 连接到一个 bean 潜在客户 在某些情况下 我必须收集链接的个人信息 信用评分示例 个人和担保人 所以我想与 2 个包含一起使用 但是我如何确保
  • 如何在函数中使用include?

    我有一个大函数 我希望仅在需要时加载 所以我认为使用 include 是正确的选择 但我还需要几个支持函数 仅在 go do it 中使用 如果它们位于包含的文件中 我会收到重新声明错误 参见示例 A 如果我将支持函数放在 include
  • 如何在 Yii 中安装 AWS SDK

    我想在我的 Yii 项目中使用适用于 PHP 的 Amazon AWS SDK 但是我收到各种包含错误 例如include CFCredentials php failed to open stream No such file or di
  • 像#include 这样的预处理器指令只能放在程序代码的顶部吗?

    我已经用过 pragma函数内的指令没有错误或警告 特别是 pragma pack 但是下面的代码显示了警告incompatible implicit declaration of built in function printf int
  • 如何在 PHP 中包含一个类 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有文件index php 我想包含文件class twitter php在里面 我怎样才能做到这一点 希望当我将以下代码放入 index
  • PHP 解析包含

    我包括一个文件init php它定义路径常量 所以如果我包括init php在一个文件中 索引 php 然后在另一个文件中 布局 header php is init php在添加到这些文件之前进行解析 还是添加到父文件中 然后将父文件作为
  • 当包含Windows.h导致错误A不是B的成员时

    以下代码是我的包含文件 但是 我发现当我使用 include
  • clojure 要求语法原理

    我很难理解 因此记住 此处描述的 clojure require 语法 http clojuredocs org clojure core 1 3 0 clojure core require http clojuredocs org cl
  • 包含包含文件的 php 文件

    这是目录结构 global php includes class bootstrap php includes init php plugins myplugin php 这是这些文件中的代码 start php require inclu

随机推荐

  • Spring Boot使用slf4j+Logback进行日志记录

    Spring Boot使用slf4j Logback进行日志记录 个人总结使用logback步骤 1 yml或 properties配置日志文件的所在路径和输出日志的范围 级别 2 配置好logback xml文件的各项参数 包括日志输出格
  • 利用vscode--sftp,将本地项目/文件上传到远程服务器中详细教程

    1 首先在 vscode 中下载 sftp 2 然后在 vscode 中打开本地将要上传的项目或文件 3 安装完后 使用快捷键 ctrl shift P 打开指令窗口 输入 sftp config 回车 在当前目录中会自动生成 vscode
  • 最小生成树笔记(Prim算法&&Kruskal算法)

    1 最小生成树 最小生成树 Minimum Spanning Tree 简称MST 是指 在一个连通无向图中 找到一个包含所有顶点的树 且该树的所有边的权重之和最小 换句话说 最小生成树是原图中的一个子图 它包含所有顶点 并且连接所有顶点的
  • OpenCV 4.0.0学习笔记 (一) 图像与视频的读写

    目录 读取图片 imread方法 图片读取出错处理 读取的图片属性 写入图片 imwrite方法 带透明度的png图像 读取视频 capture结构体 下一帧与释放 读取视频属性 get 方法 写入视频 VideoWriter类 显示窗口W
  • 使用THREE.js制作一款3D游戏

    使用THREE js制作一款3D游戏 本文是基于某位大神使用three js设计游戏的学习心得与知识分享 The Making of The Aviator Animating a Basic 3D Scene with Three js
  • ubuntu 安装微软雅黑和 Consolas 字体

    https www mycode net cn platform 741 html ubuntu 安装微软雅黑和 Consolas 字体 2条回复 Consolas 字体用来写代码真的是非常舒服 可惜 ubuntu 系统中默认并没有这个字体
  • Error:(15, 13) java: No property named “cType” exists in source parameter(s). Did you mean “CType”?

    实体 Data public class private String cType Mapping target type source cType 这问题是由于实体类的属性首字母小写第二个字母大写导致 source的值首字母改为大写就可以
  • 深圳杯数学建模2020c题_2020数学建模B题

    2020数学建模B题 本人咸鱼一条 参加过19年数学建模 当时在B题和C题之间选择 最后还是选择了C题 其实是B题不会写 看着去年九月参加比赛的教室 今年也坐着三人一组的建模小队 查资料 分析数据 编程 触景生情 我又老了一岁 心血来潮也看
  • NETCore入门系列(AOP之ActionFilter)

    文章目录 一 ActionFilter入门 使用场景 官方介绍 实操 二 Filter传参 TypeFilter ServiceFilter 三 Filter作用域 四 源码 一 ActionFilter入门 使用场景 一般用于Action
  • 文本转语音的接口(开放免费)

    百度的开放转换接口 http tts baidu com text2audio lan zh ie UTF 8 spd 4 text 你好啊 听起来好憨啊 lan 语言类型 lan en 英文 lan zh 中文 ie 文字编码方式 spd
  • 使用C++刷算法题的简明教程

    本篇博客参考自柳婼大神的 从放弃C语言到使用C 刷算法的简明教程 1 使用C 刷算法的好处 在具备C语言的前提下 学习C 并使用它刷算法题的学习成本非常低 只需要几个小时 C 向下兼容C C语言里的语法大部分都可以在C 文件中运行 所以学习
  • 个人知识体系思维导图_职场必备思维导图:提升能力、知识体系、决策思维、领导力......

    图片来源 图虫创意 让你快速成长的职场思维 思维导图 MBA智库文档 你需要具备哪些技能 1 你需要建立系统的思维方式和做事方法 2 你需要了解不管是口碑还是硬广渠道的推广效果 3 你需要有管理能力 很好的沟通能力 4 你需要具备总结分析的
  • js刷新当前页面的5种方式

    1 reload reload 方法 该方法强迫浏览器刷新当前页面 语法 location reload bForceGet 参数 bForceGet 可选参数 默认为 false 从客户端缓存里取当前页 true 则以 GET 方式 从服
  • 设计模式之状态模式

    一 背景 状态这个词汇我们并不陌生 在日常生活中 不同时间就有不同的状态 早上起来精神饱满 中午想睡觉 下午又渐渐恢复 晚上可能只想睡觉 这就对应着一天中不同的状态 二 定义 状态 State 模式的定义 对有状态的对象 把复杂的 判断逻辑
  • Rancher 2.2.2 - HA 部署高可用k8s集群

    对于生产环境 需以高可用的配置安装 Rancher 确保用户始终可以访问 Rancher Server 当安装在Kubernetes集群中时 Rancher将与集群的 etcd 集成 并利用Kubernetes 调度实现高可用 为确保高可用
  • 已知两点经纬度,计算两点间的距离

    通过两点的经纬度计算两点之间的距离 def getDistance lng1 lat1 lng2 lat2 param lng1 A点的经度 param lat1 A点的纬度 param lng2 B点的经度 param lat2 B点的纬
  • 房屋交接时需要注意些什么?

    在房屋交接时应该注意以下几点 一 进行水电煤气抄表 并计算金额 确定上下家各自承担的份额 上下家应在双方交接房屋时做好此项工作 以免交房后双方就这些小费用产生扯皮 二 办理有线电视的结算和更名手续 买卖双方在房屋买卖交易后一般不会忘了结算水
  • C++ 学习之旅(1)——编译器Compiler

    简单来说 由C 代码文件生成可执行文件的过程如下 mermaid svg GQamCVEXMVkYEemz font family trebuchet ms verdana arial sans serif font size 16px f
  • C语言字符串的经典例题

    1 统计单词的个数 include
  • 《编程珠玑》--读书笔记12章:取样问题

    第十二章 作者提出了一个问题 程序的输入包含两个整数m和n 其中m lt n 输出是0 n 1范围内的m个随机整数 不允许重复 有两种方法达到目的 1 思路 从r个剩余的整数中选出s个 以概率s r来选择下一个数 比如 m 2 n 5 选择