青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 70  文章 - 160  trackbacks - 0

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

常用鏈接

留言簿(8)

隨筆檔案

文章檔案

搜索

  •  

積分與排名

  • 積分 - 180080
  • 排名 - 147

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

已出連載

1.《隨機(jī)化算法(1) — 隨機(jī)數(shù)》

2.《隨機(jī)化算法(2) — 數(shù)值概率算法》

3.《隨機(jī)化算法(3) — 舍伍德(Sherwood)算法》

正文:

悟性不夠,這一章看代碼看了快一個(gè)上午,才理解。

上一章講過《概率算法(3) — 舍伍德(Sherwood)算法》,但是他的有點(diǎn)是計(jì)算時(shí)間復(fù)雜性對(duì)所有實(shí)例而言相對(duì)均勻,而其平均時(shí)間復(fù)雜性沒有改變。而拉斯維加斯算法怎么顯著改進(jìn)了算法的有效性。

拉斯維加斯算法的一個(gè)顯著特征是它所作的隨機(jī)性決策有可能導(dǎo)致算法找不到所需的解。因此通常用一個(gè)bool型函數(shù)表示拉斯維加斯算法。

void Obstinate(InputType x, OutputType &y)
{
 
    
// 反復(fù)調(diào)用拉斯維加斯算法LV(x, y),直到找到問題的一個(gè)解
    bool success= false;
    
while (!success) 
         success 
= LV(x,y);
}

 

 

 考慮用拉斯維加斯算法解決N皇后問題

對(duì)于n后問題的任何一個(gè)解而言,每一個(gè)皇后在棋盤上的位置無任何規(guī)律,不具有系統(tǒng)性,而更象是隨機(jī)放置的。由此容易想到下面的拉斯維加斯算法。
在棋盤上相繼的各行中隨機(jī)地放置皇后,并注意使新放置的皇后與已放置的皇后互不攻擊,直至n個(gè)皇后已相容地放置好,或已沒有下一個(gè)皇后的可放置位置時(shí)為止。注意這里解決的是找到其中一個(gè)方法,求不是求出N皇后的全部解。

這里提前說明一下,否則不好理解。

接下來的這個(gè)用Las Vegas算法解決N皇后問題,我們采用的是隨機(jī)放置位置策略回溯法相結(jié)合,具體就是比如八皇后中,前幾行選擇用隨機(jī)法放置皇后,剩下的選擇用回溯法解決。

這個(gè)程序不是很好理解,有的地方我特別說明了是理解程序的關(guān)鍵,大家看時(shí)一定要認(rèn)真了,另外,王曉東的書上先是用單純的隨機(jī)法解決,大家可以先去理解書上這個(gè)例子。然后再來分析我這個(gè)程序。不過那本書上關(guān)于這一塊錯(cuò)誤比較多,大家看時(shí)要注意哪些地方他寫錯(cuò)了。

拉斯維加斯算法解決N皇后代碼:

依然用到了RandomNumber.h頭文件,大家可以去看下第一章,我就不貼出來了。

剩下部分的代碼:

注意QueensLV()函數(shù)是這個(gè)程序的精髓所在。

Queen.h頭文件

#ifndef QUEEN_H
#define QUEEN_H
 
class Queen
{
    friend 
bool nQueen(int);
private:
    
bool Place(int k);             // 測試皇后k置于第x[k]列的合法性
    bool Backtrack(int t);         // 解n后問題的回溯法
    bool QueensLV(int stopVegas);  // 隨機(jī)放置n個(gè)皇后拉斯維加斯算法
    int n, *x, *y;
};
 
#endif

 

 Queen.cpp文件

 #include <iostream>

#include "Queen.h"
#include 
"RandomNumber.h"
using namespace std;
 
bool Queen::Place(int k)
{
    
// 測試皇后k置于第x[k]列的合法性
    for(int j = 1; j < k; ++ j)
        
if((abs(k-j) == abs(x[j]-x[k])) || (x[j]==x[k]))
            
return false;
    
return true;
}
 
