java 板


LINE

各位前輩你們好 是這樣子的 目前我要去製作10%~90%的機率出來 原本的方式是這樣 假設是要製作10%的機率 那就是準備一個陣列 陣列裡面裝有1個1、9個0 執行的時候 每次使用Math.random()的方式從陣列內取值 每次都會記錄取幾次才成功 然後只要一成功 就開始執行下一次 總共執行100次 但被老師打槍說這樣的機率根本不是10% 就好比 硬幣有50%的機率都是正面跟反面 我們要求產生50%的正面 那執行10次能保證說 正反面出現的次數一樣嗎? 可能剛好10次都是反面 所以要一直擲骰子 擲到正反面出現的次數一樣才行 最後我們老師提出兩種方式 1.增加執行次數 讓他趨近於10% 也就是原本的方法 不要只執行100次 要執行到1萬 10萬 甚至是100萬次 這個樣本數才夠足以證明10% 2. 增加random範圍 假設java的random範圍是-9999999~9999999 切個10個區域 若random出來的結果剛好就落在指定的區域 那就是算成功的10% 成功後就繼續執行下一筆 然後執行100次 第一個要做比較容易 但第二個我就有問題了 我找到的資料是 Math.random()好像是0~0.9999999(無窮小數) 而Random rnd = new Random()這個方法 一般是直接餵seed 告訴random中從seed隨機取一個值 但是 我找不到說 在沒有餵seed情況下 Random的範圍是多大 請問 有人知道怎麼算說 Random的範圍是多大? 還是說Random跟Math.random()一樣 範圍都是無窮大? -- 作者 MicroGG (La new總冠軍) 看板 Japan_Travel 標題 [問題] 溫泉旅館的兒童人頭算法?
1F:→ robler:問問題然後自稱拎背這樣好嗎 有點禮貌ok?04/11 16:32
2F:→ penan:骨科大 XD04/11 16:34
3F:→ MicroGG:你不懂,我有苦衷,我不說拎杯會被鄉民罵..04/11 16:36
--



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.138.150.27
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1441783643.A.BD2.html
4F:→ cowbaying: 0.0~1.0 09/09 15:56
5F:→ ssccg: 每次都剛好一樣,就不叫隨機了,先確定你的需求... 09/09 16:09
聽不太懂你的意思 請容許我跳針一下 目前就是client會固定一個時間(例如每5s或30s...等等)去向server做查詢的動作 但是client不一定每次都會上線 所以要做一個假設說 假設10%的機率client會上線做查詢 那麼須要花多久時間? 現在就是卡在說 要怎樣做出那個10%的機率 才是真正符合那所謂"10%"機率的上線可能 ※ 編輯: aiweisen (140.138.150.27), 09/09/2015 16:28:13
6F:→ ssccg: 至於random的範圍 09/09 16:19
7F:→ ssccg: docs.oracle.com/javase/8/docs/api/java/util/Random.html 09/09 16:20
8F:→ ssccg: Math.random就是Random.nextDouble,其他的上面都有寫 09/09 16:20
9F:→ ssccg: new Random一般是"不"餵seed,上面也有寫會用一個重複機率 09/09 16:22
10F:→ ssccg: 很低的seed,自己設seed是要產生重複結果時才會用 09/09 16:23
11F:→ ssccg: 範圍跟seed沒關係也不是無窮,數位資料值域都是有限的 09/09 16:25
一般Random好像都是搭配nextInt()來使用 那麼範圍就是依照nextInt()的 2^32 是麻? ※ 編輯: aiweisen (140.138.150.27), 09/09/2015 16:34:27
12F:→ ssccg: 如果你相信java的實作,那nextInt(10)結果就是0~9機率各10% 09/09 16:43
這我就不懂了 那跟我直接在陣列裡面放10個值 然後用Random去跑 去抓裡面其中的特定的值 跟直接nextInt(10)會一樣嘛?
13F:→ ssccg: 如果你說的是 array[new Random().nextInt(10)] 那一樣 09/09 17:04
抱歉 剛打到一半同學被拖走 雖然說nextInt(10)每個出現的機率都是10% 但是這個問題後面就會跟硬幣一樣 硬幣出現正反兩面的機率是50% 但是要擲出多少次的硬幣 使出現"正面" 的機率是50%? 我是要製作後面的50% 話說回到new Random() 請問他的範圍是0~2^32-1嗎? ※ 編輯: aiweisen (140.138.238.19), 09/09/2015 18:20:57
14F:推 LPH66: 你去把你剛才提的投硬幣這個例子丟回去給你們老師 09/09 19:41
15F:→ LPH66: 說起來, 誰規定 10% 一定是每十次要有一次? 09/09 19:42
恩 所以才會說10%的機率下可能會24次才會中一次 5次才會中一次 也有可能一次就中 這些24次 5次 都是有包含前面23次的失敗跟4次的失敗 才會提到說 執行這10%的機率要作很多組 假設做1萬組 總共花了86953次 其中一萬次是成功 其他失敗是76953次 那是不是就可以說成功的機率大概是 10000(成功次數)/85953(總次數)=11.5%
16F:→ LPH66: 回到你的 Random() 問題, 你把隨機數引擎跟取值混在一起了 09/09 19:44
17F:→ LPH66: new Random() 是做出一個隨機數引擎 09/09 19:44
18F:→ LPH66: 你要怎麼取亂數是 nextXxx() 在取的 09/09 19:44
19F:→ LPH66: 你可以 new 一個 Random 物件然後從中取整數/取浮點數/etc. 09/09 19:45
20F:→ LPH66: 所以「Random() 的範圍」這問題根本問錯方向了 09/09 19:46
21F:→ LPH66: 最後我覺得你找個時間跟你們老師好好談談他到底在講什麼 09/09 19:50
22F:→ LPH66: 不然我們這邊給了一堆建議如果又被你們老師打槍不就囧了 09/09 19:50
23F:→ LPH66: 對他提的方法有問題就去問他, 我們不可能懂他在想什麼 09/09 19:51
24F:→ lucky1lk: Random的範圍多大 跟你問的問題根本不相關... 09/09 19:52
25F:→ LPH66: 多嘴一句, 你可以查查「先驗機率」跟「後驗機率」這兩個詞 09/09 19:53
好 明白了
26F:→ lucky1lk: Random的範圍多大 看你的型別 09/09 19:55
所以就是看對象是 int long double 這些的範圍是嗎?
27F:→ ssccg: 出現正面的機率50%的情況下,出現正面的"次數"是50%的機率 09/09 20:02
28F:→ ssccg: 是C(n,n/2)0.5^n,這值不會是100% 09/09 20:06
29F:→ ssccg: 你要"次數"是50%,那根本就不需要隨機,準備好結果就好啊 09/09 20:08
我不曉得有沒有誤會你的意思 以這個為例 你的意思是說 我就一直給他跑數據 跑到剛好出現正面的次數剛好是佔所有次數的一半就可以停止了 是嗎? 例如 1024(出現正面的次數)/2048(所有正反面的次數) ※ 編輯: aiweisen (140.138.238.19), 09/09/2015 21:00:57
30F:推 ooooooo: 看不懂你所謂的"成功"是什麼 不過我猜你要的是shuffle 09/09 21:35
我所謂的成功就好比是指 一直擲硬幣 總共擲了幾次硬幣 才會出現一個正面 然後紀錄次數 再做下一輪 話說 什麼是shuffle? ※ 編輯: aiweisen (140.138.238.19), 09/09/2015 22:54:17
31F:→ ooooooo: 以10%機率來說,我感覺你要的是 10次必定要出現1次 09/10 00:20
32F:→ ooooooo: 那就可以想成拿10張撲克牌洗牌 每次抽獎就是取走一張牌 09/10 00:21
33F:→ ooooooo: 這樣就可以保證 10次中必定中1次 09/10 00:22
所以我不確定我原本的想法是不是正確的 拿原本的例子套用在你這 也就是說 撲克牌有A、2、3...10共10張 每張牌取的機率都一樣 請問要取幾次牌才會使A剛好是佔全部次數的10%?
34F:推 k47100014: 假設你client有1000個,你隨機挑100個不就是10%了嗎 09/10 02:12
35F:推 k47100014: 不是每個client都用10%機率下去抽而是用總數的10%下去 09/10 02:15
36F:→ k47100014: 挑client,不知道這樣有沒有符合你的條件 09/10 02:15
應該說沒以要先擴大 就一個server跟一個client 但這邊也是我問題的其中之一 更原始的要求的是 「client 會固定一個時間向server查詢資料,但是server有10%的機率會上線.如果查詢 的時候server沒上線,這個時候client就會再等待下一個固定時間,再去向servert查詢, 一直重複到server開啟,最後統計總共花多少時間」 所以我的演算法大致上如下 計數=0 10%陣列={1,0,0,0,0,0,0,0,0,0} for(執行100次){ 繼續=true while(繼續){ 亂數值=產生亂數0~9 計數加1 if(10%陣列[亂數值] is 1){ 繼續=false } else{ skip }//if else end }//while end }//for end 但是最後就老師被打槍 然後舉前面擲硬幣的例子給我聽 所以就會覺得奇怪的是 以上面的「更原始的要求」那邊來看 我不知道是不是看的角度不同 那個10%的機率是指 1.假定好server上線的機率為10%,由這個機率去跑數據 (這是我最原始的作法) 2.server只有上線或不上線兩種可能,client要查詢多少次才發現server上線的機率為10% 但現在老師提供的第一種方式 好像是有點混合我1、2這兩個角度 也就變成 假定好server上線的機率為10%,然後client要查詢多少次才發現server上線的機率為10% 老師講到這 就又開始舉擲骰子的例子了== 但這樣會符合上面的「更原始的要求」的題目嗎? ※ 編輯: aiweisen (140.138.238.19), 09/10/2015 09:58:34
37F:推 cyclone350: 所以你做了一百次的結果是幾%? 09/10 10:00
38F:推 ctrlbreak: 不討論題目, Java的亂數是平均的亂數, random1~10 出現 09/11 18:00
39F:→ ctrlbreak: 1的機率就是10%了.. 09/11 18:01
40F:推 k47100014: 原來是server的上線機率阿...但要怎麼去定義Server機率 09/11 22:48
41F:→ k47100014: ?一天24HR,Server上線2.4小時?因為如果Server沒開,所 09/11 22:49
42F:→ k47100014: 有的Client都無法查詢到資料,還是你要以五分鐘作時間 09/11 22:50
43F:→ k47100014: 區隔,一天就有288次測試,10%的話就是28.8次上線區段 09/11 22:50
44F:→ k47100014: 你上面那段程式碼 是以程式內建的亂數去跑上線機率 09/11 22:52
45F:→ k47100014: 如果A Client在十二點的時候開始測試,他每五分鐘Test 09/11 22:53
46F:→ k47100014: 一次,B Client在十二點半的時候開始測試,一樣五分鐘 09/11 22:53
47F:→ k47100014: Test一次,而Server在十三點整開啟,所以A會測試12次 09/11 22:54
48F:→ k47100014: B會測試六次。機率之所以是機率就是因為我們不知道接下 09/11 22:55
49F:→ k47100014: 來會發生甚麼事情,沒辦法真的去定義玩美的10% 09/11 22:55
50F:→ realmeat: 你可以用 rand%10 .... 09/16 13:51
51F:→ realmeat: 不過你的題目我看不懂 09/16 13:53







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP