由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求问一道数组shuffle的问题
相关主题
how to shuffle a deck of cards?Amazon On-site ,kindle组有什么要特别注意的地方么?+前两轮电面面经
数组Shuffle 那道题一道大数组shuffle的题
shuffle card 算法这道题太神奇了,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),
card shuffle的算法我自己都想不出来为啥这个swap不可以?
Anyone knowing how to shuffle a deck of cards in Java?请教一题算法小问题
刚看了下shuffle算法。发现有个问题java: use vector to shuffle a deck of Card 问题
问一下shuffle card问题startup onsite求祝福 + 面经
一道面试题:数组 in-place shuffle问个amazon面试题
相关话题的讨论汇总
话题: list话题: shuffle话题: swap话题: 出错话题: 数组
进入JobHunting版参与讨论
1 (共1页)
c********l
发帖数: 8138
1
数组shuffle,经典的Fisher and Yates的算法是
public static void shuffle(List list, Random rnd) {
int size = list.size();
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
}
}
如果将
swap(list, i-1, rnd.nextInt(i));
改成
swap(list, i-1, rnd.nextInt(N));
会出错。
具体出错的原因是什么?怎么描述这种现象?
l*****a
发帖数: 14598
2
shuffle的目标是每次确定当前位置上的元素,然后处理下一个
你用Random.nextInt(N)显然不满足这个

【在 c********l 的大作中提到】
: 数组shuffle,经典的Fisher and Yates的算法是
: public static void shuffle(List list, Random rnd) {
: int size = list.size();
: for (int i=size; i>1; i--)
: swap(list, i-1, rnd.nextInt(i));
: }
: }
: 如果将
: swap(list, i-1, rnd.nextInt(i));
: 改成

c********l
发帖数: 8138
3
为什么不满足“每次确定当前位置上的元素,然后处理下一个”这一个条件,
会导致出错?
换句话,每次在当前位置上元素时,瞎抓一气,岂不是更random吗?

【在 l*****a 的大作中提到】
: shuffle的目标是每次确定当前位置上的元素,然后处理下一个
: 你用Random.nextInt(N)显然不满足这个

j*****y
发帖数: 1071
4
可以使试试 {1, 2, 3} ,用第二种方法我好像得出 出现 1 2 3 这种排列的概率是
4 /27. 等概率的话应该是 1 / 6

【在 c********l 的大作中提到】
: 数组shuffle,经典的Fisher and Yates的算法是
: public static void shuffle(List list, Random rnd) {
: int size = list.size();
: for (int i=size; i>1; i--)
: swap(list, i-1, rnd.nextInt(i));
: }
: }
: 如果将
: swap(list, i-1, rnd.nextInt(i));
: 改成

c********l
发帖数: 8138
5
我是用统计的方法证明了模拟xxxxxx遍之后,得出的shuffle结果是biased
但是有没有用数学理论能解释现象的?
而且大数模拟之后,每个初始element的分布也不一样

【在 j*****y 的大作中提到】
: 可以使试试 {1, 2, 3} ,用第二种方法我好像得出 出现 1 2 3 这种排列的概率是
: 4 /27. 等概率的话应该是 1 / 6

d*******3
发帖数: 58
6
总共有n!种排列,第二种算法产生的排列数是n^n的,必然有重复,要保证等概率的至
少要有保证n^n 能整除 n!,但这个反例就很多了。。。
j*****y
发帖数: 1071
7
不错.

【在 d*******3 的大作中提到】
: 总共有n!种排列,第二种算法产生的排列数是n^n的,必然有重复,要保证等概率的至
: 少要有保证n^n 能整除 n!,但这个反例就很多了。。。

r**h
发帖数: 1288
8
言简意赅,赞

【在 d*******3 的大作中提到】
: 总共有n!种排列,第二种算法产生的排列数是n^n的,必然有重复,要保证等概率的至
: 少要有保证n^n 能整除 n!,但这个反例就很多了。。。

c********l
发帖数: 8138
9
thanks

【在 d*******3 的大作中提到】
: 总共有n!种排列,第二种算法产生的排列数是n^n的,必然有重复,要保证等概率的至
: 少要有保证n^n 能整除 n!,但这个反例就很多了。。。

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个amazon面试题Anyone knowing how to shuffle a deck of cards in Java?
Randomly shuffle decks of cards刚看了下shuffle算法。发现有个问题
荷兰国旗问题的扩展问一下shuffle card问题
问个题:大小N的数组有 N-k个不同的数, 范围0-N, 找missing的k个一道面试题:数组 in-place shuffle
how to shuffle a deck of cards?Amazon On-site ,kindle组有什么要特别注意的地方么?+前两轮电面面经
数组Shuffle 那道题一道大数组shuffle的题
shuffle card 算法这道题太神奇了,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),
card shuffle的算法我自己都想不出来为啥这个swap不可以?
相关话题的讨论汇总
话题: list话题: shuffle话题: swap话题: 出错话题: 数组