论坛首页 Java企业应用论坛

[讨论]一般伪随机数和逼真伪随机数和真随机数

浏览 11936 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-15  
public static void runRandom() {
		for (int i = 0; i < N*TIMES; i++)
			ary[new Random(System.currentTimeMillis()).nextInt(N)]++;
	}


然后改成带种子的。
0 请登录后投票
   发表时间:2011-01-15  
used time is :21027 ms
67910 98825 113796 127631 74529 90191 100728 131166 89878 71040 102372 130132 107452 79899 75385
93689 124473 105982 75493 101298 129284 105175 76451 86006 107909 130850 94278 84442 101547 120161
94111 72215 96818 121140 111153 84239 78727 96048 129687 101892 67015 99389 129676 99858 65039
83208 109380 137816 99014 79456 101603 132725 106787 69351 98210 133018 117557 94747 82339 99140
136194 106036 64146 109778 135577 103561 77713 87718 105797 144885 96623 65399 102225 178186 108318
59819 93969 130018 100196 90149 84857 104450 126397 99753 63859 101763 128660 101593 81040 88771
114410 127472 97236 77095 90174 136468 106432 63475 92435 134363 118343 80375 79508 99847 132509
104714 59718 106423 134126 101664 71288 84939 98025 133393 74185 71413 98317 135093 106103 65858
93123 117948 116394 82904 87151 96174 137638 99904 75316 95387 132413 94728 77556 80083 103460
146900 84591 74088 95167 123199 97837 86622 90986 107413 123494 90281 77401 90484 124692 105177
73176 97152 124478 107862 81622 87089 98754 140767 87609 80145 97246 120375 109400 71496 88788
120028 124404 85013 75068 83164 129756 104047 60235 95829 126414 111917 92985 93710 93651 146081
87529 76289 100265 128034 112876 80556 84584 108459 122157 83260 72842 87917 135479 123220 63148
91035 116248 113367 82780 88889 93094 120982 86836 76388 90199 134828 88765 76456 93278 94976
120790 87879 69678 94006 131960 105382 52589 83308 131639 110451 84566 93503 101189 145692 103921
51678 103941 118885 106608 72131 95636 105962 126772 81365 82689 88662 124000 114532 62142 84731
111854 108536 82156 91404 97433 133387 90743 65732 80821 117912 109081 82523 85329 109985 126345
90985 79002 97192 120036 99329 66234 96965 120156 109516 99348 90033 93058 141938 95640 73017
93077 122254 114803 91387 92164 101080 135081 96207 78226 100296 128413 109544 76648 91117 121232
116506 97614 84130 97540 136934 98415 59172 94313 120227 118980 84318 87281 97701 126603 97119
65312 103809 124438 115648 72888 83979 128618 110466 92923 88479 102360 137581 112385 60901 90921
116415 118323 91151 86903 150982 127525 96410 76265 98015 127186 116295 77382 86699 112623 111999
87089 86112 103877 130354 116940 57767 93543 123504 108830 84059 90303 106995 119905 97775 74346
104299 137467 118280 59822 93123 112502 125507 89252 80907 98048 142937 96637 55084 93391 121790
110396 76974 85235 96445 132303 89986 70464 103283 123911 106724 81922 95610 109479 118688 85793
78549 107587 111274 102077 62015 96301 112361 109775 86534 88762 96413 131325 85572 65714 96286
126613 109631 87911 92518 101827 133424 102369 80003 105118 129332 104205 74593 101256 112569 118753
87702 81882 100420 124024 87596 73170 83628 136531 103207 70537 79412 94327 128904 88452 76069
104356 122131 107753 72738 95401 125807 120398 94627 71872 91545 130240 102723 58635 99930 138288
108779 85627 80521 94474 129789 104897 67472 101575 122312 102676 55677 92754 113529 124930 94569
86130 99331 124762 92634 66000 91930 126386 107797 84130 91338 103259 122673 96375 66905 111485
127216 101505 60567 92123 121362 126743 91118 88789 99948 131372 108897 46408 91529 139823 109017
78779 96278 101027 129541 95177 71050 105131 130176 93058 66965 91374 105995 121965 80269 83746
98036 130626 92310 61752 104181 122430 103695 70433 82555 99307 129474 102576 76977 101151 134603
92007 70184 92000 101283 127764 98018 87616 100274 136981 104641 74638 102284 121684 111749 88739
86764 94381 130910 100816 72611 101924 122696 98979 77350 91054 100957 134586 88938 77573 91029
133364 108442 67571 92769 111934 109890 82655 84468 92114 136219 111561 66947 96992 129934 99717
81619 91076 93104 134950 88773 73865 85974 130048 111427 67465 91472 130337 106692 81197 90125
89973 126317 105954 66902 104589 128109 98255 82520 88682 111720 132015 88238 73809 91438 116056
104480 67691 93419 122507 115246 90549 82026 86736 127624 104399 61751 95207 132237 104291 80623
82892 106458 128622 89818 68689 90170 136227 97488 69664 98400 117383 113573 79255 75638 91143
130440 96320 61825 97482 119918 102557 79107 88604 102260 136683 95876 78363 93691 124916 105164
70669 82818 122815 115616 86103 86460 100981 140022 102840 76899 97329 127324 105518 79589 83868
94969 146088 95285 72544 97613 134345 105532 83228 90865 115093 122143 94714 83723 93267 128997
99931 66111 93112 128476 111540 87878 89176 96932 149138 86273 67282 96423 115623 111419 81336
79122 114264 123136 100678 71069 96731 136939 112798 67593 98704 128074 110252 88564 87353 92084
148058 99152 76005 93746 131177 103284 83919 95763 97380 122061 97678 71915 87842 131616 111729
66220 95083 126898 115565 89489 82974 100714 145007 103008 64228 103692 123249 104984 74657 93669
109544 134311 91962 78235 98542 134740 123902 52750 94041 118064 108170 75448 90046 97400 145738
89133 72420 95357 114360 107640 75433 92481 114090 127868 88667 80929 95010 115177 114816 68053
87065 115154 108549 81538 95740 94554 138496 102836 72906 87977 115945 105689 74564 96659 100308
138807 97389 84052 88588 124786 114092 70008 88609 115314 117373 93201 87625 92384 144873 94458
76016 86731 122578 115877 87375 92415 91796 133204 83503 79506 96822 124229 107542 70353 89042
108503 123546 99617 85401 91882 140211 106231 72630 91152 114350 108604 95325 91052 100401 131265
92639 64627 102798 157379 102637 65597 94090 107281 102897 92701 78146 100087 128985 104872 69983
83689 127580 100497 94537 91865 109681 126700 89434 73414 99438 129705 115063 66281 84238 114614
113799 90493 87219 97797 140124 112707 59564 86992 129830 111538 68890 88430 105151 138429 99774
71759 99285 141596 99950 71523 88667 104786 125737 89704 84982 95290 126625 96142 55033 101083
122666 110688 92108 97769 102711 126612 86724 71105 105982 135430 94857 81242 96599 109989 120026
92737 79974 99316 128787 97623 82583 98643 115813 125371 94232 87158 100040 140059 107932 72581
94366 136370 99966 91012 94981 99837 122344 93833 79015 106369 129743 109249 67504 98352 113549
121818 81282 81112 104780 127616 99525 64605 96265 130826 106232 81393 79939 96074 128673 104623
78952 105319 131203 106404 77731 95031 118316 123985 93840 82154 105417 137398 97544 64073 98588
124504 98680 84370 90822 101246 120885 101632 80747 95627 127570 85647 71602 94935 112323 127565
89750 84398 101367 131652 99333 56080 89927 139170 109465 68325 93540 104827 130842 93922 74096
100849 136161 102126 57607 99427 121440 126019 72034 78048 86219 127563 86909 64250 84130 131142
100822 75551 90555 101147 120927 92098 72136 107763 124944 96861 -------------
方差=4.20377555852E8,标准差=20503.110882302713
0 请登录后投票
   发表时间:2011-01-15  
