• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            asm, c, c++ are my all
            -- Core In Computer
            posts - 139,  comments - 123,  trackbacks - 0

            /********************************************\
            |????歡迎轉(zhuǎn)載, 但請(qǐng)保留作者姓名和原文鏈接, 祝您進(jìn)步并共勉!???? |
            \********************************************/


            非“偽”隨機(jī)數(shù)的生成

            作者: Jerry Cat
            時(shí)間: 2006/05/16
            鏈接:?
            http://www.shnenglu.com/jerysun0818/archive/2006/05/16/7232.html

            問題的來由 - "隨機(jī)取m個(gè)數(shù)(在1到n的范圍之內(nèi)),(m <= n),要求m個(gè)數(shù)沒有重復(fù)。有沒有
            什么好的算法,時(shí)間復(fù)雜度和空間復(fù)雜度都很好"

            ----------------------------------------------------------------
            方案一:
            取隨機(jī)數(shù)可以用C++標(biāo)準(zhǔn)的rand,至于M個(gè)不重復(fù),你可以用std::set來解決,把取道的隨機(jī)數(shù)
            插入到set里面,set的size() == m就可以了, 具體可以這樣:

            #include <set>
            #include <stdlib.h>

            int main()
            {
            ?? std::set<int> s;
            ?? while(1)
            ?? {
            ????? int r = rand() % n;
            ????? s.insert(r);
            ????? if(s.size() == m)
            ????? {
            ???????? break;
            ????? }
            ?? }
            }

            ?由于set底層實(shí)現(xiàn)是紅黑樹,插入復(fù)雜度是對(duì)數(shù)級(jí)的^_^

            ----------------------------------------------------------------
            方案二:
            #include <iostream>
            #include <cstdlib>????? //用于rand()和srand()函數(shù)
            #include <ctime>??????? //設(shè)置不同的隨機(jī)數(shù)

            using namespace std;

            int main (){
            ??? srand( time( 0 ) );??? //調(diào)用不重復(fù)的隨機(jī)數(shù)函數(shù)
            ??? unsigned i;
            ??? for ( int n = 0; n++ < 10; )
            ??? {
            ??????? i = rand() ;??????? //對(duì)i 賦系統(tǒng)的隨機(jī)數(shù)
            ??????? cout << " The NO." << n << "is : " << i << endl;
            ??? }

            ??? return 0;
            }

            1. C++標(biāo)準(zhǔn)函數(shù)庫提供一隨機(jī)數(shù)生成器rand,返回0-RAND_MAX之間均勻分布的偽隨機(jī)整數(shù)。 RAND_MAX
            ?? 必須至少為32767。rand()函數(shù)不接受參數(shù),默認(rèn)以1為種子(即起始值)。

            ?? 隨機(jī)數(shù)生成器總是以相同的種子開始,所以形成的偽隨機(jī)數(shù)列也相同。失去了隨機(jī)意義。

            2. C++中另一函數(shù)srand(),可以指定不同的數(shù)(無符號(hào)整數(shù)變?cè)榉N子。但是如果種子相同,偽
            ?? 隨機(jī)數(shù)列也相同。--一個(gè)辦法是讓用戶輸入種子,但是仍然不理想。

            3. 比較理想的是用變化的數(shù),比如時(shí)間來作為隨機(jī)數(shù)生成器的種子。
            ?? 在 頭文件ctime中時(shí)間庫包含time函數(shù),它可以返回一個(gè)表示時(shí)間、日期、月和年的數(shù)值使用如
            ?? 下調(diào)用可將該值設(shè)為rand的種子
            ?? srand(static_cast<unsigned>(time(static_cast<time_t*>(NULL))));

            4. 但, srand()并不是說使隨機(jī)數(shù)都不一樣,它只是使取隨機(jī)數(shù)的種子隨著時(shí)間而改變:)
            ?? So, 還是方案一好!

            posted on 2006-05-16 00:17 Jerry Cat 閱讀(2543) 評(píng)論(7)  編輯 收藏 引用

            FeedBack:
            # re: 非“偽”隨機(jī)數(shù)的生成
            2006-05-16 21:38 | Tauruser
            方案一中 int r = rand() % n;
            n是什么來的,沒有見你定義的?  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2006-05-29 01:57 | xfh
            n就是1-n中的n, 具體數(shù)值隨要求而定  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2007-01-19 14:54 | sjd163
            方案一,過程可以重復(fù)出現(xiàn),怎么會(huì)不是偽隨機(jī)數(shù)呢?
            看不到不偽的隨機(jī)數(shù)在哪里?  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2007-01-19 16:46 | Dain
            啥叫偽  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2008-08-05 10:43 | xy
            方案一不具有操作性,太消耗時(shí)間  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2008-12-18 08:43 | 得到
            被騙點(diǎn)擊了  回復(fù)  更多評(píng)論
              
            # re: 非“偽”隨機(jī)數(shù)的生成
            2009-05-29 23:24 | pop
            方案一真的可行?命題要求m個(gè)數(shù)沒有重復(fù),%n之后的m個(gè)數(shù)中極有可能有重復(fù)  回復(fù)  更多評(píng)論
              

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



            <2006年8月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产激情久久久久影院| 大香伊人久久精品一区二区| 久久精品麻豆日日躁夜夜躁| 99久久精品影院老鸭窝| 国内精品久久久久久麻豆 | 亚洲精品高清久久| 少妇久久久久久被弄到高潮| 少妇久久久久久被弄高潮| 情人伊人久久综合亚洲| 久久中文字幕精品| 久久亚洲精品视频| 亚洲精品乱码久久久久久按摩| 国产无套内射久久久国产| 国内精品久久久久影院薰衣草| 青青草原1769久久免费播放| 久久久久久精品久久久久| 久久精品这里热有精品| 久久久久久久久久久久久久| 亚洲综合精品香蕉久久网97| 亚洲人成网亚洲欧洲无码久久| 久久国产精品一区| www.久久热.com| 久久久免费精品re6| 久久亚洲AV成人无码软件| 久久国产三级无码一区二区| 国产一久久香蕉国产线看观看| 久久精品亚洲AV久久久无码| 久久无码一区二区三区少妇 | 亚洲精品高清国产一久久| 亚洲午夜久久久影院| 久久久亚洲裙底偷窥综合| 亚洲精品无码久久久久AV麻豆| 色偷偷888欧美精品久久久| 91精品国产91久久久久福利| 欧美va久久久噜噜噜久久| 7777久久久国产精品消防器材| 亚洲欧美国产精品专区久久| 亚洲精品久久久www| 久久亚洲精品国产亚洲老地址 | 99久久99久久久精品齐齐| 性欧美大战久久久久久久久|