我知道你什麽意思了

來源: 德州老外 2006-12-01 21:22:36 [] [舊帖] [給我悄悄話] 本文已被閱讀: 次 (804 bytes)
你是想產生0-5000的最大隨機序列,要求不重複。算法的優劣是看你出現重複的次數和序列的長度。序列越長、時間越短成績越好。

最快的方法應該是Hashing。先產生一個順序數組0-5000 A(5001個),然後建一個5001元素的空數組B,自己去找一個較好的Hashing 函數一般是(x*m+y*n)mod p,其中p是relative prime to x,y,m,n。這些都是教科書式的公式,一般不難找。

Hashing function 選好以後從A中順序取數送入Hash(A[i]),產生結果用LinkList方式添入B。如果有重複則push in link list header。真實序列長度=5001-# collision。In this, hashing is really acting like random reordering. Question is: How to make it truly random every run-time.

While you can use rand(current time) to get first number, in our case x, then y = rand(x), m = rand(time), n =rand(n). The find relative prime P. Then go back to use Hash(A[i]) again.
請您先登陸,再發跟帖!

發現Adblock插件

如要繼續瀏覽
請支持本站 請務必在本站關閉/移除任何Adblock

關閉Adblock後 請點擊

請參考如何關閉Adblock/Adblock plus

安裝Adblock plus用戶請點擊瀏覽器圖標
選擇“Disable on www.wenxuecity.com”

安裝Adblock用戶請點擊圖標
選擇“don't run on pages on this domain”