青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

?? 生成無重復的隨機數,注意,是不重復的序列.
?? 通常的生成隨機數的做法是不考慮重復的,因為即使重復也屬于概率意義上的正常情況.但某些情況下需要不重復的隨機數據,怎么辦呢?
?? 我想從大方向上來說,應該只有兩個方法.要么犧牲時間要么犧牲空間.講得不對或不完整,大家一定要指出來啊,謝謝.

?? 注意,下面均以在101~200的范圍內(設為b[100],它實際上是附加空間),從中產生10個不重復的隨機數(設為a[10]).
??
一.犧牲時間為代價
?? 這種方法不需要附加空間b數組.
?? 要產生一定范圍內不可重復的隨機數,把曾經生成的隨機數保存起來作為歷史數據。產生一個新的隨機數后在歷史數據搜索,若找到就重新產生一個新的再重復數據搜索;否則就認為已經找到了一個新的不同隨機數。
?? 可以預見,每個新產生的隨機數都要與前面所有的數比較.若重復,舍棄,再產生;否則,產生下一個.平均耗時n的平方量級.
?? 粗看起來,上面的程序似乎沒有什么問題,在執行過程中程序也能夠通過。但,仔細分析我們就會發現問題出在一個新產生的隨機數是否已經存在的判定上。既然是隨機數,那么從數學的角度來說在概率上,每次產生的隨機數 r就有可能相同,盡管這種可能性很小,但確是一個邏輯性與正確性的問題。因此,每次產生的新的隨機數r都有可能是數組random的前i-1個數中的某一個,也就是說程序在運行過程中由此可能會導致死循環!
??? 有人可能會爭辯說,這種概率很小嘛,幾乎為零.的確,但我要問,算法的五大特性是什么,其中兩大特性就是:確定性和有窮性.
??? 所以,怎么解決?犧牲空間.(稍后介紹)

二.犧牲空間為代價
?? 以下方法需要附加空間b數組.
?? (1)將范圍數組b[100](b[i]=100+i,不妨設數組下標從1開始)的每個元素設置一個標志位flag.初始均為flag=0;若某元素被選入到a數組中,則flag=1;顯然,以后再選到重復元素可以立刻判定是否已選.這不正是以空間換時間嗎?
?? 但是仍然有一個很嚴重的問題,在小規模輸入下,無疑它的表現是不錯的.但現在舉一個失敗的例子.
?? 在1~65536之間,選擇65500個不重復的隨機數.看看后面的隨機數,比如第65500個數(最后一個),它要在剩下的36個數中選擇才會有flag=0(根本不知道這36個數是什么);哼哼,概率36/65536.越到后面,隨機數越難產生,空間也換不了時間.
?? 改進:先在1~65536之間隨機選取36個數,刪除.將剩下的65500個數依次賦值給a[65500],然后打亂順序即可,如下偽碼:

1 for ?i?←? 1 ?to?length[a]
2 ??? do ?j?←?random()? // 隨機產生一個a數組的下標

3 ??????exchange?a[i]←→a[j] // 交換a[i]與a[j]
4

? 當范圍數組與目標數組的大小非常接近時,上述算法非常有效,建議采用.

? (2)問題的最終解決.
?? 仍以最開始的那個例子來說,初始數組b[i]=100+i,a數組空.
?? 每次隨機生成數組b的一個下標subscript,然后取出它所對應的數據a[subscript],記下來.然后將數組b的最后一個數b[length]放到下標subscript的位置,同時將數組a長度減1。盡管前若干次生成的下標subscript隨機數有可能相同,但,因為每一次都把最后一個數填到取出的位置,因此,相同下標subscript對應的數卻絕不會相同,每一次取出的數都不會一樣,這樣,就保證了算法的確定性、有效性、有窮性.
? 偽碼算法如下:

?1 lower?←? 101
?2 upper?←? 200
?3 for ?i?←? 1 ?to?upper - lower + 1
?4 ???? do ?b[i] = lower + i - 1
?5 for ?i← 1 ?to?length[a]
?6 ???? do ?subscript? = ?( int )(length[b] * Rnd? + ?lower) // 隨機產生b數組的一個下標,Rnd產生0~1隨機數

?7 ???????temp?←?b[subscript]
?8
???????b[subscript]?←?b[length[b]]
?9 ???????length[b] --
;
10 ???????a[i] =
temp;
11

? 這個算法我認為是很不錯的.
?
如果大家有更好的想法解決不重復的隨機數,歡迎探討!

posted on 2006-11-12 12:05 哈哈 閱讀(4332) 評論(12)  編輯 收藏 引用

評論:
# re: 生成無重復的隨機數 2006-12-05 18:23 | 沐楓
你的方法1)因為需要保存隨機數歷史數據,因此仍然是需要空間消耗的。而且空間消耗與方法2)比起來,沒區別。

