• <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>
            隨筆 - 70  文章 - 160  trackbacks - 0

            公告:
            知識(shí)共享許可協(xié)議
            本博客采用知識(shí)共享署名 2.5 中國(guó)大陸許可協(xié)議進(jìn)行許可。本博客版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意不得隨機(jī)刪除文章任何內(nèi)容,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 具體操作方式可參考此處。如您有任何疑問(wèn)或者授權(quán)方面的協(xié)商,請(qǐng)給我留言。

            常用鏈接

            留言簿(8)

            隨筆檔案

            文章檔案

            搜索

            •  

            積分與排名

            • 積分 - 179334
            • 排名 - 147

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            最近在看王曉東的《計(jì)算機(jī)算法設(shè)計(jì)與分析(第3版) 》,感覺(jué)講的挺不錯(cuò)的。這里先推薦下。

            接下來(lái)的幾章(包括本章),我準(zhǔn)備以連載的方式講出來(lái),主要用到的資料是上面推薦的那本書(shū)以及《算法導(dǎo)論》和網(wǎng)上的資源,內(nèi)容是概率分析與隨機(jī)算法。文章內(nèi)大部分內(nèi)容出自書(shū)中,我僅以匯總形式以及個(gè)人理解加以補(bǔ)充。如有紕漏,歡迎指出。

            概率算法的一個(gè)基本特征是對(duì)所求解問(wèn)題的同一實(shí)例用同一概率算法求解兩次可能得到完全不同的效果。這兩次求解問(wèn)題所需的時(shí)間甚至所得到的結(jié)果可能會(huì)有相當(dāng)大的差別。一般情況下,可將概率算法大致分為四類:數(shù)值概率算法,蒙特卡羅(Monte Carlo)算法,拉斯維加斯(Las Vegas)算法和舍伍德(Sherwood)算法。

            隨機(jī)數(shù)在概率算法設(shè)計(jì)中扮演著十分重要的角色。在現(xiàn)實(shí)計(jì)算機(jī)上無(wú)法產(chǎn)生真正的隨機(jī)數(shù),因此在概率算法中使用的隨機(jī)數(shù)都是一定程度上隨機(jī)的,即偽隨機(jī)數(shù)

            產(chǎn)生隨機(jī)數(shù)最常用的方法是線性同余法。由線性同余法產(chǎn)生的隨機(jī)序列a1,a2,…,an滿足
            1.a0=d
            2.an=(b*an-1+c)mod m (n=1,2…….)
            其中,b>0, c>=0, d>=m。d稱為該隨機(jī)序列的種子

            一般情況下,取gcd(m, b)=1,因此可取b為一素?cái)?shù)。

            這是一個(gè)隨機(jī)數(shù)類

            const unsigned long maxshort = 65535L;
            const unsigned long multiplier = 1194211693L;
            const unsigned long adder = 12345L;
             
            class RandomNumber{
            private:
                
            // 當(dāng)前種子
                unsigned long randSeed;
            public:
                
            // 構(gòu)造函數(shù),默認(rèn)值0表示由系統(tǒng)自動(dòng)產(chǎn)生種子
                RandomNumber(unsigned long s = 0);
                
            // 產(chǎn)生0 ~ n-1之間的隨機(jī)整數(shù)
                unsigned short Random(unsigned long n);
                
            // 產(chǎn)生[0, 1) 之間的隨機(jī)實(shí)數(shù)
                double fRandom();
            };
             
            // 產(chǎn)生種子
            RandomNumber::RandomNumber(unsigned long s)
            {
                
            if(s == 0)
                    randSeed 
            = time(0);    //用系統(tǒng)時(shí)間產(chǎn)生種子
                else
                    randSeed 
            = s;
            }
             
            // 產(chǎn)生0 ~ n-1 之間的隨機(jī)整數(shù)
            unsigned short RandomNumber::Random(unsigned long n)
            {
                randSeed 
            = multiplier * randSeed + adder;
                
            return (unsigned short)((randSeed >> 16% n);
            }
             
            // 產(chǎn)生[0, 1)之間的隨機(jī)實(shí)數(shù)
            double RandomNumber::fRandom()
            {
                
            return Random(maxshort) / double(maxshort);
            }

            利用這個(gè)隨機(jī)數(shù)類,寫(xiě)一個(gè)程序,模擬拋硬幣的實(shí)驗(yàn)。

            拋10次硬幣構(gòu)成一個(gè)事件,每次事件記錄得到正面的個(gè)數(shù)。反復(fù)模擬這個(gè)事件50,000次,然后對(duì)這50,000L次進(jìn)行輸出頻率圖,比較每次事件得到正面次數(shù)的比例。

            以下是總的代碼:
            頭文件 RandomNumber.h:

            // RandomNumber.h
             
            const unsigned long maxshort = 65535L;
            const unsigned long multiplier = 1194211693L;
            const unsigned long adder = 12345L;
             
            #ifndef RANDOMNUMBER_H
            #define RANDOMNUMBER_H
             
            class RandomNumber{
            private:
                
            // 當(dāng)前種子
                unsigned long randSeed;
            public:
                
            // 構(gòu)造函數(shù),默認(rèn)值0表示由系統(tǒng)自動(dòng)產(chǎn)生種子
                RandomNumber(unsigned long s = 0);
                
            // 產(chǎn)生0 ~ n-1之間的隨機(jī)整數(shù)
                unsigned short Random(unsigned long n);
                
            // 產(chǎn)生[0, 1) 之間的隨機(jī)實(shí)數(shù)
                double fRandom();
            };
             
            #endif

            類實(shí)現(xiàn)文件RandomNumber.cpp :

            // RandomNumber.cpp
            #include "RandomNumber.h"
            #include 
            <iostream>
            #include 
            <stdlib.h>
            #include 
            <time.h>
             
            using namespace std;
             
            // 產(chǎn)生種子
            RandomNumber::RandomNumber(unsigned long s)
            {
                
            if(s == 0)
                    randSeed 
            = time(0);    //用系統(tǒng)時(shí)間產(chǎn)生種子
                else
                    randSeed 
            = s;
            }
             
            // 產(chǎn)生0 ~ n-1 之間的隨機(jī)整數(shù)
            unsigned short RandomNumber::Random(unsigned long n)
            {
                randSeed 
            = multiplier * randSeed + adder;
                
            return (unsigned short)((randSeed >> 16% n);
            }
             
            // 產(chǎn)生[0, 1)之間的隨機(jī)實(shí)數(shù)
            double RandomNumber::fRandom()
            {
                
            return Random(maxshort) / double(maxshort);
            }

            主文件Main :
            // 主文件main
            /*

            * Author: Tanky woo
            * Blog:   www.WuTianQi.com
            * Date:   2010.12.7
            * 代碼來(lái)至王曉東《計(jì)算機(jī)算法設(shè)計(jì)與分析》
            */
            #include 
            "RandomNumber.h"
            #include 
            <iostream>
            #include 
            <iomanip>
            #include 
            <time.h>
            using namespace std;
             
            int TossCoins(int
             numberCoins)
            {
                
            // 隨機(jī)拋硬幣

                static RandomNumber coinToss;
                
            int i, tosses = 0
            ;
                
            for(i = 0; i < numberCoins; ++
            i)
                    tosses 
            += coinToss.Random(2
            );
                
            return
             tosses;
            }
             
            int
             main()
            {
                
            // 模擬隨機(jī)拋硬幣事件

                const int NCOINS = 10;
                
            const long NTOSSES = 50000L
            ;
                
            // heads[i]得到的i次正面的次數(shù)

                long i, heads[NCOINS+1];
                
            int
             j, position;
                
            // 初始化數(shù)組heads

                for(j = 0; j < NCOINS+1++j)
                    heads[j] 
            = 0
            ;
                
            // 重復(fù)50,000次模擬事件

                for(i = 0; i < NTOSSES; ++i)
                    heads[TossCoins(NCOINS)] 
            ++
            ;
                
            // 輸出頻率圖

                for(i = 0; i <= NCOINS; ++i)
                {
                    position 
            = int (float(heads[i]) / NTOSSES*72
            );
                    cout 
            << setw(6<< i << " "
            ;
                    
            for(j = 0; j<position-1++
            j)
                        cout 
            << " "
            ;
                    cout 
            << "*" <<
             endl;
                }
                
            return 0
            ;
            }

            輸出頻率圖:

            具體可以看看王曉東的《計(jì)算機(jī)算法設(shè)計(jì)與分析》第七章。

            下一篇我會(huì)寫(xiě)《隨機(jī)化算法(2) — 數(shù)值概率算法》。

             Tanky Woo原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)附上鏈接,請(qǐng)不要私自刪除文章內(nèi)任何關(guān)于本博客的鏈接。

            posted on 2010-12-10 08:01 Tanky Woo 閱讀(9474) 評(píng)論(2)  編輯 收藏 引用

            FeedBack:
            # re: 隨機(jī)化算法(1) — 隨機(jī)數(shù)[未登錄](méi) 2013-02-18 19:11 ming
            因此,就更加事實(shí)來(lái)說(shuō),不在于自己對(duì)于那樣存在的負(fù)面狀態(tài)不斷的進(jìn)行分析從而從中杜絕自己的那種腳步疼痛的現(xiàn)象或者其他的一種壓力無(wú)法釋放的狀態(tài),就現(xiàn)實(shí)來(lái)說(shuō)無(wú)法預(yù)知的上班或者下班狀態(tài)就能夠?qū)е伦约耗欠N對(duì)于腳步的不放松。即使晚上休息的時(shí)候也是如此  回復(fù)  更多評(píng)論
              
            # re: 隨機(jī)化算法(1) — 隨機(jī)數(shù)[未登錄](méi) 2013-04-01 13:49 MING
            有效性的費(fèi)用成本的安全其實(shí)就是建立在職位和人的關(guān)系主要就是設(shè)置和配置的關(guān)系,而不是配置和設(shè)置的關(guān)系,這個(gè)就是有效性費(fèi)用成本與無(wú)效性費(fèi)用成本在關(guān)系安全上面的做法  回復(fù)  更多評(píng)論
              

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


            久久国产综合精品五月天| 久久天天躁夜夜躁狠狠| 国产成人精品久久免费动漫| 国产V综合V亚洲欧美久久| 久久婷婷久久一区二区三区| 久久午夜综合久久| 无码精品久久久天天影视| 精品久久一区二区三区| 久久人搡人人玩人妻精品首页 | 久久精品无码专区免费青青| 麻豆精品久久久一区二区| 亚洲国产日韩欧美综合久久| 99精品国产在热久久无毒不卡| 99久久精品免费看国产一区二区三区| 国产精品久久久久免费a∨| 老司机国内精品久久久久| 无码国内精品久久人妻| 久久久久久国产精品无码下载| 久久无码人妻一区二区三区| 久久久精品人妻无码专区不卡| 久久久精品人妻一区二区三区蜜桃| 久久国产成人午夜aⅴ影院| 久久亚洲欧美国产精品| 国内精品久久久久影院亚洲| 久久99精品久久久久久秒播| 久久精品国产精品青草app| 久久亚洲私人国产精品| 久久久久久曰本AV免费免费| 国产精品久久久久a影院| 久久人人爽人人精品视频| 精品久久久久久无码人妻热| 国产精品岛国久久久久| av无码久久久久久不卡网站| 伊人久久综合无码成人网| 狠狠色丁香久久婷婷综合蜜芽五月| 久久精品成人免费国产片小草| 久久综合久久久| 国内精品欧美久久精品| 久久亚洲国产精品123区| 久久久久国产| 久久只有这精品99|