`
xuanyuanyilu
  • 浏览: 2485 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类

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

阅读更多

背景:做一个抽奖程序,当时的随机算法没考虑太深,直接调用了new Random().nextInt(totalNum);然后在测试的时候发现总共1000人左右,摇出的号很多集中在600-800之间,被人说黑幕,汗一个,查找资料,重新改随机数算法,总结如下,仅代表个人意见,欢饮大家讨论
-------------------------------------

java的Random类产生的随机数,不论是有种子还是无种子,不论是next()还是nextInt()还是...都是伪随机数,一般伪随机数,符合一定的正态分布,在某一个数字段内出现的概率会明显大于另一字段内的概率,我就很悲剧的遇上了,1000人抽选40人,600-800间的人大部分(抽了挺多次,都这样)


后来改程序,自认为实现了逼真伪随机数,就是每次都以触发时的时间毫秒数为种子,产生一个newRandom(seed),再调用nextInt(totalNum),测试发现1000人抽选40的分布比较均匀了,基本每隔100的人数都差不多。逼真是因为多了一个不确定的时间毫秒数,从而使伪随即数也有了不确定性。


至于真随机数,查找资料说是一般的计算机根本无法实现,因为一般计算机都用某种方法来创造一个随机数,这个方法肯定是确定的,所以肯定有个方法来推测出下一个随机数。(特殊计算机据说能实现) 真正的随机数要实现,只能靠人脑,比如猜猜我现在想的1000内的数是多少,我在想的这个数才是真随机数。

--------------------------------------
欢饮各抒己见
分享到:
评论
18 楼 AllenZhang 2011-01-17  
我觉得一直以来,人都有个错误的认识,以为人脑反应出的是随机数。其实你随机100个出来看,你会发现想到的会有很多重复,或者接下来的数是按照某个规律出现的。人肉级别的随机数也是伪的。
17 楼 xuanyuanyilu 2011-01-17  
苍山洱海 写道
发现带种子的方差 比 不带种子的还要大


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

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

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

16 楼 xuanyuanyilu 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,根据你的意思加我的猜测,这个种子相近的话出现的随机数列的值的范围也相近啊,坐等高手看看
15 楼 xuanyuanyilu 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);
    }
}


恩,这个就是后来我改的方法
14 楼 苍山洱海 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


13 楼 苍山洱海 2011-01-15  
种子改成 System.nanoTime()

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


12 楼 苍山洱海 2011-01-15  
发现带种子的方差 比 不带种子的还要大
11 楼 苍山洱海 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
10 楼 苍山洱海 2011-01-15  
public static void runRandom() {
		for (int i = 0; i < N*TIMES; i++)
			ary[new Random(System.currentTimeMillis()).nextInt(N)]++;
	}


然后改成带种子的。
9 楼 苍山洱海 2011-01-15  
used time is :1548913 ms
998903 999431 999216 996790 996874 997667 1001339 1005979 1005479 1003438 998122 998575 997964 1001837 1002150 1006779 1002309 997290 997910 998332
1002033 999481 995802 996453 998671 1005052 1009259 1005917 999764 1001700 1002111 1000367 1002949 1004952 999757 1000744 1001726 1002177 1000941 1000376
999890 1002219 998473 999082 1004460 1004426 999771 996692 999848 998952 1003985 1005948 1003483 998826 999493 997643 996496 1001789 1002516 1004990
1000491 1001941 1004033 1001460 1004748 1001378 996971 997287 1002407 1005383 1001523 1002262 1000018 999027 996595 994904 997782 996732 998424 1001541
1002707 1004556 1005949 1003990 1000742 994617 991744 995807 997425 999932 1002602 997505 1000118 1000156 1001475 998460 996104 995967 997633 1003372
1002324 1000284 1004468 1001834 996976 998252 1003058 999978 995570 992831 999058 1000635 1002911 997829 1000227 1001479 999536 1000620 1001565 999157
999506 1001215 1001833 1001210 1004529 1002300 1000480 998484 997620 1001046 1000699 1000056 1007028 1005019 1002101 1002356 1000520 999619 1002396 997368
997855 998102 996550 999422 1006230 1002933 1003372 1001748 997789 999229 996627 998141 999475 995728 995158 1005020 1012622 1006074 1003474 1000981
995171 1001313 1000503 999743 1002112 1001942 1001501 1000988 1000190 1000769 999708 994128 991922 991070 987246 994396 1002475 997307 990663 1000232
998812 1000056 1002919 998745 995393 1000717 1000920 1000246 1003532 1000821 997424 998829 1000501 1000206 1000778 999439 995018 994455 990506 996294
1003217 999434 999189 994809 992143 1000853 1002738 1002070 1002051 1001264 996721 998013 1001375 999378 995764 994032 991192 997427 999676 1003842
1012012 1005254 1000218 1000378 999868 998278 1000362 998042 995499 999151 1001741 1001566 999618 997759 994890 998114 998029 1003639 1003922 999169
999637 1001163 1000413 1000632 1002306 1000374 998072 998894 996896 997787 1002536 999428 1000607 1000794 999044 1005135 1003408 997552 998619 995537
999224 1004033 1007218 1004986 1004572 997485 996055 1000764 1003944 999251 1000800 1000865 998677 1002392 1000659 1000257 1000180 995454 994639 994297
999423 1001498 999080 1000125 1001409 1004853 1005323 1001131 999101 999686 999443 994995 996601 1000678 997765 996211 997589 992194 995085 1003189
999739 996978 997748 1002871 1001422 999500 1001065 1002850 999990 996631 998196 1003803 1001430 998441 998977 998011 998256 1000288 996650 995623
994173 997964 996300 999159 1000498 1001548 1001817 997341 997929 1001242 1000103 999404 996696 996600 998708 1000409 1001247 1002505 999909 995645
996656 997711 999622 1004828 1001687 1000112 1000117 1002378 1004481 1005966 1002887 1000415 999636 998788 999934 1002793 1004509 1000540 1001471 996828
1001418 995379 996307 999778 996875 998109 1001581 1009720 1005920 1005769 1003054 998288 1001653 1003970 1006878 1003712 1001484 998996 1003905 1005077
1001216 1003186 1003576 998092 996493 997973 1001338 1006540 1004118 999660 1001467 999663 997569 999858 999908 996095 999777 996458 999030 1005051
1004806 1000498 1001689 1002487 999146 1001399 999562 998115 1001233 1001365 998091 1002986 1005734 998179 997213 989985 997594 1002858 999700 996348
999386 1000806 999329 1001484 1001432 1001935 998555 996675 994220 998107 1001188 1004169 999896 995759 1001847 1002901 1000147 1000069 1002172 1000423
996995 999269 1000209 1003833 1004263 999244 998104 999689 1000494 1000517 1003506 1003704 1002228 1002499 1001584 1005312 1001819 999049 997114 996608
999897 1003846 1003307 1002432 1000268 1002147 1007349 1004687 1004292 1003018 998278 1000696 1007646 1007506 1005792 1001800 999714 999656 996172 1000566
1001554 1001014 999175 998768 993791 993780 1000337 1003874 1002965 1000362 996265 996911 1001995 1002582 998585 1001308 1000696 1002459 1009062 1004599
998354 999513 997991 998353 1001130 1003671 1000842 1000110 997168 997483 1006817 1003927 997256 996878 997325 999057 1005011 1004757 1000531 999725
997367 1001418 999560 997468 996638 996279 997510 1002826 1004865 1002570 998683 998570 994822 994175 999483 1000762 1000624 999053 1000800 1001992
1002844 999960 999398 1003373 996153 991752 1002120 999086 1001128 996790 989015 989746 998440 1001737 1000703 1000125 1002655 1001755 999523 999392
1003466 1003748 998134 996520 998485 997896 999186 999048 997326 999153 996205 999710 1003780 1004209 1008648 1007537 994846 996404 1003737 1000595
999892 1002664 999230 994749 1000106 1001982 1003035 999486 995635 997358 1001747 1006260 1009546 1005013 999654 998761 995082 997332 998745 1000848
997071 999540 1000479 1002779 1006365 1004755 995427 995228 997036 997205 1001806 1002205 999318 999359 992661 992537 1000025 1000512 997353 996024
995932 998294 1001205 1001276 1001035 1001147 998970 993468 1000258 1000959 997822 994623 992194 996671 999941 1002049 1002306 1001925 998881 1000170
999927 998348 1000942 1004120 998745 997486 999033 996333 1000232 1000413 996896 996865 998430 998673 998255 997951 1001531 999808 998861 1000676
997449 1000691 999554 996990 996357 998127 1001545 1001236 999664 996834 994836 994782 998876 998919 1001552 1000406 995390 1005047 1008037 1006834
1001441 996228 997650 999889 1003320 999902 998953 1003188 1000090 1000182 1000273 1000142 999891 999208 995221 998861 1002926 1001964 1002243 1002688
1002904 1000741 1000253 998553 999004 999762 1001088 1002796 1003673 1005841 1002554 996239 995632 998682 997819 999959 999193 999670 1000856 1003661
1002884 1003392 1004915 1000152 997566 996934 1000864 1005418 1002754 998409 1000974 1001818 998297 998085 993108 996061 996356 989964 993227 998732
1001481 1000092 1000362 1002017 999828 1004871 1004563 1000369 999124 995217 996564 999610 1000449 1003184 1005688 996982 989973 992781 997180 999751
1000249 991956 996067 997613 999551 998584 1000792 997219 993630 998147 1000178 1003560 1006182 1000716 998577 996159 997676 1000862 999272 998101
1007126 1003824 998518 1005784 1007276 1001353 998993 996574 998169 1002524 1005505 1006597 1004852 999495 997428 998363 1001282 1002468 999758 996806
992501 998943 1002075 1009101 1007538 1002316 1000638 1002593 1003318 1005854 1002082 997379 996105 997612 1002470 1006293 1005802 999430 1003929 998206
998726 1000373 998709 997707 999807 999432 1001237 1005446 1002349 998531 997758 995358 993350 999675 1001871 1004405 1003615 998869 998790 1005089
1004195 999756 996875 996303 995035 1002387 1005205 1008372 1003067 994906 994170 996315 996629 998858 998881 997862 998269 1004427 1005197 1000562
986791 986793 995397 997049 1000071 1002274 998465 1003023 1000581 1001218 1000943 1003061 1000897 995794 998876 995262 996100 997218 1001491 1001629
1000142 1000273 998896 1001713 1001986 999384 998149 1000712 1001772 1003609 1002706 1001208 1001018 1002174 1001760 1001717 999011 995920 996732 998489
1002131 1003088 1002439 1003187 999466 997653 998477 996414 1002309 1001327 1004624 1006314 1006427 1002867 1001786 998733 995911 996299 998958 1000196
1000905 999201 995619 1004673 992847 990673 1006609 1006636 999351 998011 999886 1001154 1006251 1007099 1002283 998734 1000315 999750 1002164 1001533
1000212 999866 998361 999143 1005048 1000117 996803 999886 996983 998281 1000629 1001062 999633 998963 998316 995983 996249 998252 1000783 1000447
995444 997555 1002133 1001159 999416 1004602 1001940 998217 995547 994407 1003017 1005439 996900 992642 995475 998751 1003481 1005644 999814 996175
996888 993989 996524 999847 996319 995891 998863 999963 1004444 1006160 1001223 995103 994321 998549 1001742 1000656 1002493 1003224 1000064 996434
-------------
方差=1.1597439802E7,标准差=3405.5014024369448
8 楼 苍山洱海 2011-01-15  

package on201101;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Random;

public class RandomTest {

	static final int N = 1000;
	static final int TIMES = 1000000;
	static int ary[] = new int[N];

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

	public static void main(String[] args) {
		Date start = new Date();
		runRandom();
		System.out.println("used time is :" + (new Date().getTime() - start.getTime()) + " ms");
		printResult();
		System.out.println("------------- ");
		
		
		double d = calculateFangCha(ary);
		System.out.println("方差=" + d + ",标准差=" + Math.sqrt(d));
		
		//printPercentResult();
	}

	public static void printResult() {
		for (int i = 0; i < ary.length; i++) {
			System.out.print(ary[i] + "\t");
			if (i % 20 == 19)
				System.out.println();
		}
	}
	
	public static void printPercentResult() {
		for (int i = 0; i < ary.length; i++) {
			System.out.print(ary[i]*1.0/TIMES + "\t");
			if (i % 20 == 19)
				System.out.println();
		}
	}
	
	/**
	 * 计算方差
	 * @param nums
	 * @return
	 */
	public static double calculateFangCha(int[] nums) {
		BigDecimal total = BigDecimal.ZERO;
		BigDecimal avg = avgNum(ary);
		for (int i : nums) {
			BigDecimal temp = new BigDecimal(i).subtract(avg);
			double dtmp = Math.pow(temp.doubleValue(), 2);
			total = total.add(new BigDecimal(dtmp));
		}
		return total.divide(new BigDecimal(nums.length)).doubleValue();
	}
	
	/**
	 * 计算平均数
	 * @param nums
	 * @return
	 */
	public static BigDecimal avgNum(int[] nums) {
		long l = 0;
		for (int i : nums)
			l += i;
		return new BigDecimal(l).divide(new BigDecimal(nums.length));
	}
}

7 楼 pengzhoushuo 2011-01-15  
不知道你用的JDK是什么版本?
如果是1.4及以下的,那new Random() 默认就是用System.currentSystemMillions()作为种子。跟你后来改的程序是一样的。
如果是1.5及以上的,那new Random()默认是用System.currentSystemNanoTime() 再加上一个Random的static变量的值为种子,这个static你每new Random()一次,它的值便会自增1。
6 楼 xjtusehcy 2011-01-15  
Linux内核维护一个随机熵池。可以通过读取设备/dev/random来获得随机数。这里面获得的随机数是内核根据系统运行期间的一些随机事件确定的。比如鼠标点的位置等。随机性比较好。
5 楼 sleepinglord 2011-01-14  
伪随机数这样的问题可以去看看Knuth的那三本书,里面有一章专门讲随机数生成。

里面的关键问题是:什么样的数列是随机的数列呢?

原则上,任何一个有限长度的数列都不是随机的,无论你用什么办法生成。因为根据拉格朗日插值公式,给定一个有限长度的数列a1...an,一定可以找到一个多项式f(x),使得f(1)=a1,f(2)=a2,……f(n)=an,可以用多项式完整生成的数列怎么能称为随机的呢?但是如果承认这不是随机的,随机数列的生成就成为不可能!

数学家花了很长时间证明,某一类递推公式生成的数列看起来“非常像”随机的。这个“非常像”的定义比较复杂,不过Knuth那本书里说的还算好懂,想了解的话可以去仔细看看。
4 楼 jorneyR 2011-01-14  
我是这样写的,当程序每次运行的时候,种子是不一样的,但是在同一个程序中,种子还是同一个,是我没有描述清楚。
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);
    }
}
3 楼 xuanyuanyilu 2011-01-14  
<div class="quote_title">jorneyR 写道</div>
<div class="quote_div">只使用一个种子,我这里1000个抽40个分页还是比较平均的。<br>如 31 : 1, 31是下标,1是被抽中的次数,这样做是为了统计,如591被抽中了两次<br><br><pre name="code" class="java">31 :1  |46 :1  |56 :1  |66 :1  |98 :1  |99 :1  |106:1  |184:1  |190:1  |207:1  |
225:1  |232:1  |238:1  |246:1  |258:1  |267:1  |323:1  |363:1  |382:1  |385:1  |
472:1  |489:1  |511:1  |518:1  |529:1  |560:1  |583:1  |591:2  |619:1  |633:1  |
654:1  |702:1  |796:1  |822:1  |841:1  |869:1  |937:1  |979:1  |990:1  |</pre>
</div>
<p><br><br>是不是我没有理解对你的意思啊,你说<span style="color: #ff0000;">只使用一个种子</span><br>若是使用种子,并且一直使用这一个种子,这个随机数序列就不会变了啊,所以这种方法是不能用的。</p>
<p> </p>
<p>
</p>
<p>
</p>
<pre name="code" class="java">public static void main(String[] args){
Random rd = new Random(47);
int randnum = 0;
for(int i=0;i&lt;40;i++){
randnum = rd.nextInt(1000);
System.out.println(randnum);
}
}</pre>
 运行这个main,每次输出都一样
2 楼 i2534 2011-01-14  
据说可以用噪音来实现逼真的伪随机.不过好像需要硬件支持.
1 楼 jorneyR 2011-01-14  
只使用一个种子,我这里1000个抽40个分页还是比较平均的。
如 31 : 1, 31是下标,1是被抽中的次数,这样做是为了统计,如591被抽中了两次

31 :1  |46 :1  |56 :1  |66 :1  |98 :1  |99 :1  |106:1  |184:1  |190:1  |207:1  |
225:1  |232:1  |238:1  |246:1  |258:1  |267:1  |323:1  |363:1  |382:1  |385:1  |
472:1  |489:1  |511:1  |518:1  |529:1  |560:1  |583:1  |591:2  |619:1  |633:1  |
654:1  |702:1  |796:1  |822:1  |841:1  |869:1  |937:1  |979:1  |990:1  |

相关推荐

    Creat_pseudo-random Numbers_random_逆变法_伪随机数_stickdrq_python_

    伪随机数并不是真正的随机数,因为它们是通过确定性的算法计算出来的,但它们的分布和真实随机数非常接近,以至于在许多应用中可以被视为随机。在这个场景中,我们将深入探讨如何使用Python的`random`库以及所谓的...

    SP800-22rev1a 随机数与伪随机数生成

    《SP800-22rev1a 随机数与伪随机数生成》是一份由美国国家标准与技术研究院(NIST)发布的关于随机数和伪随机数生成器的统计测试套件的规范文档。该文档旨在为密码学应用提供一个标准化的测试框架,用于评估随机数和...

    蒙特卡洛产生伪随机数

    从给定的文件信息来看,主要讨论的是两个不同的领域:一是关于Mg-Li合金及其表面处理的问题,另一个是蒙特卡洛法在产生伪随机数中的应用。然而,根据题目要求,我们将集中讨论“蒙特卡洛产生伪随机数”的相关知识点...

    suijishu.rar_伪随机数_伪随机数生成_生成随机数_随机数

    伪随机数并不是真正的随机数,而是一系列看起来随机但实际上由确定性算法生成的数列。它们在数学上是可预测的,但对大多数实际应用来说,其行为足够接近随机,以至于无法察觉到这种可预测性。 **srand() 函数**: `...

    C#409-伪随机数加密,源代码

    为了进行加密,我们需要使用更强大的随机数生成器,例如RNGCryptoServiceProvider,这是.NET框架提供的一个加密安全的伪随机数生成器。它使用了Windows操作系统底层的加密服务提供者(CSP)来生成随机数据,这确保了...

    随机数产生源程序_伪随机数_verilog_

    它们在数学和计算机科学中广泛使用,因为真正的随机数难以生成,而伪随机数序列通常足够接近于随机,可以满足许多应用的需求。 2. **Verilog**: Verilog是一种硬件描述语言,用于描述数字电子系统的逻辑行为和...

    suijishu.rar_伪随机数_随机数

    伪随机数并非真正的随机数,因为它们是由确定性算法生成的,但通过精心设计的算法,这些数列可以展现出与真正随机数极其相似的特性。例如,它们应该是均匀分布的,即在所有可能的值中,每个值出现的概率相同;并且...

    weisuijishu.rar_伪随机_伪随机数 数的保存_生成器_随机数生成

    在IT领域,伪随机数生成器(Pseudo-Random Number Generator, PRNG)是一个至关重要...了解伪随机数生成器的工作原理,以及如何在编程环境中实现和应用,对于提升软件开发技能和理解计算机科学的内在逻辑有着重要意义。

    suijishu.rar_伪随机_伪随机数_线性同余_随机数产生_随机数生成

    在"suijishu.txt"文件中,可能包含了使用线性同余法生成的伪随机数序列示例,或者对这种方法的进一步讨论和解释。对于开发者来说,理解并掌握这种算法有助于在实际项目中合理地使用随机数生成技术。 总的来说,伪...

    伪随机数MATLAB版

    在计算机科学和数值计算中,伪随机数生成是模拟随机性的一个重要工具。MATLAB作为一个强大的数值计算软件,提供了多种生成伪随机数的功能。伪随机数并非真正的随机数,因为它们是由确定性的算法生成的,但这些算法...

    8位单片机产生伪随机数的算法(6502版)[参考].pdf

    产生伪随机数的算法在8位单片机中的实现 伪随机数函数是软件开发中一个重要的组件...我们还讨论了伪随机数函数的应用在游戏、模拟、加密等领域。通过本文,读者可以了解伪随机数函数的实现细节,并应用于实际项目中。

    伪随机数生成算法及比较.pdf

    伪随机数生成算法的好坏通常根据它们的周期长度、均匀性、随机性和实现的简易度来评价。周期越长,均匀性越好,实现越简单,算法越被认为是好的伪随机数生成算法。在实际应用中,选择合适的算法取决于特定需求和上...

    伪随机数的产生PPT

    C语言提供了一种简单的方式来生成伪随机数,主要通过`rand()`函数和`srand()`函数。这两个函数通常被包含在`&lt;stdlib.h&gt;`头文件中,而`srand()`函数还依赖于`&lt;time.h&gt;`头文件来获取当前时间,以实现随机数序列的初始...

    伪随机数与准随机数的比较

    伪随机数是由确定性算法产生的数列,它们虽然不是真正的随机数,但如果满足一定的统计要求(如均匀性和随机性),就可以作为随机数使用。常见的伪随机数生成算法包括取中法、移位法和同余法。 ##### 取中法 取中法...

    基于3-DES算法的伪随机数生成器

    综上所述,"基于3-DES算法的伪随机数生成器"是一个利用3-DES算法创建高质量随机数种子的工具,适用于需要高安全性和随机性的应用场景,如加密通信、密码生成等。该软件遵循ANSIX9.17标准,确保了生成的随机数在金融...

    randm_randm_Verilog产生伪随机数模块_

    伪随机数生成器(PRNG)并不像真正的随机数那样具有完全不可预测性,而是通过数学算法生成一系列看起来随机但实际上可重复的数字序列。在Verilog中实现PRNG,通常会用到移位寄存器和非线性反馈函数。下面我们将深入...

    产生伪随机数

    在计算机科学中,伪随机数生成是模拟随机过程的关键技术,尤其在算法设计、加密、游戏开发、统计模拟等领域有着广泛的应用。标题“产生伪随机数”指的是利用特定算法生成看似随机但实际上可预测的数字序列。这个过程...

    行业分类-电子-关于伪随机数生成电路及伪随机数产生方法的说明分析.rar

    在电子工程领域,伪随机数生成电路(Pseudo-Random Number Generator, PRNG)和伪随机数产生方法是至关重要的技术。这些数被广泛应用于各种系统,如加密、模拟、测试与验证、以及数字信号处理等。下面我们将深入探讨...

    伪随机数的生成

    伪随机数是指由确定性算法产生的序列,该序列具有随机性特征但实际是由特定算法生成的,并非真正的随机数。伪随机数在密码学、计算机科学、游戏开发等领域有着广泛的应用。 #### 二、需求分析与设计目标 根据题目...

Global site tag (gtag.js) - Google Analytics