--
至于方法2)的交換方法,VS2005中的std::random_shuffle函數就是這么做的。

  回復  更多評論
  
# re: 生成無重復的隨機數 2006-12-05 22:27 | pengkuny
@沐楓
方法1)中,歷史數據不算附加空間吧
比如從0~10000000000中隨機選6個數,
a[6]不算附加空間,b[10000000000]才是

至于VS2005中的std::random_shuffle函數,非常謝謝,原來有這樣的函數,那太好了.  回復  更多評論
  
# re: 生成無重復的隨機數 2007-01-19 15:13 | null
二(1)處有誤,“若某元素被選入到a數組中,則flag=1;顯然,以后再選到重復元素可以立刻判定是否已選.這不正是以空間換時間嗎?”,在概率下有可能存在一直生成樹組b的且flag為1的下標而導致死循環,與一同。
二(2)中有筆誤,“同時將數組a長度減1。盡管”該處a應為b。  回復  更多評論
  
# re: 生成無重復的隨機數 2007-01-19 16:38 | Dain
我知道c/cpp中可以產生隨機種子,在用rand函數,就避免了重復
srand((unsigned)time(NULL));
rand();  回復  更多評論
  
# re: 生成無重復的隨機數 2007-01-19 20:20 | pengkuny
@null
null說得不錯
二(1)確實沒有達到有窮性,只是使得"判定是否重復"的時間為常數
二(2)中筆誤已改正.謝謝@Dain
  回復  更多評論
  
# re: 生成無重復的隨機數 2007-01-19 20:22 | pengkuny
@Dain
撒種srand可以避免程序每次運行時數據一樣(畢竟系統采用偽隨機方法)
只不過和本文討論的不是一回事  回復  更多評論
  
# re: 生成無重復的隨機數 2007-05-13 11:32 | Stupidmxx
m序列可能可以做到生成不重復隨機序列  回復  更多評論
  
# re: 生成無重復的隨機數 2007-05-13 12:02 | pengkuny
@Stupidmxx
請問什么是m序列?它是怎么生成不重復隨機序列的  回復  更多評論
  
# re: 生成無重復的隨機數 2007-05-24 23:45 | Stupidmxx
小m序列,沒記錯的話是先找到個本原多項式,然后得到相應的線性移位寄存器,再不斷的異或+移位生成的。呵呵,老師講的時候我就只記得它的性質,具體細節沒搞清楚。博主有興趣不妨baidu之。  回復  更多評論
  
# re: 生成無重復的隨機數 2007-05-25 01:50 | pengkuny
@Stupidmxx
查過了,就是線性同余法.模為m.
如Xi = 65539Xi (mod 2^31),65539=2^16+3,左移16位并相加3次.

最終,它還是偽隨機,電腦也正是這么實現的.

  回復  更多評論
  
# re: 生成無重復的隨機數 2007-07-17 03:56 | touzani
good  回復  更多評論
  
