<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java.lang.Math.Random()與java.util.Random生成隨機數的區別

    一個是方法一個是對象之類的廢話就不說了。關鍵在與兩個生成隨機數的不同特征。
    因為在做圖像特征提取,對整個像素空間的逐個提取、識別顯然不太聰明,于是乎想起概率論上的一堆東東。
    取得一個可以反應整個向量空間的隨機數集合,不失為明智的選擇。

    《Think in Java》里面經常用那個對象弄,自然我首先想到了這個。同學則喜歡Math.Random,他認為生成的是一個在區間均勻分布的符合要求的隨機數。以前從來沒想過“隨機”這個問題,到底是一個任意的數(各個概率一樣,就像古典概型里面,硬幣的正反一樣),還是一個在空間有均勻分布特征的呢?

    在網上搜羅了一大堆東西,發現說什么的都有,越來越迷糊。最后想起該看看權威的JDK API說明乎:

    random(注:java.lang.Math)
    public static double random()
    返回帶正號的 
    double 值,該值大于等于 0.0 且小于 1.0。返回值是一個偽隨機選擇的數,在該范圍內(近似)均勻分布。 
    第一次調用該方法時,它將創建一個新的偽隨機數生成器,與以下表達式完全相同 

    new java.util.Random
    之后,新的偽隨機數生成器可用于此方法的所有調用,但不能用于其他地方。 
    此方法是完全同步的,可允許多個線程使用而不出現錯誤。但是,如果許多線程需要以極高的速率生成偽隨機數,那么這可能會減少每個線程對擁有自己偽隨機數生成器的爭用。 


    返回: 
    大于等于 
    0.0 且小于 1.0 的偽隨機 double 值。 

    下面是java.util里面的

    java.util 
    類 Random
    java.lang.Object
      java.util.Random
    所有已實現的接口: 
    Serializable 
    直接已知子類: 
    SecureRandom 

    --------------------------------------------------------------------------------

    public class Randomextends Objectimplements Serializable此類的實例用于生成偽隨機數流。此類使用 48 位的種子,使用線性同余公式 (linear congruential form) 對其進行了修改(請參閱 Donald Knuth 的The Art of Computer Programming, Volume 3,第 3.2.1 節)。 

    如果用相同的種子創建兩個 Random 實例,則對每個實例進行相同的方法調用序列,它們將生成并返回相同的數字序列。為了保證此屬性的實現,為類 Random 指定了特定的算法。為了 Java 代碼的完全可移植性,Java 實現必須讓類 Random 使用此處所示的所有算法。但是允許 Random 類的子類使用其他算法,只要其符合所有方法的常規協定即可。 

    Random 類實現的算法使用一個 
    protected 實用工具方法,每次調用它最多可提供 32 個偽隨機生成的位。 

    很多應用程序會發現 Math.random() 方法更易于使用。 


    看看下面的就更加顯而易見啦
    next
    protected int next(int bits)生成下一個偽隨機數。當被所有其他方法使用時,子類應該重寫此方法。 
    next 的常規協定是,返回一個 
    int 值,如果參數 bits 位處于 1 和 32(包括)之間,那么返回值的多數低位都將(大致)是單獨選擇的位值,每個位值是 0 或 1 的機會(大致)相等。通過將種子自動更新為 

    (seed 
    * 0x5DEECE66DL + 0xBL& ((1L << 48- 1)并返回 
    (
    int)(seed >>> (48 - bits)),Random 類可實現 next 方法。這是一個線性同余偽隨機數生成器,由 D. H. Lehmer 定義,Donald E. Knuth 在 The Art of Computer Programming, Volume 3: Seminumerical Algorithms 的第 3.2.1 節中進行了描述。 

    參數:
    bits 
    - 隨機位。 
    返回:
    隨機數生成器序列的下一個偽隨機值。

    于是我的結論如下:
    1:java.lang.Math.Random()這個靜態方法得到的是一個空間中有均勻分布特征的隨機數。
    2:java.util.Random,通過這個對象得到的則是“幾何分布”
    3:我的圖像特征應該選擇第一個方法比較適當。

    問題:我的似乎應該說是一個抽樣問題更為恰當。呼呼,先寫到這里


    啦啦啦,請高人指教。

    posted on 2008-05-01 17:15 Jarod.cn.LuLuLife 閱讀(26711) 評論(3)  編輯  收藏

    評論

    # re: java.lang.Math.Random()與java.util.Random生成隨機數的區別[未登錄] 2008-05-30 23:37 ZZ

    請問你能不能用C編寫一個生成正態分布隨機數的程序,而且是用中心極限定理和Box-Muller變換兩種方法產生的???
      回復  更多評論   

    # re: java.lang.Math.Random()與java.util.Random生成隨機數的區別 2008-05-31 01:07 Jarod.cn.LuLuLife


    1 : double _sta( double mu, double sigma) // 利用中心極限定理生成
    2 {
    3 int i;
    4 double r,sum = 0.0 ;
    5
    6 if (sigma <= 0.0 ) { printf( " Sigma<=0.0 in _sta! " ); exit( 1 ); }
    7 for (i = 1 ;i <= 12 ;i ++ )
    8 sum = sum + _random();
    9 r = (sum - 6.00 ) * sigma + mu;
    10
    11 return r;
    12
    13 }

    (網上很多吧,自己驗證哈,我也是搜來的。)  回復  更多評論   

    # re: java.lang.Math.Random()與java.util.Random生成隨機數的區別 2009-03-25 15:38 P.W

    贊一下鉆研的精神~  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2009年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    公告

    我的知識Blog!

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章檔案

    Image

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99爱视频99爱在线观看免费| 亚洲sss综合天堂久久久| 国产精品亚洲综合天堂夜夜| 大学生一级毛片免费看| 久久av无码专区亚洲av桃花岛| 免费国产黄网站在线观看视频| 亚洲成AV人片在线观看WWW| a级成人毛片免费图片| 亚洲成a人片在线观看无码专区| 最近免费字幕中文大全| 亚洲欧洲日产国码av系列天堂| 91在线视频免费观看| 亚洲AV人人澡人人爽人人夜夜| 十八禁无码免费网站| 亚洲成a人不卡在线观看| 青苹果乐园免费高清在线| 亚洲国产精品日韩av不卡在线 | 亚洲av无码一区二区三区网站| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲乱人伦中文字幕无码| 四虎永久免费影院| 国产免费区在线观看十分钟| 亚洲国产精品久久久天堂| 久久久久亚洲AV成人网人人网站| 99在线视频免费观看视频| 亚洲黄色一级毛片| 无码少妇一区二区浪潮免费| 美女被爆羞羞网站免费| 亚洲乱码无码永久不卡在线| 99在线观看精品免费99| 亚洲一区二区三区写真| 亚洲日韩在线观看免费视频| 国产成人精品一区二区三区免费| 亚洲日本乱码一区二区在线二产线| 在线免费不卡视频| 精品国产免费一区二区三区| 亚洲精品国产成人专区| 国产精品高清全国免费观看| 成全视频在线观看免费| 亚洲高清有码中文字| 亚洲色成人网站WWW永久|