5.3-1
改变循环的下标,把第一次循环结果作为初始条件。

RANDOMIZE-IN-PLACE(A)n = A.lengthswap A[1] with A[Random(1, n)]for i = 2 to nswap A[i] with A[Random(i, n)]

初始条件变为序列 A[1…1]A[1\dots1] 以 (n−1)!n!=1n\frac{(n-1)!}{n!}=\frac1n 的概率出现,其他和原算法保持不变。

5.3-2
没有,很显然它不能产生和最开始一样的排列,比如一个 [1,2,3][1,2,3] 的排列使用这个算法之后不可能得到 [1,2,3][1,2,3]。

5.3-3
不能,因为这个算法产生的排列数为 nnn^n 种,而 nn 个元素最多产生 n!n! 种排列,所以此算法产生了一些重复的排列,当 nnn^n 不能被 n!n! 整除时,说明有的排列数多,有的则少,则产生的排列不均匀。

5.3-4
当 j≡offset+i(modn)j \equiv \text{offset} + i \pmod{n} 时,A[i]A[i] 复制到 B[j]B[j] 。概率就是1/n1/n。
这个算法类似于一个很简单凯撒密码,就是从某一个位置开始循环。

5.3-5
从 n3n^3 个数中取 nn 个元素的全排列为:Ann3=n3!(n3−n)!A_{n^3}^n = \frac {n^3!}{(n^3-n)!},总共有(n3)n(n^3)^n 种,所以全部不同的概率:

P(U)=Ann3(n3)n=n3!(n3−n)!(n3)n=n3(n3−1)…(n3−n+1)(n3−n)!(n3−n)!(n3)n≥(n3−n)(n3−n)…(n3−n)(n3)n=(n3−nn3)n=(1−1n2)n≥1−1n

\begin{align} P(U) &= \frac {A_{n^3}^n}{(n^3)^n} = \frac {n^3!}{(n^3-n)!(n^3)^n}\\&= \frac {n^3(n^3-1)\dots(n^3-n+1)(n^3-n)!}{(n^3-n)!(n^3)^n}\\& \ge \frac {(n^3-n)(n^3-n)\dots(n^3-n)}{(n^3)^n}\\& = ( \frac {n^3-n}{n^3} )^n = (1-\frac 1{n^2})^n \ge 1-\frac 1n \end{align}
最后一个推导运用 (1−x)n≥1−nx(1-x)^n \ge 1 - nx。

5.3-6
重新产生新的优先级,直到优先级不重复为止;

5.3-7
由于每次调用都会将 mm 减 11,很显然会调用且只调用 RANDOM mm 次。
然后我们证明 1...n1...n 中的每个元素出现在 SS 中的概率是 mn\frac{m}{n}。采用数学归纳法证明,归纳假设就是RANDOM-SAMPLE返回含有 mm 个元素的集合 SS,集合中每个元素出现的概率是 mn\frac{m}{n}。
当 m=1m=1时,就从 {1...n}\{1...n\} 中返回一个数,当 m=0m=0 时返回空集,集合中包含的每个元素的概率是 00;
假设调用RANDOM-SAMPLE(m-1,n-1)时返回 m−1m-1 个元素的集合 S′S',其中 m−1m-1 个元素来自 {1...n−1}\{1...n-1\},概率是 m−1n−1\frac{m-1}{n-1}。在代码第四行 i=RANDOM(1,n)之后,ii 从{1...n}\{1...n\} 中返回一个数,然后分别考虑集合 SS 中包含 nn 和不包含 nn 的情况。
令 RjR_j 表示调用 RANDOM返回元素 jj,概率为 Pr{Rj}=1/nP_r\{R_j\}=1/n。显然要 j∈Sj\in S 来自两种情况,j∈S′j\in S' 或者 j∉S′j\not \in S' 并且 RjR_j,则

Pr{j∈S}=Pr{j∈S′}+Pr{j∉S′ and Rj}=m−1n−1+(1−m−1n−1)∗1n=mn

P_r\{j\in S\}=P_r\{j\in S'\}+P_r\{j\not \in S' \ and\ R_j\}=\frac{m-1}{n-1}+(1-\frac{m-1}{n-1})*\frac1n=\frac mn
同理 n∈Sn\in S 来自两种情况, RnR_n 或者 RjR_j 并且 j∈S′(j<n)j\in S'(j,则

