【发布时间】:2015-09-15 07:06:53
【问题描述】:
给出以下解释
问题:我们需要一种有效且公正的方式来生成随机 顶点对执行随机顶点交换。提出一个有效的 从 {1 上的 (n 2) 个无序对生成元素的算法, . . . , n} 均匀随机。
解决方案:均匀生成随机结构令人惊讶 微妙的问题。考虑以下过程来生成随机 无序对: i = random int(1,n-1); j = 随机 int(i+1,n);
很明显,这确实会生成无序对,因为 i
但是它们是统一的吗?答案是不。发生的概率是多少 生成对(1,2)?有 1/(n−1) 的机会得到 1, 然后有 1/(n−1) 的机会得到 2,得到 p(1,2) = 1/(n - 1)2。但是得到 (n − 1,n) 的概率是多少?再次,那里 有 1/n 的机会获得第一个数字,但现在只有一个 第二个候选人的可能选择!这对将出现 n 次 比第一次更频繁!问题是较少的对开始 大数字比小数字。我们可以通过以下方式解决这个问题 准确计算无序对如何以 i 开头(确切地说 (n - i)) 并适当地偏置概率。第二个值可以是 从 i + 1 到 n 均匀随机选择。 但是,让我们利用以下事实,而不是通过数学计算 均匀地随机生成 n2 个有序对很容易。随便挑 两个相互独立的整数。忽略排序(即 , 将有序对置换为无序对 (x,y) 使得 x
在上面的段落中“问题是较少的对以开头 大数字比小数字。”这不应该是更多对而不是更少对
在上面的段落中“我们可以通过精确计算无序对如何以 i 开头(确切地说 (n - i)) 来解决这个问题”不应该让我知道有多少无序对而不是多少无序对
编辑
- 在上一段“忽略排序(即 , 将有序对置换为无序对 (x,y) 使得 x
谢谢
【问题讨论】:
-
你检查过the errata吗?
-
我做了,但显然我有它的旧版本。所以感谢您提供的链接。您提供的勘误表仍然无法解释问题 1。
标签: algorithm data-structures random-sample