Re: [問題] 1-42取出6+1個數字
【 在 zanyking.bbs@ptt.cc (遙遠的旅人) 的大作中提到: 】
: ※ 引述《ogamenewbie (._.)》之銘言:
: : (舉手) 問幾個問題...
: : 這個看起來是從陣列最後方, 隨機選一個之前的元素跟後面的置換.
: : 然後把整個陣列 n 跑完之後, 取前面的 m 個...
: : 那為什麼不直接後面作 m 次以後直接取後面的 m 個呢?
: 當然可以阿,這樣聰明多了。
: 那個pseudo Code是Trace來的,我只是直接把腦子裡的東西貼上用,
: 看來我還消化的不夠徹底,感謝指點。
: : 另外取前面 n 個, 第一個會永遠不可能是自己吧?
: 不會,第n-1個跟之前連自己共n個元素作Swap也有可能取到自己啊。
: 所以雖然機率超低也還是有機會的。
: : 最後感謝你提供 (對我來說) 如此易於了解的方法.
我想這就是洗牌法的延伸吧
像撲克牌洗牌一樣,假設n張牌一開始都照順序排好 (陣列初始為1~n)
洗一次牌就是任選兩張牌然後彼此交換位置 (陣列中任選2位置彼此Swap值)
要洗幾次就看你想要亂數有多亂,洗越多次理論上越亂,
最後要取出m個不重複的值 就從陣列中隨機取m個位置然後取值就好
不管是1-42 或1-400000 都可以這樣做,且複雜度是一樣的 XD
--
世界上有不能流淚的哀傷存在.那是對誰也無法說明的,
就算能夠說明,誰也不會理解的那種東西.那哀傷既不能
改變成任何形式,只能像無風之夜的雪那樣靜靜地逐漸
積在心裡而已.
--
※ 來源:‧資訊傳奇 inf.csie.thu.edu.tw‧[FROM: 220-139-169-158.dynamic.hinet.]
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 21 之 21 篇):