有没有找到第i个重排的有效算法?


9

这是这个问题的背景。我和朋友正在玩一个游戏,每个人都需要给别人一些礼物。为了确定谁应该给谁礼物,我们决定抽签。但是问题是,某人最终可能会给自己礼物,这并不好笑。您可以看到此类不幸人员的预期人数为1,因此这种情况经常发生。

为此,重新安排似乎是一个很好的选择。如果我可以公平地产生一种重新安排,那么我就可以选择一种重新安排,并用它来决定谁给谁礼物。

随机重排产生可以用拉斯维加斯方法完成。但是问题是,它只有预期的多项式运行时间。因此我遇到了发现第i个重排的问题。如果我可以在[1,D_n]中随机选择一个i,并使用一些最坏情况的多项式时间(有效)算法来获取第i个重排,那么就可以了。


1
您能解释这个问题的动机吗?即,您为什么对这个问题感兴趣?
卡夫

2
也许您想扮演秘密的圣诞老人并且不愿意冒险:)
Lev Reyzin

您能添加一行关于您所说的“失序”是什么意思吗?
维杰D

Answers:


9

实际上,这可能是个好问题,但目前的形式是错误的。众所周知的用于生成随机排列的算法具有期望的线性时间,但是找到最坏情况的多项式时间算法可能是一个悬而未决的问题。

参见例如:http : //www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf(和幻灯片:http : //www.lsi.upc.edu/~conrado/research/talks/analco08.pdf


这似乎是我的正确答案。
Suresh Venkat 2012年

10
en.wikipedia.org/wiki/Derangement中描述的递归!n =(n-1)(!(n-1)+!(n-2))不会立即导致针对随机的最坏情况多项式算法代?
David Eppstein 2012年

是的,你是对的。我当时认为这是一个小问题,因为在最坏的情况下,您必须能够在{1,...,n}的任意子集中生成随机数,但这很容易做到。
didest 2012年

0

为什么不为每个位置i随机选择除i之外的所有元素?例如,您可以从[0..n-2]中选择原始数组的索引,并且如果j> = i,则使用j + 1


3
这是否使所有混乱的可能性均等?
David Eppstein

哦,要点-这会将元素放在数组的后面,优先放在数组的前面。如果您要以随机顺序填充目标阵列中的插槽,则所有排列错乱的可能性都是相同的(对称性)。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.