bool Queen::Backtrack(int t)
{
    
// 解n后問題的回溯法
    if(t > n)
    {
        
for(int i=1; i<=n; ++i)
            y[i] 
= x[i];
        
return true;
    }
    
else
        
for(int i=1; i<=n; ++i)
        {
            x[t] 
= i;
            
if(Place(t) && Backtrack(t+1))
                
return true;
        }
        
return false;
}
 
/*
* QueensLV是整個(gè)Las Vegas解n皇后的精髓。而且這個(gè)函數(shù)不好理解,我在這里具體分析下。
* k是第k行,x[k]表示第k行的皇后放在x[k]列
* 下面這兩點(diǎn)解析請(qǐng)認(rèn)真看了,我個(gè)人就是卡在這里半天了,但是理解后很簡單。
* 標(biāo)號(hào)①處:這里是遍歷第k行所有可以放置的列號(hào),用y保存下來,并用count記錄有多少個(gè)位置可以放置
* 標(biāo)號(hào)②處:這里利用上面保存的可以放置的列,然后隨機(jī)取其中一列來放置第k行的皇后。這就是Las Vegas的精髓!
*/
// Author: Tanky Woo
// Blog:    www.WuTianQi.com
bool Queen::QueensLV(int stopVegas)
{
    
// 隨機(jī)放置n個(gè)皇后的拉斯維加斯算法
    RandomNumber rnd;    // 隨機(jī)數(shù)產(chǎn)生器
    int k = 1;           // 下一個(gè)放置的皇后編號(hào)
    int count = 1;
    
// 1 <= stopVegas <= n 表示允許隨機(jī)放置的皇后數(shù)
    while((k <= stopVegas) && (count > 0))
    {
        count 
= 0;
        
for(int i = 1; i<=n; ++i)      // ----------- ①
        {
            x[k] 
= i;
            
if(Place(k))
                y[count
++= i;
        }
        
if(count > 0)                   // -------------②
            x[k++= y[rnd.Random(count)];   // 隨機(jī)位置
    }
    
return (count > 0);   // count > 0表示放置位置成功
}

 

 Main.cpp主文件:

/*
* Author: Tanky woo
* Blog:   www.WuTianQi.com
* Date:   2010.12.9
* 拉斯維加斯(Las Vegas)算法解決N皇后問題
* 代碼來至王曉東《計(jì)算機(jī)算法設(shè)計(jì)與分析》
*/
#include 
"Queen.h"
#include 
"RandomNumber.h"
#include 
<iostream>
using namespace std;
 
bool nQueen(int n)
{
    
// 與回溯法結(jié)合的解n后問題的拉斯維加斯算法
    Queen X;
    
// 初始化X
    X.n = n;
    
int *= new int[n+1];
    
int *= new int[n+1];
    
for(int i=0; i<=n; ++i)
    {
        p[i] 
= 0;
        q[i] 
= 0;
    }
    X.y 
= q;
    X.x 
= p;
    
// 設(shè)置隨機(jī)放置皇后的個(gè)數(shù)
    int stop = 8;
    
if(n > 15)
        stop 
= n-15;
    
bool found = false;
    
while(! X.QueensLV(stop));
    
// 算法的回溯搜索部分
    if(X.Backtrack(stop+1))
    {
        
for(int i=1; i<=n; ++i)
            cout 
<< p[i] << " ";
        found 
= true;
    }
    cout 
<< endl;
    delete [] p;
    delete [] q;
    
return found;
}
 
int main()
{
    nQueen(
8);
}

 

 在8皇后問題中:

1.stopVegas=0表示完全使用回溯法解決問題。因此一定可以得到一組解。

2.stopVegas=8表示完全實(shí)用隨機(jī)法解決問題。因此一定可以得到一組解。

注意書上說解決8皇后問題時(shí),列出了一個(gè)不同stopVegas值時(shí),所對(duì)應(yīng)的算法成功率,在stopVegas=8時(shí),他寫著是0.1293,我個(gè)人認(rèn)為是錯(cuò)的。接下來我說下自己這么理解的原因:

首先,這個(gè)程序?yàn)楹螘?huì)造成有失敗的情況,那就是因?yàn)樵陔S機(jī)求出前stopVegas行成立時(shí),不代表后面N-stopVegas行用回溯就可以成立,因?yàn)檫@不是一個(gè)徹底的回溯。它是從stopVegas+1行開始計(jì)算,回溯不成立最后返回時(shí),也只停留在stopVegas。