发现带种子的方差 比 不带种子的还要大
0 请登录后投票
   发表时间:2011-01-15  
种子改成 System.nanoTime()

public static void runRandom() {
		for (int i = 0; i < N*TIMES; i++)
			ary[new Random(System.nanoTime()).nextInt(N)]++;
	}


0 请登录后投票
   发表时间:2011-01-15   最后修改:2011-01-15

used time is :162722 ms
99367	99914	100421	100049	100037	100219	100641	101093	100494	100348	99574	99810	99607	99575	99405	
99962	99912	99693	100057	99885	100097	100401	99692	99494	99711	100262	99026	99905	99420	99833	
100382	100289	100048	99960	100099	99811	100096	99949	99785	100041	99921	100264	100824	100476	100237	
100371	100100	100506	99844	100757	100200	100073	100111	99374	99867	100142	100328	99589	99523	99551	
100031	100515	99897	99675	100778	100296	100280	100508	99610	99773	98995	99145	99920	99759	99699	
100873	100811	100632	99953	99977	99843	99591	100284	99580	100251	100170	100072	99839	99448	100113	
100363	100432	99602	100506	100379	100102	99894	99476	99603	100076	100510	99983	100488	100633	100496	
99923	100487	100342	100479	99669	98791	99287	99611	100127	100079	99709	99539	100290	100342	100939	
100229	100764	99891	100290	100274	99559	99226	99634	99676	100257	99553	100116	99807	99589	99934	
100307	100313	100482	98991	99992	99641	100217	99843	100053	100230	99788	100105	101192	101110	100456	
100373	99737	99993	100111	100085	99830	99477	99614	99378	100309	100238	100506	99834	99355	99973	
99516	99815	99839	99819	99481	99427	99570	100082	99820	100298	100195	99851	100390	100108	100450	
100158	99962	100107	99898	100497	99920	100080	100455	100238	100512	100573	100562	99762	100079	99704	
99898	99744	99811	99736	99109	99171	100102	100028	99934	100426	100074	99979	100315	99900	99289	
98886	99546	99379	99684	99904	99957	100083	100244	100373	100890	99770	99967	100085	100255	99941	
100061	99303	99046	98837	100082	100153	100416	100450	100522	100431	100335	100389	99308	99163	99165	
100433	99701	99938	99826	99698	99672	100202	100397	100330	100161	99011	98731	99710	99898	99662	
99466	99357	99969	100699	100740	100565	100650	99622	100143	100028	99972	99365	100451	99186	100072	
99986	99668	99674	99615	99296	99952	100061	99852	99912	99595	99645	99600	99786	99837	99794	
100315	100657	100430	100361	99836	100201	100006	99048	99816	100072	99508	100275	99728	99747	100438	
101073	100382	99990	99876	100502	99990	99788	100172	99765	99394	99810	100408	99452	100128	99338	
99827	99814	100098	100138	99855	99705	99288	99461	99866	99883	99277	100104	100609	99864	100410	
100777	100642	99767	99909	99865	100153	100242	99944	99556	99720	100018	100899	100331	99905	100095	
100759	100906	100672	100544	99510	99347	99455	99854	99595	99854	100496	99902	99844	100558	100599	
99461	99903	100105	100181	99914	100370	100020	100128	99628	99773	100243	100705	100689	100447	100367	
100296	100080	99070	99965	99635	99579	99441	100138	100097	99746	99843	100206	100251	100672	100081	
99970	99929	100087	99785	99426	100194	99428	99350	100515	100822	100373	99889	100201	100720	100365	
100189	100105	99984	100030	99855	100634	100351	100034	99892	99646	100404	100394	100282	100106	99720	
99726	98981	99911	99607	99945	99432	100138	100429	100516	100583	100103	100384	99313	100234	100469	
100361	99660	99490	100031	99625	100182	100804	100616	100426	99908	100385	100776	99963	99866	99550	
100169	100835	100858	100012	100046	99905	100017	100021	100105	100559	100384	99066	99581	100250	99534	
99912	99697	100280	99845	99801	100647	100583	100795	99792	100074	100549	100507	99563	99607	99344	
99504	100074	99979	99995	99838	100800	100183	100990	100658	99756	99650	99525	99710	100082	99711	
100635	99395	100214	100109	100423	99763	99506	100301	99990	99689	100648	99989	100066	99520	99645	
100581	100533	100298	99981	100280	100951	100580	100400	99507	99588	99305	99897	100239	100097	100423	
99986	100227	100588	100226	100024	99847	100294	100085	100091	100216	100273	99431	99244	100151	101712	
100261	99925	99957	99386	100115	100326	99947	99454	99324	99243	99622	100131	100019	99763	100186	
100190	100487	100536	100484	99996	99704	99844	100459	100463	99927	99703	99473	100478	99223	100035	
100533	100465	99700	99901	100069	100038	99227	99778	99291	99969	99793	99413	100106	100141	100176	
99997	100974	101237	99704	100311	99839	100215	100163	99328	100013	100125	100238	100765	99876	100918	
99400	99702	99150	99357	100470	100222	98715	99738	99854	100552	100344	99913	99540	99989	99724	
100405	100291	100236	99513	99849	99376	100180	100375	99458	99168	99797	100579	100457	100583	99950	
99500	100365	100186	99692	99918	99856	99513	99728	100120	100539	99581	99675	99838	99396	99833	
100204	100229	99731	99321	99859	99350	100591	99782	100086	100165	100212	100403	100118	99341	99576	
99556	99700	99904	99875	99808	100072	99736	100264	100877	100434	100081	99535	99930	99813	100290	
100015	99637	99541	99835	101032	100285	100531	100211	99714	100580	99772	99792	99848	99306	100027	
99479	100153	100132	99994	99701	99414	100222	100509	100857	100440	100147	99520	99957	99999	100183	
99395	99897	100243	100029	100651	100185	99600	99981	99894	100143	100037	100639	99853	99671	99408	
99608	99838	100007	99466	100023	99470	100032	100326	99744	99699	99675	100309	100145	99892	100421	
99923	100297	100052	100433	100937	100465	100009	100041	100040	100321	99908	99931	99983	99723	100360	
100611	100489	99853	100577	99687	100339	100237	100000	99702	99114	98749	99978	99610	99902	98942	
100145	100330	100123	100410	100240	99768	100231	99724	100247	99636	100078	100157	99470	99900	99838	
99836	100276	99938	100383	100197	100424	100203	99444	99342	99289	100118	99506	100010	100551	100734	
99932	100590	100307	100368	99857	100237	99765	99420	100321	99408	99597	99386	99338	100654	99914	
100635	100241	99774	99911	99752	99781	99923	99997	99868	99064	99926	100159	100720	99793	100380	
100261	99811	100304	100046	99638	99651	100419	100549	100083	99851	99883	100291	100202	100523	100928	
100515	100470	99913	99802	99903	100171	100068	100017	99647	100424	100754	100111	99645	99438	100040	
99944	100429	100076	99800	99741	99250	100055	99914	100054	100072	100651	101200	99887	100126	100043	
99507	99605	99873	100377	99321	100094	99757	99859	99809	99527	99967	100394	100243	100466	99714	
100014	100124	99608	99657	99668	100934	100414	100457	100265	100403	100747	100439	100405	99772	99489	
99368	99255	99124	100206	99644	99466	100307	100560	100552	99907	99477	99916	99325	99737	99560	
99259	99308	99323	100183	100167	100609	99975	99970	99614	100286	99933	100276	99887	99388	99756	
99905	99893	100052	99860	100242	100362	101219	100609	100238	100498	99664	99648	99619	100254	100226	
99804	99372	99516	99556	99766	100745	100256	99640	99883	99997	99916	99691	99462	99420	99800	
100102	100564	100956	99923	99408	100000	100306	99927	99858	100627	100134	99937	99876	99837	99693	
99727	99461	99727	100519	100653	100340	99587	99730	99816	99343	100102	99191	99792	99705	99907	
100159	100241	100198	99900	99996	100439	100863	100029	99869	99513	------------- 
方差=182477.852,标准差=427.1742642060732


