`
xuanyuanyilu
  • 浏览: 2551 次
  • 性别: 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  |

相关推荐

    大数据项目、题目、源码

    大数据项目、题目、源码

    2025清华大学:迈向未来的AI教学实验-393页.pdf

    2025清华大学:迈向未来的AI教学实验-393页.pdf

    编程训练系统设计与实现.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    蛐蛐的PN532-GUI 3.0

    蛐蛐的PN532_GUI 3.0

    tarantool-2.4.2.68-2.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tarantool-2.4.2.68-2.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tarantool-2.4.2.68-2.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    SEAlign: 面向软件工程代理的对齐训练

    近年来,代码生成模型在自动化软件开发任务方面展示了令人印象深刻的性能,但在现实世界的软件工程场景中仍面临挑战。尽管当前的训练方法,特别是后训练,在解决竞争性编程问题方面表现出色,但它们未能充分准备模型以应对实际软件开发的复杂性。这种错位提出了一个关键问题:现有的对齐训练方法是否适合现实世界的软件工程任务?在本研究中,我们确定了这一问题,并提出了SEAlign,这是一种新颖的对齐框架,旨在弥合代码生成模型与现实世界软件开发任务之间的差距。SEAlign利用软件工程过程的独特特征(包括高质量的工作流步骤)来增强模型能力。我们的框架进一步采用蒙特卡洛树搜索(MCTS)进行多步决策过程的细粒度对齐,并通过偏好优化关键动作确保模型满足现实需求。我们在三个标准的现实世界软件工程基准上评估了SEAlign,包括HumanEvalFix、SWE-Bench-Lite和SWE-Bench-Verified。实验结果表明,SEAlign以最少的训练开销实现了最先进的性能。此外,我们使用SEAlign开发了一个基于代理的软件开发平台,成功自动化创建了几个小型应用程序。人类对这些应用程序的评估突显了任务性能和

    【计算机求职笔试】资源

    【计算机求职笔试】资源

    七彩汽球幼儿园教育教学课件模板.pptx

    七彩汽球幼儿园教育教学课件模板

    LabVIEW工程师必备:时间锁与三层加密验证应对客户欠款的技术实现

    内容概要:本文详细介绍了LabVIEW软件工程师为解决客户拖欠尾款问题所采取的技术措施。主要内容包括时间锁模块的开发,通过自动生成并加密时间戳确保无法通过修改系统时间绕过限制;序列号生成算法,利用客户公司名、机器码等生成唯一的动态激活码;以及三层加密验证方案,从传输层、本地验证到核心逻辑混淆,全面保护软件安全。文中还提供了具体的代码实现细节,如AES加密、SHA1哈希、Base64编码等,并强调了在实际应用中的注意事项和技术要点。 适合人群:LabVIEW软件工程师、嵌入式系统开发者、工业自动化领域的技术人员。 使用场景及目标:适用于需要防止客户恶意拖欠款项的工程项目,尤其是涉及硬件控制和长时间运行的工业控制系统。目标是在不影响正常业务的前提下,通过技术手段促使客户按时支付尾款。 其他说明:作者分享了多个实际案例,展示了这些技术手段的有效性和实用性。同时提醒开发者要注意合法合规,在合同中明确规定软件使用期限,避免不必要的法律纠纷。

    Java SpringBoot构建多用户B2B2C全平台商城系统的架构解析与实战技巧

    内容概要:本文详细介绍了使用Java SpringBoot搭建一个多用户B2B2C商城系统的技术实现。该系统覆盖PC、H5、小程序和APP四个终端,采用SpringBoot作为后端框架,Vue和Uniapp分别用于PC/H5端和移动端的前端开发。文章重点探讨了用户鉴权、商品管理、支付集成、权限控制等多个关键技术点,并分享了许多实际开发过程中积累的经验教训和技术优化方法。例如,通过自定义AccessDecisionManager实现复杂的权限控制,利用Redisson进行分布式锁管理以应对高并发场景,以及运用策略模式封装多种支付渠道等。 适合人群:具有一定Java开发经验和对前后端分离架构有一定了解的研发人员,尤其是关注电商平台开发的技术爱好者。 使用场景及目标:适用于希望深入了解大型电子商务平台内部运作机制的人群;旨在帮助开发者掌握如何高效地构建稳定可靠的多用户商城系统,提高开发效率并降低维护成本。 其他说明:文中不仅提供了详细的代码片段展示各个功能模块的具体实现方式,还特别强调了一些容易忽视但在实际应用中至关重要的细节问题,如跨端适配、性能优化等方面的内容。

    基于web的人力资源管理系统的设计与实现.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    基于PLC的液体饲料自动调配与饲喂系统设计:自动控制、梯形图程序与接线图解析

    内容概要:本文详细介绍了基于PLC的液体饲料自动调配与饲喂系统的开发过程和技术要点。首先,文章描述了系统硬件架构的设计,包括选用的PLC型号、传感器类型及其连接方式。接着,深入探讨了梯形图程序的具体实现,如急停按钮、液位传感器、定时器等功能的逻辑设计。此外,文章还讲解了配料算法的优化,特别是针对黏稠物料的特殊处理方法。最后,讨论了组态画面的设计,确保操作简便直观,并介绍了故障自检功能和模拟量处理的黑科技,如移动平均滤波和PWM调节流量。 适合人群:具有一定PLC编程经验的技术人员,尤其是从事工业自动化领域的工程师。 使用场景及目标:适用于需要提高饲料调配精度和效率的养殖场或饲料加工厂。主要目标是通过自动化控制系统,减少人为干预,提高生产效率和产品质量。 其他说明:文中提供了大量实用的调试经验和注意事项,帮助读者更好地理解和应用相关技术。

    西门子200SMART与V90伺服Profinet通讯及运动控制实践详解

    内容概要:本文详细介绍了西门子S7-200 SMART PLC与V90伺服驱动器通过Profinet进行通讯并实现运动控制的具体实践。首先讲述了硬件配置要点,强调了正确选择GSD文件和报文格式的重要性。接着深入探讨了Profinet报文的数据交换机制,展示了输入输出报文结构及其应用实例。随后讲解了基于状态机的运动控制逻辑设计,包括往返运动的实现方法以及报警处理机制。此外还涉及了WinCC人机界面的交互方式,提供了参数调整和实时监控的方法。最后分享了一些调试经验和常见问题解决方案,如位置漂移、通讯中断等问题的应对措施。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对西门子PLC和伺服系统有一定了解的人群。 使用场景及目标:适用于正在实施或计划实施类似项目的团队,旨在帮助他们更好地理解和掌握Profinet通讯技术和运动控制系统的设计与调试技巧。 其他说明:文中不仅包含了详细的理论解释,还有丰富的实战案例和代码片段,能够为读者提供全面的学习体验。同时提醒读者关注机电一体化的整体协调性,在实践中不断优化系统的性能表现。

    基于S7-200 PLC与组态王的温室大棚自动化控制系统设计与实现

    内容概要:本文详细介绍了使用西门子S7-200 PLC和组态王软件构建温室大棚自动化控制系统的方法。主要内容涵盖温度、湿度、光照等环境参数的采集与控制,具体包括梯形图程序设计、IO分配、接线规范以及组态王监控画面的设计。文中还分享了多个调试经验和常见问题解决方案,如模拟量信号抗干扰措施、通信配置优化等。通过该系统实现了对温室环境的精确控制,显著提高了农业生产效率并降低了人力成本。 适合人群:从事农业自动化领域的工程师和技术人员,尤其是有一定PLC编程基础和组态软件使用经验的从业者。 使用场景及目标:适用于中小型温室大棚的自动化改造项目,旨在提高农作物生长环境的稳定性,降低人工干预频率,增强系统的可靠性和易用性。 其他说明:作者提供了完整的GitHub项目链接供读者参考学习,并计划进一步扩展系统功能,如增加手机远程监控和二氧化碳浓度控制等功能。

    [跨境电商法律法规]课程标准+课件+教案+习题

    [跨境电商法律法规]配书资源

    单片机设计-门控自动照明电路

    单片机设计__门控自动照明电路

    长波红外超构透镜设计:基于硅圆柱的偏振不敏感聚焦与FDTD仿真

    内容概要:本文详细介绍了长波红外波段(8-14μm)硅基超构透镜的设计与仿真实现。首先探讨了硅作为超构透镜材料的优势及其在相位控制中的应用,特别是在10.6μm波长下实现偏振不敏感聚焦的技术细节。文中展示了如何利用FDTD仿真工具进行纳米柱参数扫描,获取相位变化规律,并通过Matlab实现相位匹配算法。此外,还讨论了远场计算中的关键技术和常见问题,如边界条件设置、相位突变处理以及焦平面电场分布的分析方法。最后,强调了该设计方案在多光成像系统的潜在应用价值。 适合人群:从事光学设计、超构材料研究及相关领域的科研人员和技术开发者。 使用场景及目标:适用于希望深入了解长波红外超构透镜设计原理的研究者,旨在帮助他们掌握从理论到实践的具体步骤,包括材料选择、仿真建模、相位匹配及性能评估等方面的知识。 其他说明:本文不仅提供了详细的理论解释和技术实现路径,还分享了许多实际操作中的经验和技巧,有助于提高仿真的准确性和效率。同时,代码工具链的设计具有良好的扩展性,支持跨波段的应用迁移。

    全国计算机等级证书,三级数据库技术考试大纲解析及备考指南

    全国计算机等级证书,三级数据库技术考试大纲解析及备考指南

    光学测量中移相算法、相位解包裹与泽尼克多项式拟合的Python实现及优化

    内容概要:本文详细介绍了光学测量中三个关键环节的技术实现:移相算法提取相位、相位解包裹以及泽尼克多项式拟合。首先,通过四步移相法利用Python代码提取包裹相位,解决了相位差π/2的问题。接着,针对包裹相位存在的间断问题,提出了多种相位解包裹方法,如行展开法和基于质量图引导的解包裹算法,确保相位的连续性和准确性。最后,讨论了泽尼克多项式拟合的应用,展示了如何将相位数据转换为泽尼克系数,用于波前像差分析。文中不仅提供了具体的代码实现,还探讨了各种方法的优点和局限性,并给出了优化建议。 适合人群:从事光学测量、干涉仪数据分析的研究人员和技术人员,尤其是有一定Python编程基础的人群。 使用场景及目标:适用于需要处理干涉条纹图像并进行相位分析的实验环境,旨在提高相位测量精度,减少噪声干扰,优化数据处理流程,最终获得精确的波前像差参数。 其他说明:文章强调了理论与实践相结合的重要性,鼓励读者通过动手编码加深对各算法的理解。同时,指出了现有方法的潜在问题,如过拟合和噪声敏感性,并提出了一些改进措施,如使用质量图引导解包裹和L1正则化约束系数。此外,还简要提及了神经网络在该领域的初步探索。

    taglib-extras-1.0.1-21.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统taglib-extras-1.0.1-21.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf taglib-extras-1.0.1-21.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

Global site tag (gtag.js) - Google Analytics