而我們?cè)谕耆S機(jī)時(shí),那么它就是反復(fù)調(diào)用隨機(jī)位置放置n個(gè)皇后的Las Vegas算法,直至放置成功。所以當(dāng)stopVegas=8時(shí),他的成功率也應(yīng)該是100%。

另外在stopVegas=3時(shí),成功率等于0.49,趨近于0.5,大家可以試試,基本上每運(yùn)行兩次會(huì)有一次回來結(jié)果。

如果上面我的理解有錯(cuò),歡迎大家指出,我的博客(http://www.wutianqi.com/)。

下一篇我會(huì)寫《隨機(jī)化算法(5) — 蒙特卡羅(Monte Carlo)算法》。

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

Tanky Woo 標(biāo)簽: 

 

posted on 2010-12-15 14:28 Tanky Woo 閱讀(3281) 評(píng)論(0)  編輯 收藏 引用

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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩精品中文字幕| 亚洲欧美高清| 久久动漫亚洲| 午夜精品久久一牛影视| 亚洲欧美国产日韩天堂区| 亚洲在线播放| 久久精品国产成人| 久久综合亚州| 欧美激情国产精品| 一区二区三区精品视频| 欧美亚洲视频在线观看| 久久精品视频在线免费观看| 久久免费99精品久久久久久| 亚洲国产精品一区| 一区二区三区免费看| 亚洲欧美日韩国产成人精品影院| 久久精品国产在热久久| 欧美日韩一区二区免费视频| 国产一区二区久久| 亚洲精品婷婷| 久久精品国产77777蜜臀| 欧美成人免费观看| 中文亚洲欧美| 美女福利精品视频| 国产精品久久久久久久久婷婷| 一区二区在线不卡| 亚洲一区二区黄| 欧美成人精品在线播放| 亚洲一区二区三区在线| 毛片基地黄久久久久久天堂| 国产精品久久久久久久久免费| 在线欧美三区| 欧美主播一区二区三区| 亚洲精品一区二区三区四区高清| 久久成人国产| 国产麻豆日韩| 亚洲无人区一区| 亚洲成人在线视频网站| 久久er99精品| 国产精品丝袜xxxxxxx| 一区二区免费在线视频| 欧美黄色免费网站| 久久久久国产成人精品亚洲午夜| 欧美日韩中文字幕在线视频| 亚洲日本va午夜在线电影 | 一区二区三区久久精品| 久久一区中文字幕| 午夜精品理论片| 国产精品你懂的| 国产精品99久久久久久有的能看 | 亚洲第一伊人| 久久青草福利网站| 午夜日韩在线| 国产视频在线观看一区二区三区| 中文av一区特黄| 亚洲电影激情视频网站| 牛夜精品久久久久久久99黑人 | 香蕉久久精品日日躁夜夜躁| 一区二区三区国产精品| 欧美成人精品一区| 亚洲第一精品福利| 性欧美1819sex性高清| 亚洲精品乱码久久久久| 欧美国产亚洲视频| 久久xxxx| 国产午夜一区二区三区| 欧美一区二区在线免费播放| 中日韩视频在线观看| 国产精品久久777777毛茸茸| 中国成人在线视频| 在线视频亚洲欧美| 国产精品视频久久久| 欧美在线不卡视频| 性色av一区二区三区| 在线成人国产| 亚洲国产黄色| 欧美少妇一区二区| 羞羞答答国产精品www一本| 欧美在线观看一二区| 在线观看日韩国产| 亚洲茄子视频| 国产欧美韩国高清| 模特精品在线| 欧美三区美女| 久久久久国产精品麻豆ai换脸| 久久亚洲综合| 欧美精品999| 亚洲欧洲日夜超级视频| 亚洲日本中文字幕免费在线不卡| 欧美成人官网二区| 亚洲女性裸体视频| 久久成人人人人精品欧| 亚洲黄色高清| 亚洲综合视频1区| 亚洲成人在线视频播放| 一区二区三区视频在线观看| 国产最新精品精品你懂的| 91久久中文字幕| 国产一区二区三区久久悠悠色av | 久久国产精品久久久久久久久久 | 麻豆精品传媒视频| 亚洲视频视频在线| 久久久999精品| 亚洲一区二区三区高清不卡| 久久一区二区三区四区| 先锋影音国产精品| 欧美精品成人一区二区在线观看 | 国产精品video| 女仆av观看一区| 国产欧美日韩在线观看| 亚洲精品一区二区在线| 1000部精品久久久久久久久| 亚洲男人的天堂在线| 欧美黄免费看| 久久综合国产精品| 国产乱码精品一区二区三区忘忧草| 亚洲国产综合在线看不卡| 国产一区二区av| 中文精品视频一区二区在线观看| 亚洲精品国产系列| 久久亚洲一区| 久久久久久91香蕉国产| 国产麻豆一精品一av一免费| 亚洲视频1区| 亚洲午夜极品| 欧美日韩中文在线| 日韩一级在线观看| 99精品国产一区二区青青牛奶| 久热爱精品视频线路一| 欧美xart系列高清| 一区久久精品| 久久精品国亚洲| 美日韩免费视频| 尤物精品国产第一福利三区 | 亚洲美女在线看| 免费观看日韩| 91久久香蕉国产日韩欧美9色 | 亚洲午夜高清视频| 欧美日韩一区二区三区四区五区| 亚洲人成在线观看网站高清| 午夜精品福利视频| 久久高清国产| 国产日韩欧美在线播放不卡| 亚洲电影av| 亚洲精选视频免费看| 欧美成人精品| 亚洲欧洲一二三| 亚洲桃色在线一区| 国产精品你懂的在线欣赏| 中文av一区二区| 欧美一区二区视频免费观看| 国产欧美日韩精品一区| 久久9热精品视频| 欧美11—12娇小xxxx| 亚洲日本乱码在线观看| 欧美激情亚洲精品| 亚洲一区二区高清| 久久久久欧美精品| 欧美黄色精品| 日韩亚洲欧美成人一区| 亚洲欧美在线aaa| 国产精品在线看| 久久精品综合一区| 欧美国内亚洲| 亚洲永久免费| 在线观看国产成人av片| 欧美视频二区| 久久精品国产久精国产一老狼| 亚洲电影一级黄| 午夜精品短视频| 亚洲二区精品| 国产精品www.| 久久人人97超碰精品888| 亚洲精品一区二区三区樱花 | 在线中文字幕日韩| 国产精品综合色区在线观看| 欧美不卡高清| 亚洲欧美综合国产精品一区| 亚洲国产精品毛片| 久久精品91| 亚洲视频免费在线观看| 在线播放中文一区| 国产精品久久久久久久一区探花| 久久欧美中文字幕| 亚洲欧美成人综合| 亚洲精品日韩一| 女女同性女同一区二区三区91| 亚洲欧美日韩在线| 99亚洲精品| 亚洲激情自拍| 国模精品一区二区三区| 欧美视频精品在线| 欧美成人精品一区二区| 久久久久久夜精品精品免费| 亚洲天堂免费观看| 亚洲理论电影网| 亚洲激情视频在线播放| 欧美gay视频| 老司机免费视频久久| 久久狠狠亚洲综合|