0 请登录后投票
   发表时间:2011-01-17  
jorneyR 写道
我是这样写的,当程序每次运行的时候,种子是不一样的,但是在同一个程序中,种子还是同一个,是我没有描述清楚。
import java.util.Random;

public class CommonUtil {
    private static Random rand = null;

    // 返回一个范围在[0, max)的随机数
    public static int nextInt(int max) {
        if (rand == null) {
            synchronized (CommonUtil.class) {
                if (rand == null) {
                    rand = new Random(System.currentTimeMillis());
                }
            }
        }

        return rand.nextInt(max);
    }
}


恩,这个就是后来我改的方法
0 请登录后投票
   发表时间:2011-01-17  
pengzhoushuo 写道
不知道你用的JDK是什么版本?
如果是1.4及以下的,那new Random() 默认就是用System.currentSystemMillions()作为种子。跟你后来改的程序是一样的。
如果是1.5及以上的,那new Random()默认是用System.currentSystemNanoTime() 再加上一个Random的static变量的值为种子,这个static你每new Random()一次,它的值便会自增1。


我用的1.6,根据你的意思加我的猜测,这个种子相近的话出现的随机数列的值的范围也相近啊,坐等高手看看
0 请登录后投票
   发表时间:2011-01-17  
苍山洱海 写道
发现带种子的方差 比 不带种子的还要大


实践帝,拜服一个先。前面有哥们回复+我的推测(上一楼),种子相近的话,产生的随机数列的范围也会比较相近,

所以这个用时间做种子的方差会比没种子的大(我推测你用的也是1.5版本以上的JDK),因为你for循环俩时间基本变化不大,很可能相等。

而作为一个抽奖程序,现实中是抽一个大家乐呵一下再抽下一个,所以种子变化大的多。所以才能产生我说的现象吧,把时间作为种子后,产生的随机数更分布均匀了

0 请登录后投票
   发表时间:2011-01-17  
我觉得一直以来,人都有个错误的认识,以为人脑反应出的是随机数。其实你随机100个出来看,你会发现想到的会有很多重复,或者接下来的数是按照某个规律出现的。人肉级别的随机数也是伪的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics