<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

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久国产精品免费网站| 免费很黄无遮挡的视频毛片| 两个人看的www免费视频中文| 国产成人无码区免费A∨视频网站| 亚洲乱码日产精品BD在线观看| 69视频免费在线观看| 亚洲黄色在线观看视频| 久久国产色AV免费看| 亚洲欧洲日产国码www| 久久WWW免费人成一看片| 亚洲人成毛片线播放| 成年女人18级毛片毛片免费观看| 亚洲欧洲国产综合AV无码久久| 卡一卡二卡三在线入口免费| 亚洲精品国产精品| 亚洲av成人一区二区三区在线观看| 高潮内射免费看片| 久久国产成人亚洲精品影院| 黄色网站软件app在线观看免费| 亚洲AV成人片色在线观看高潮| 99久久99久久精品免费观看 | 亚洲精品国产第一综合99久久| 在线精品免费视频| 欧洲亚洲国产精华液| 亚洲一级Av无码毛片久久精品 | 特色特黄a毛片高清免费观看| 亚洲第一区精品观看| 中文字幕无码毛片免费看| 久久亚洲AV午夜福利精品一区 | 日韩免费视频网站| 一区二区免费在线观看| 亚洲AV永久无码精品成人| 国产精品视频免费观看| 亚洲国产成人手机在线观看| 亚洲色图综合在线| 91人人区免费区人人| AV激情亚洲男人的天堂国语| 国产亚洲人成网站观看| 99久久这里只精品国产免费| 高潮毛片无遮挡高清免费视频| 亚洲免费在线视频|