# re: 生成無重復的隨機數 2009-05-16 17:05 | 土豆
試過 ,很好的方法~  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久九九国产精品| 亚洲综合第一| 欧美亚洲综合网| 亚洲一级在线| 开心色5月久久精品| 日韩一级黄色av| 在线亚洲自拍| 欧美中文字幕在线| 男人的天堂亚洲在线| 蜜臀av一级做a爰片久久 | 亚洲性xxxx| 午夜精品婷婷| 另类综合日韩欧美亚洲| 欧美精品一区二区三区视频| 欧美日一区二区在线观看 | 日韩网站在线看片你懂的| 亚洲激情第一区| 亚洲美女视频| 欧美在线播放| 亚洲国产欧美一区二区三区丁香婷| 久久一区二区三区四区| 亚洲人被黑人高潮完整版| 亚洲已满18点击进入久久| 久久最新视频| 国产精品一区二区在线观看| 亚洲大胆美女视频| 亚洲欧美国产精品桃花| 欧美成人一区二区三区片免费| 99亚洲伊人久久精品影院红桃| 久久精品视频在线免费观看| 欧美天堂亚洲电影院在线播放| 国内精品一区二区| 在线亚洲激情| 欧美国产日产韩国视频| 999亚洲国产精| 男女视频一区二区| 国产亚洲欧美一区二区三区| 一区二区欧美激情| 欧美91视频| 久久国产精品一区二区三区四区| 欧美日本亚洲韩国国产| 在线观看日韩av电影| 亚洲欧美制服另类日韩| 欧美激情小视频| 美女诱惑一区| 久久尤物电影视频在线观看| 欧美性猛交xxxx乱大交退制版| 国产亚洲精品久久飘花 | 在线亚洲观看| 欧美精品v国产精品v日韩精品| 国外成人性视频| 亚洲专区一二三| 日韩视频国产视频| 亚洲国产美女| 久久久久五月天| 国产一区二区精品丝袜| 久久精品人人做人人综合| 亚洲午夜视频在线| 欧美视频日韩视频| 亚洲综合欧美日韩| 中文在线资源观看网站视频免费不卡 | 91久久久精品| 欧美国产精品一区| 亚洲国产精品一区制服丝袜| 另类成人小视频在线| 欧美一区永久视频免费观看| 国产欧美日韩精品a在线观看| 午夜精品免费| 亚洲欧美日韩在线高清直播| 国产欧美日韩综合| 久久偷看各类wc女厕嘘嘘偷窃| 欧美一区二区精美| 国产伦精品一区二区三区高清版| 尹人成人综合网| 毛片av中文字幕一区二区| 久久综合伊人77777蜜臀| 亚洲茄子视频| 9久re热视频在线精品| 国产精品亚洲综合| 久久婷婷国产麻豆91天堂| 久久亚洲春色中文字幕| 99精品国产在热久久婷婷| 中文欧美字幕免费| 国产综合色产| 亚洲国产老妈| 欧美日本精品一区二区三区| 欧美一级视频| 欧美二区在线观看| 午夜国产精品视频免费体验区| 欧美亚洲尤物久久| 亚洲人成网站影音先锋播放| 一区二区三区视频免费在线观看| 国产日韩在线视频| 亚洲国产精品综合| 国产一区二区三区四区在线观看 | 亚洲黑丝在线| 国产精品夜色7777狼人| 欧美韩国日本综合| 国产精品一级| 欧美激情日韩| 国产情侣久久| 亚洲激情视频网站| 国产一区二区精品久久99| 亚洲三级电影全部在线观看高清| 国产欧美视频一区二区| 亚洲日韩欧美视频一区| 激情五月综合色婷婷一区二区| 99www免费人成精品| 亚洲黄色在线看| 亚洲日本理论电影| 亚洲影视在线| 一本久道久久综合狠狠爱| 性欧美大战久久久久久久免费观看| 一色屋精品视频在线看| 亚洲午夜精品久久久久久浪潮| 亚洲高清久久久| 欧美一区高清| 午夜精品久久久久久久99黑人| 欧美成人午夜| 欧美高清视频免费观看| 国产一区视频在线看| 亚洲免费综合| 亚洲欧美日韩天堂| 欧美日韩一区二区在线观看| 欧美激情久久久久| 极品av少妇一区二区| 午夜激情亚洲| 欧美伊人久久久久久午夜久久久久| 欧美久久一区| 亚洲精品欧美在线| 亚洲精品中文字幕在线| 免费观看日韩av| 欧美电影免费观看高清| 黄色亚洲精品| 久久久亚洲人| 欧美成人激情视频免费观看| 伊人精品在线| 麻豆成人精品| 亚洲国产日韩欧美综合久久| 亚洲日本成人| 免费欧美电影| 亚洲精品乱码久久久久| 亚洲天堂av在线免费| 欧美视频四区| 亚洲一区二区欧美日韩| 午夜精品福利在线| 国产日韩欧美一区二区| 欧美与黑人午夜性猛交久久久| 亚洲精品中文字幕女同| 久久―日本道色综合久久| 美日韩丰满少妇在线观看| 一区二区在线视频| 欧美jizz19性欧美| 日韩视频在线一区| 欧美一区二区啪啪| 伊人精品成人久久综合软件| 美女主播一区| 日韩午夜免费视频| 久久福利影视| 亚洲国产另类久久久精品极度| 欧美成人精品| 一区二区三区免费看| 久久精品国产精品亚洲综合| 伊人久久av导航| 欧美日韩免费观看一区三区| 亚洲欧美韩国| 欧美激情一区二区三区在线视频观看| 一区二区三区av| 国产精品色一区二区三区| 久久久久国产一区二区| 亚洲欧洲在线视频| 午夜精品久久久久99热蜜桃导演| 国内不卡一区二区三区| 欧美fxxxxxx另类| 午夜精品福利视频| 欧美α欧美αv大片| avtt综合网| 激情综合自拍| 韩国精品一区二区三区| 亚洲国产精品久久久久婷婷884 | 久久视频在线视频| 亚洲欧洲精品一区二区| 亚洲女性裸体视频| 久热精品视频在线| 国产夜色精品一区二区av| 在线播放豆国产99亚洲| 久久精品一二三| 午夜久久久久久| 亚洲高清在线观看| 久久久久久久久久久成人| 亚洲另类自拍| 国产日韩欧美一区在线| 欧美一区二区大片| 久久精品一本| 91久久一区二区| 亚洲欧美久久| 亚洲高清在线播放| 快播亚洲色图| 欧美成人国产| 欧美成人国产一区二区|