我正在和我的兄弟討論一個用於洗牌的快速和骯髒的算法(即每個元素都是唯一的數組)。算法描述:洗牌算法的快速創意 - 這個工作嗎?
讓卡組的卡數爲n
。取一個數字x
,這樣gcd(n,x)=1
。現在反覆選擇卡號(x*i) mod n
爲i=1
高達i=n
並把它放在一堆新卡(沒有從原來的甲板上,即製作一張卡的副本)。新的一堆卡將成爲我們的結果。
對我來說,似乎很清楚,只有一次執行此算法不會給出「足夠隨機」的結果(從統計測試來確定隨機性的意義上)。但是如果我們迭代地執行該算法,可能對於x
的新值也滿足gcd(n,x)=1
?如果這樣做足夠多的次數會給我們一個「足夠隨機」的結果,那麼我們可以預計需要多少次這樣做,作爲n
的函數?
爲什麼要在[優秀高效算法](http://en.wikipedia.org/wiki/Fisher-Yates_shuffle#The_modern_algorithm)已經可用時創建可疑且昂貴的算法? – pjs 2014-10-27 14:27:47
@pjs我只對這個理論感興趣,而不是作爲一個問題的實際解決方案。 – Sid 2014-10-27 14:34:09
你會如何選擇'x',或者你會選擇爲'x'選擇什麼?對於'gcd(n,x)'爲'1','x'必須是大於'n'的最小質數。所以把'n = 10,x = 11',你會得到相同的卡組。 – 2014-10-27 14:34:58