boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个Shuffle的问题
相关主题
how to shuffle a deck of cards?
问个随机数的问题
关于高德纳的洗牌算法
问一下shuffle card问题
谁还记得这道面试题吗?
请教个弱题:random generator: from 1~5 to 1~7
编程关于随机数的抽取
srand()的问题
今天的G电面面经
关于那个随机数的
相关话题的讨论汇总
话题: shuffle话题: rand话题: ways话题: 算法话题: crls
进入JobHunting版参与讨论
1 (共1页)
e***l
发帖数: 710
1
以下算法可以产生均匀的随机数组(<=>表示交换)
for i=1 to n, A[i] <=> A[rand(i..n)] ---方法A
那么这个算法呢
for i=1 to n, A[i] <=> A[rand(1..n)] ---方法B
f***g
发帖数: 214
2
不行,看CRLS
e***l
发帖数: 710
3
CRLS上面没有证明,要怎么证?
z**c
发帖数: 625
4
这个其实很直观,i前面的相当于已经摆好的;i后面的继续随机。你如果跟整个数组随
机选一个出来交换,那之前的部分结果不都破坏了嘛。

【在 e***l 的大作中提到】
: 以下算法可以产生均匀的随机数组(<=>表示交换)
: for i=1 to n, A[i] <=> A[rand(i..n)] ---方法A
: 那么这个算法呢
: for i=1 to n, A[i] <=> A[rand(1..n)] ---方法B

e***l
发帖数: 710
5
对于这个不对的算法 for i=1 to n, A[i] <=> A[rand(1..n)]
怎么严格证这样不是均匀的?楼上只能说明之前的证法行不通。
我试图去证原始的那个排列shuffle后出现的概率不等于1/n!,但没想出来
t****0
发帖数: 235
6
zt
- the first card can be in 52 ways, the second in 51 ways etc...
So, there are 52 * 51 * 50 * ... 1 ways!
i.e. 52! ways
( 52 factorial) ways
e***l
发帖数: 710
7
理论上最多只有n!种排列,所以n^n中有重复的,因为n^n>n!
l*********r
发帖数: 674
8
为什么非要可能排列的1/n!呢?如果从单个A[i] 的概率来说,两种不都是1/n么?
shuffle的目的不就是要让每个位置都是1/n么?

【在 e***l 的大作中提到】
: 理论上最多只有n!种排列,所以n^n中有重复的,因为n^n>n!
F**********r
发帖数: 237
9
请教crls是啥?

【在 f***g 的大作中提到】
: 不行,看CRLS
e***l
发帖数: 710
10

每个位置1/n不充分。见习题5.3.4
1/n!等概率是均匀随机序列的定义,即每种排列出现的概率相等,都等于1/n!
CRLS就是算法导论那本书

【在 l*********r 的大作中提到】
: 为什么非要可能排列的1/n!呢?如果从单个A[i] 的概率来说,两种不都是1/n么?
: shuffle的目的不就是要让每个位置都是1/n么?

q******g
发帖数: 31
11
分析得有道理,谢谢!
i****d
发帖数: 35
12
反证
如果第二个是等概率的,那么 n! | n^n
但是后面这个式子不成立
因此不对

【在 e***l 的大作中提到】
: 以下算法可以产生均匀的随机数组(<=>表示交换)
: for i=1 to n, A[i] <=> A[rand(i..n)] ---方法A
: 那么这个算法呢
: for i=1 to n, A[i] <=> A[rand(1..n)] ---方法B

1 (共1页)
进入JobHunting版参与讨论
相关主题
关于那个随机数的
请教一个随机数,概率相关的问题
请教一道产生随机数的问题
G家onsite 随机数一题
问一个面试题
Randomly shuffle decks of cards
一道大数组shuffle的题
关于排列组合的总结
算法题:如何将排列映射到编码?
问个算法题之被dynamic programming打败了
相关话题的讨论汇总
话题: shuffle话题: rand话题: ways话题: 算法话题: crls