Pr{n∈S}=Pr{Rn}+Pr{Rj and j∈S′}=1n+n−1n∗m−1n−1=mn

P_r\{n\in S\}=P_r\{R_n\}+P_r\{R_j \ and\ j\in S'\}=\frac 1n+\frac{n-1}{n}*\frac{m-1}{n-1}=\frac mn

注:CLRS 5.4节答案略

CLRS 5.3随机算法相关推荐

  1. [PKUWC2018]随机算法

    题意:https://loj.ac/problem/2540 给定一个图(n<=20),定义一个求最大独立集的随机化算法 产生一个排列,依次加入,能加入就加入 求得到最大独立集的概率 loj25 ...

  2. Dubbo中基于权重的随机算法

    转载自dubbo源码解析-LoadBalance dubbo的源码地址:https://github.com/alibaba/dubbo Dubbo中的RandomLoadBalance采用基于权重的 ...

  3. labuladong的算法小抄pdf_随机算法:水塘抽样算法

    读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...

  4. 算法导论之概率分析和随机算法

    在问题的分析中应用概率技术称为概率分析,前期是对所有可能的输入集合可以做假定.如果无法对输入分布做合理性建模,如果一个算法的行为不只是由输入决定,同时也由随机数生成器所产生的数值决定,则为随机算法.行 ...

  5. java 权重_java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  6. 使用轮转算法求时间片_彩票调度算法,让进程们拼手气? --当操作系统遇上随机算法...

    这篇文章主要想介绍下彩票调度(个人觉得这个算法非常有意思~ ),还有随机算法相对传统算法的一点优势,毕竟现在绝大多数算法都是追求确定性,尤其在操作系统,大家都希望一切可控,所以随机算法的出现听起来有些 ...

  7. 浅浅地谈一下随机算法【poj2454】【poj3318】

    随机算法我也只是稍微接触了一下,就是想写篇博客自己稍微总结一下 其实随机算法也算是一个玄学吧,运气不好还是会wa.但是我们知道,计算机可以在短时间内计算大量的数据,所以碰到正确答案的概率还是挺大的. ...

  8. 权重随机算法的java实现

    一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...

  9. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

最新文章

  1. 编程微刊第五期文章汇总(2018.5)
  2. 【Python】35个经典案例:吃透Python中的if条件语句~
  3. 后端技术:MyBatis 批量插入的 3 种写法
  4. Mybatis-Generator(MBG)教程与Idea的MBG插件
  5. C语言文件读写操作之换行符处理
  6. 为开发者准备的9个实用PHP代码片段(转)
  7. Drupal 6 将于 2016 年 2 月 14 日终结生命周期
  8. ASR开发工作笔记0001---Eclipse DS-5-报错Cannot checkout an uncounted license withini a Windows Terminal Servi
  9. LTE学习:LTE系统中RB、RBG、CCE、REG分别是如何定义的
  10. android view绘制速度,关于android ui的优化 view 的绘制速度
  11. csh sum算总和_如何在R中使用sum()–在R中查找元素的总和
  12. Git 查看本地分支关联的远程分支 git branch -vv
  13. 【语音分析】基于matlab线性预测系数对比【含Matlab源码 557期】
  14. 开源控件My97DatePicker的基本用法
  15. 一个计算机游戏机,我想入手一台游戏主机,ps、xbox、任天堂相比,哪个好?
  16. tar解压tgz文件出现gzip: stdin: not in gzip format报错问题
  17. 干细胞培养的进展和挑战
  18. 美观实用!吹爆这个中文排版开源项目
  19. 使用Hexo平台搭建个人博客
  20. 3个多月的实习体会与总结

热门文章

  1. UBTC主网4月份升级啦
  2. VS 2010中文正式版
  3. 我猜,每个程序员对着电梯都想过调度算法吧!
  4. 【Unity Assetstore】上传插件
  5. 散度和KL散度的介绍
  6. show sga 的描述
  7. 十款免费将PDF转Word的软件工具集
  8. android4.2家长密码,家长维护学生资料
  9. 使用ANTLR进行语法分析
  10. 两款很棒的工具箱App