Re: [問題] 1-42取出6+1個數字

看板java作者時間19年前 (2006/07/23 17:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串21/21 (看更多)
【 在 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.]
文章代碼(AID): #14mphM00 (java)
討論串 (同標題文章)
文章代碼(AID): #14mphM00 (java)