i番目の混乱を見つけるための効率的なアルゴリズムはありますか?


9

これがこの質問の背景です。友達と私は、誰もが他の人に贈り物をする必要があるゲームをプレイしていました。だれがだれにプレゼントするかを決めるため、抽選をすることにしました。しかし問題は、誰かが彼/彼女自身に贈り物を与えることになりかねないということです。このような不幸な人々の予想される数は1であることがわかります。したがって、これは非常に頻繁に発生します。

この目的のために、整理は非常に適しているようです。私が混乱をかなり生成することができるならば、私はただ1つの混乱を選び、それを使って誰が誰に贈り物を与えるかを決定することができます。

ランダム化された乱れ生成は、ラスベガスの方法で行うことができます。しかし問題は、期待される多項式の実行時間しか持っていないことです。それで私はi番目の混乱を見つけるというこの問題に行きました。[1、D_n]でiをランダムに選択し、いくつかの最悪の場合の多項式時間(効率的)アルゴリズムを使用してi番目の配列異常を取得できれば、それは完了です。


1
質問の動機を説明していただけませんか?つまり、なぜこの質問に興味があるのですか?
カヴェ

2
おそらく、あなたは秘密のサンタをプレイしたいと思っており、どんなチャンスも望んでいません:)
Lev Reyzin

混乱によってあなたが何を意味するかについての行を追加してもらえますか?
Vijay D

回答:


9

実際、これは良い質問かもしれませんが、現在の形ではひどく定式化されています。ランダムな乱れを生成するためのよく知られたアルゴリズムは線形の予想時間を持っていますが、最悪の場合の多項式時間アルゴリズムを見つけることはおそらく未解決の問題です。

例を参照してください:http : //www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf(およびスライド:http : //www.lsi.upc.edu/~conrado/research/talks/analco08.pdf


これは私にとって正しい答えのようです。
Suresh Venkat

10
en.wikipedia.org/wiki/Derangementで説明されている再発!n =(n−1)(!(n−1)+!(n−2))は、ランダムの最悪の場合の多項式アルゴリズムにすぐにはつながりませんか?世代?
David Eppstein、

はい、そうです。最悪の場合のポリタイムで{1、...、n}の任意のサブセットで乱数を生成できる必要があるため、小さな問題があると考えていましたが、それは簡単です。
didest

0

各位置iについてi以外のすべての要素からランダムに選択しないのはなぜですか?たとえば、[0..n-2]から元の配列へのインデックスを選択できます。j> = iを取得した場合、j + 1を使用します。


3
それはすべての混乱を等しく可能にしますか?
David Eppstein

ああ、良い点-これは要素を配列の後の方に優先的に配置します。ターゲット配列のスロットをランダムな順序で埋める場合、すべての混乱は(対称性により)等しくなる可能性があります。
パット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.