軟件系統(tǒng)設(shè)計(jì)報(bào)告_第1頁(yè)
軟件系統(tǒng)設(shè)計(jì)報(bào)告_第2頁(yè)
軟件系統(tǒng)設(shè)計(jì)報(bào)告_第3頁(yè)
軟件系統(tǒng)設(shè)計(jì)報(bào)告_第4頁(yè)
軟件系統(tǒng)設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、軟件系統(tǒng)設(shè)計(jì)報(bào)告齊天大圣之中國(guó)象棋專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí):計(jì)04-6班小組成員:周川祥指導(dǎo)教師:張博、徐慧職稱:2007年6月 徐州 TOC o 1-5 h z 一、概述-1 - HYPERLINK l bookmark29 o Current Document 1引言-1 - HYPERLINK l bookmark32 o Current Document 2項(xiàng)目開(kāi)發(fā)計(jì)劃-1 - HYPERLINK l bookmark35 o Current Document 2.1開(kāi)發(fā)周期-1 - HYPERLINK l bookmark41 o Current Document 2.2詳細(xì)計(jì)

2、劃-1 - HYPERLINK l bookmark44 o Current Document 二、概要設(shè)計(jì)-2 - HYPERLINK l bookmark47 o Current Document 1網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)-2 - HYPERLINK l bookmark56 o Current Document 2人機(jī)對(duì)弈-2 - HYPERLINK l bookmark66 o Current Document 3游戲流程-2 - HYPERLINK l bookmark69 o Current Document 三、詳細(xì)設(shè)計(jì)-4 - HYPERLINK l bookmark72 o Curre

3、nt Document 1、基本數(shù)據(jù)結(jié)構(gòu)定義-4 - HYPERLINK l bookmark76 o Current Document 1.1棋子與棋子坐標(biāo)-4 - HYPERLINK l bookmark79 o Current Document 2.2棋子移動(dòng)于悔棋-4 - HYPERLINK l bookmark103 o Current Document 2、基本走法判斷和走法產(chǎn)生-5 - HYPERLINK l bookmark107 o Current Document 2.1走法判斷-5 - HYPERLINK l bookmark110 o Current Document

4、2.2走法產(chǎn)生與搜索-5 - HYPERLINK l bookmark113 o Current Document 3、網(wǎng)絡(luò)版-5 - HYPERLINK l bookmark117 o Current Document 3.1網(wǎng)絡(luò)消息定義-5 - HYPERLINK l bookmark126 o Current Document 3.2網(wǎng)絡(luò)套接字設(shè)計(jì)-6 - HYPERLINK l bookmark138 o Current Document 3.3網(wǎng)絡(luò)消息處理-6 - HYPERLINK l bookmark141 o Current Document 4、單機(jī)版-6 -4.1估值函數(shù)-

5、6 -4.1.1棋子的基本值與附加值-6 - HYPERLINK l bookmark152 o Current Document 4.1.2棋子的靈活性與棋盤控制74.1.3棋子關(guān)系的評(píng)估7 HYPERLINK l bookmark155 o Current Document 4.1.4返回給搜索接口84.2搜索函數(shù)8博弈樹(shù)8 HYPERLINK l bookmark165 o Current Document alpha-beta 搜索8 HYPERLINK l bookmark174 o Current Document 5、其他功能10 HYPERLINK l bookmark178

6、o Current Document 5.1悔棋與還原10 HYPERLINK l bookmark181 o Current Document 5.2保存殘局10 HYPERLINK l bookmark184 o Current Document 5.3動(dòng)態(tài)顯示CPU和內(nèi)存使用情況10 HYPERLINK l bookmark187 o Current Document 6、界面10 HYPERLINK l bookmark191 o Current Document 6.1繪制棋子106.2皮膚11四、項(xiàng)目測(cè)試11 HYPERLINK l bookmark197 o Current Do

7、cument 1、網(wǎng)絡(luò)版11 HYPERLINK l bookmark201 o Current Document 2、單機(jī)版11 HYPERLINK l bookmark205 o Current Document 五、用戶使用說(shuō)明11 HYPERLINK l bookmark212 o Current Document 六、問(wèn)題分析11 HYPERLINK l bookmark216 o Current Document 1、程序執(zhí)行效率11 HYPERLINK l bookmark228 o Current Document 2、內(nèi)存管理的時(shí)間開(kāi)銷12 HYPERLINK l bookm

8、ark231 o Current Document 3、程序智商12齊天大圣之中國(guó)象棋軟件系統(tǒng)設(shè)計(jì)1引言前幾學(xué)期,我們學(xué)習(xí)了計(jì)算機(jī)專業(yè)的幾門核心課程,如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng) 等。但是所學(xué)的僅僅停留在理論層次,沒(méi)有系統(tǒng)的將理論于實(shí)踐結(jié)合起來(lái),缺乏 動(dòng)手能力。針對(duì)以上問(wèn)題,本項(xiàng)目主要是運(yùn)用數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)網(wǎng)絡(luò)及TCP/IP 與編程等基礎(chǔ)知識(shí),結(jié)合人工智能、博弈論相關(guān)理論,用Visual C+ 6.0開(kāi)發(fā)平 臺(tái)來(lái)開(kāi)發(fā)“齊天大圣之中國(guó)象棋”,本項(xiàng)目融合人機(jī)對(duì)弈和網(wǎng)絡(luò)版于一體,用戶 可以隨心所欲的在單機(jī)版與網(wǎng)絡(luò)版中切換,還可以登錄游戲大廳(簡(jiǎn)易版),選 擇好友對(duì)戰(zhàn)。2項(xiàng)目開(kāi)發(fā)計(jì)劃21開(kāi)發(fā)周期8周(2

9、007年5月2007年7月)2.2詳細(xì)計(jì)劃1113周復(fù)習(xí)有關(guān)數(shù)據(jù)結(jié)構(gòu)與算法和網(wǎng)絡(luò)編程基本方法,學(xué)習(xí)博弈論相關(guān)理論1415周編制象棋中各個(gè)棋子的走法和攻防判斷,初步開(kāi)發(fā)出網(wǎng)絡(luò)版雛形,給出評(píng)估函數(shù)。16周完善網(wǎng)絡(luò)版,運(yùn)用前期學(xué)習(xí)的博弈樹(shù)和人工智能方法,給出簡(jiǎn)易搜索函數(shù)17周優(yōu)化搜索函數(shù),進(jìn)一步做好細(xì)節(jié)部分,進(jìn)行項(xiàng)目測(cè)試18周整體把握,進(jìn)一步完善二、概要設(shè)計(jì)1網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)網(wǎng)絡(luò)版主要功能如下:1、聊天功能2、判斷走棋是否正確,程序自動(dòng)恢復(fù)用戶走錯(cuò)的棋位。3、如果一方走棋超時(shí),給出提示后程序自動(dòng)走一步。4、任意一方可以提出悔棋請(qǐng)求,待對(duì)方同意后即可悔棋5、任意一方可以提出還原悔棋請(qǐng)求,待對(duì)方同意后即可還

10、原6、根據(jù)用戶需要更改皮膚(包括整體顏色和背景圖片)2人機(jī)對(duì)弈人機(jī)對(duì)弈主要功能如下:1、對(duì)當(dāng)前的棋局進(jìn)行估值,判斷雙方的勢(shì)力優(yōu)劣2、根據(jù)當(dāng)前棋局估值結(jié)果,尋找一步最優(yōu)的走法3、調(diào)用搜索線程,根據(jù)當(dāng)前的搜索結(jié)果走一步棋4、具有悔棋和還原功能5、動(dòng)態(tài)顯示當(dāng)前搜索使用CPU和內(nèi)存情況,評(píng)價(jià)搜索的效率6、根據(jù)用戶要求改變下棋的難度7、根據(jù)用戶需要更改皮膚(包括整體顏色和背景圖片)3游戲流程以下是本游戲的流程圖:中國(guó)象棋游戲總流程圖三、詳細(xì)設(shè)計(jì)1、基本數(shù)據(jù)結(jié)構(gòu)定義1.1棋子與棋子坐標(biāo)typedef enum /棋子定義NoChessMan=0,/ 沒(méi)有棋子/帥 車馬炮 仕象兵B(niǎo)lackKing,Blac

11、kRook,BlackHouse,BlackGunner,BlackAssist,BlackBishop, BlackSoldier,/將 車 馬 炮士 象 卒RedKing,RedRook,RedHouse,RedGunner,RedAssist,RedBishop,RedSoldier,ChessMan;_ 棋子坐標(biāo),由于考慮到搜索時(shí)內(nèi)存可能會(huì)占用很多,為了盡量節(jié)省內(nèi)存, 采用 了 byte 類型,byte 類型的定義為:typedef BYTE unsigned charstruct ChessPosBYTE x;BYTE y;2.2棋子移動(dòng)于悔棋棋子的移動(dòng)struct ChessMov

12、eint ChessID;ChessPos pFrom;ChessPos pTo;正在移動(dòng)的棋子struct MovingChessBYTE nChessID;POINT ptMovePoint;悔棋時(shí)需要的數(shù)據(jù)結(jié)構(gòu)struct UnDoMoveChessMove cmChessMove;short nChessID;/被吃掉的棋子;/棋子類型定義typedef enumBLACKCHESS,REDCHESS;2、基本走法判斷和走法產(chǎn)生2.1走法判斷主要工作在CMoveGenerator類的成員函數(shù)IsValided(涵數(shù)中實(shí)現(xiàn),分別對(duì) 每個(gè)棋子進(jìn)行判斷。此處省略。2.2走法產(chǎn)生與搜索在進(jìn)行走

13、法產(chǎn)生的時(shí)候,往往伴隨著搜索進(jìn)行。對(duì)于一個(gè)局面的所有直接后 繼,有兩種選擇:一次產(chǎn)生一種走法然后搜索之;或者一次產(chǎn)生其所有走法然后 搜索之。由于存在著剪枝算法,對(duì)一個(gè)局面的某一走法搜索之后往往可能不再需 要搜索其他后繼,也就是說(shuō):可能不用產(chǎn)生全部走法就能夠完成搜索。一次產(chǎn)生 一種走法看起來(lái)似乎更有效率。但是,由于剪枝算法的剪枝效率很大程度上依賴 于節(jié)點(diǎn)的排列順序,往往一次產(chǎn)生所有節(jié)點(diǎn),然后以某種方法調(diào)整其排列順序會(huì) 使搜索效率大大提高。所以,在實(shí)際使用中,先一次產(chǎn)生一個(gè)局面的全部走法, 然后調(diào)整其搜索順序。實(shí)際上,為了減少運(yùn)算量,事先建立的小型數(shù)據(jù)庫(kù),將所有的走法都保存在 數(shù)據(jù)庫(kù)中,然后檢索數(shù)

14、據(jù)庫(kù),這樣會(huì)效率高一些。3、網(wǎng)絡(luò)版3.1網(wǎng)絡(luò)消息定義定義在CMyMessage類中。在CMyMessage中,成員函數(shù)virtual void Serialize(CArchive& ar);來(lái)將網(wǎng)絡(luò)消息先序列化后再進(jìn)行傳輸,接受方受到消息在調(diào)用Serialize()函數(shù),就可以恢復(fù)出消息,這樣方便。但這樣只能用于有限的數(shù)據(jù)類型。3.2網(wǎng)絡(luò)套接字設(shè)計(jì)本程序?qū)⑻捉幼忠灶惖男问竭M(jìn)行了封裝,由于基于c/s模式需要偵聽(tīng)和接受 套接字,所以本程序主要將不同的套接口須完成的任務(wù)封裝成了兩個(gè) 類:CClientSock ,CServerSock,他們都派生于MFC封裝的CSocket類,然后重載 相應(yīng)得虛函

15、數(shù),用來(lái)完成各自得功能。在CClient類中,定義類以下幾個(gè)數(shù)據(jù)成 員CArchive* m_aSessionIn;CArchive* m_aSessionOut;CSocketFile* m_sfSocketFile;用于發(fā)送/接受消息時(shí)進(jìn)行串行化。詳細(xì)請(qǐng)參考源代碼。3.3網(wǎng)絡(luò)消息處理網(wǎng)絡(luò)消息處理主要放在CClient類的OnReceive()函數(shù)中,當(dāng)然也可以放 在CChineseChessDlg中。根據(jù)網(wǎng)絡(luò)消息的定義iFlag標(biāo)志為分為不同的消息進(jìn)行 處理。/0表示走棋,1表示下載服務(wù)器信息,2表示同步請(qǐng)求,具體處理見(jiàn)Client.cpp 文件中的OnReceve()函數(shù)4、單機(jī)版4.1

16、估值函數(shù)4.1.1棋子的基本值與附加值棋子的價(jià)值評(píng)估,簡(jiǎn)單的說(shuō)就是評(píng)估雙方都有哪些棋子在棋盤上。程序中讓 一個(gè)車價(jià)值為500,一個(gè)馬價(jià)值為300,一個(gè)兵價(jià)值為100等等。將的價(jià)值為無(wú) 限大(通常用一個(gè)遠(yuǎn)大于其他棋子的數(shù))。一方的棋子總值就是棋盤上存活的該 方棋子乘以棋子價(jià)值的和。用一個(gè)式子表達(dá):SideValue=Sum ( PieceNumber X PieceValue)其中PieceNumber是某種棋子的數(shù)量,PieceValue是該種棋子的價(jià)值,Sum是 對(duì)各種棋子的總價(jià)值求和。如果紅色的棋子價(jià)值總和大于黑色的棋子價(jià)值總和, 通常這意味著紅方的局勢(shì)優(yōu)于黑方。而紅黑雙方的SideVal

17、ue之差越大,紅方的 優(yōu)勢(shì)也就越大。但對(duì)于卒/兵,還存在過(guò)河卒的附加值,程序中的基本值為:卒的附加值矩陣為:constint卒的附加值矩陣為:constintBlackSoldier_AddValue109=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,100,100,100,100,100,100,100,100,100,120,140,140,140,140,140,120,100,120,120,140,150,150,150,140,120,12

18、0,120,120,140,150,150,150,140,120,120,0,0,0,0,0,0,0,0,0,;RedSoldier_AddValue109= 0,0,0,0,0,0,0,0,0,120,120,140,150,150,150,140,120,120,120,120,140,150,150,150,140,120,120,100,120,140,140,140,140,140,120,100,100,100,100,100,100,100,100,100,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

19、,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.1.2棋子的靈活性與棋盤控制棋子的靈活性是指棋子的活動(dòng)范圍,通常是越大越好。一匹不能動(dòng)的馬很難 在棋局中發(fā)揮重要作用;同樣,一個(gè)蹲在角落里的車也是價(jià)值不高的。評(píng)估棋子的靈活性較為簡(jiǎn)單,將一個(gè)棋子的所有合法走法羅列出來(lái),乘上該 種棋子每一可走步的價(jià)值就行了。Mobility=Sum (MoveNumber X MoveValue)其中,MoveNumber是某種棋子的合法走法數(shù)量,MoveValue是該種棋子每 一走法的價(jià)值,Sum是對(duì)所有棋子的靈活性價(jià)值求和。Mobility就是所有棋子的 靈活性分?jǐn)?shù)。與靈活性評(píng)估類似,還可

20、以評(píng)估博弈雙方對(duì)棋盤上位置的控制能力。在象棋 中,如果一位置落在某方棋子的合法走步上,就可以認(rèn)為被該方控制。如果某一 位置同時(shí)落在雙方的合法走步上,我們可以根據(jù)雙方控制該位置的棋子數(shù)量及棋 子價(jià)值來(lái)決定孰優(yōu)孰劣。能控制更多位置的一方應(yīng)在這項(xiàng)評(píng)分上占優(yōu)。4.1.3棋子關(guān)系的評(píng)估棋子間的關(guān)系也是估值的重要內(nèi)容之一,我們可以將某個(gè)棋子被對(duì)方棋子威 脅看成是一個(gè)不利的因素。例如紅車的位置在黑馬的合法走步當(dāng)中,此時(shí)我們可 以把紅車的價(jià)值減去一個(gè)值(例如200)來(lái)刻畫這種情形。而如果紅馬在黑車的 合法走步之中,而紅馬同時(shí)也在紅卒的合法走步之中,我們可以認(rèn)為紅馬置于紅 卒的保護(hù)之下,沒(méi)有受到威脅,價(jià)值不變。

21、棋子關(guān)系的評(píng)估應(yīng)考慮到該誰(shuí)走棋的問(wèn)題。如果某個(gè)紅馬落在黑炮的合法走 步之內(nèi),但此時(shí)輪到紅方走棋,應(yīng)認(rèn)為紅馬受到的威脅較輕。而如果此時(shí)輪到黑 方走棋,就應(yīng)認(rèn)為紅馬受到的威脅很大,應(yīng)減去一個(gè)相對(duì)較大的值了。如果將被 對(duì)方威脅,且輪到對(duì)方走棋,那么無(wú)論有何種棋子可以走到將位都沒(méi)有意義,將 等于失去了。此時(shí)應(yīng)結(jié)束估值返回失敗的估值(通常是極大或極小值)。4.1.4返回給搜索接口一個(gè)估值函數(shù)可以從若干角度評(píng)價(jià)某一局面上博弈雙方的優(yōu)劣程度。把這些 不同方面的評(píng)價(jià)得分加在一起,就構(gòu)成了一方的價(jià)值總和。如果我們把紅方的價(jià) 值總和叫做RedValue,黑方價(jià)值總和叫做BlackValue,那么一個(gè)局面的估值Va

22、lue 就是紅方和黑方的價(jià)值差。表達(dá)如下式:Value=RedValue-BlackValue這個(gè)Value也就是最終返回給搜索引擎的估值。4.2搜索函數(shù)4.2.1博弈樹(shù)甲乙兩人對(duì)弈,假定現(xiàn)在該甲走棋,甲可以有40種走法(不論好壞);而對(duì) 甲的任一走法,乙也可以有與之相對(duì)的若干種走法。然后又輪到甲走棋,對(duì)乙的走法甲又有若干種方法應(yīng)對(duì)如此往復(fù)。顯然, 我們可以依此構(gòu)建一棵博弈樹(shù),將所有的走法羅列出來(lái)。在這棵樹(shù)的根部是棋局 的初始局面。根的若干子節(jié)點(diǎn)則是由甲的每一種可能走法所生成的局面,而這些 節(jié)點(diǎn)的子節(jié)點(diǎn)則是由與之相對(duì)的乙的每一種可能走法所生成的局面在這棵 樹(shù)的末梢,是結(jié)束的棋局,甲勝或者乙勝或

23、者是雙方都無(wú)法取勝的平局。在通常的棋局當(dāng)中,一個(gè)局面的評(píng)估往往并不像輸、贏、平3種狀態(tài)這么簡(jiǎn) 單,在分不出輸贏的局面中棋局也有優(yōu)劣之分。根據(jù)估值函數(shù)的分析,可規(guī)定甲 勝為+8 ;乙勝為-8 ;和局為0;其他的情形依據(jù)雙方剩余棋子的數(shù)量及位置 評(píng)定-8+8之間的具體分?jǐn)?shù)。這樣我們可以建立一棵固定深度的搜索樹(shù),其 葉子節(jié)點(diǎn)不必是終了狀態(tài),而只是固定深度的最深一層的節(jié)點(diǎn),其值由上述函數(shù) 評(píng)出;對(duì)于中間節(jié)點(diǎn),如同前面提到的那樣,甲方取子節(jié)點(diǎn)的最大值,乙方取子 節(jié)點(diǎn)的最小值。4.2.2 alpha-beta 搜索Alpha-beta搜索是有基本的極大極小值搜索經(jīng)過(guò)alpha和beta剪枝優(yōu)化后 而得。詳

24、細(xì)的alpha-beta搜索分析在這里不再敖述,以下為alpha-beta搜索的偽 代碼:/nDeep為搜索深度,nAlpha,nBeta為當(dāng)前的alpha和beta值。intAlphaBeta (nDeep,nAlpha, nBeta)if (gameover)return Eveluation ; 勝負(fù)已分,返回估值if (nDeep = 0)returnEveluation ; 葉子節(jié)點(diǎn)返回估值if (IsMinNode) 此句用于判斷當(dāng)前節(jié)點(diǎn)是何種節(jié)點(diǎn)/是取極小值的節(jié)點(diǎn)for (eachpossiblemove m) 對(duì)每一可能的走法 mmakemovem; 生成新節(jié)點(diǎn)score =

25、alphabeta (nDeep-1, nAlpha, nBeta) 遞歸搜索子節(jié)點(diǎn) unmakemovem ; 撤銷搜索過(guò)的節(jié)點(diǎn)if (score = nBeta)returnnAlpha; /alpha剪枝,拋棄后繼節(jié)點(diǎn)returnnBeta; 返回最小值else取極大值的節(jié)點(diǎn)for (each possible move m) 對(duì)每一可能的走法 mmake move m; 生成新節(jié)點(diǎn)score = alphabeta (nDeep-1, nAlpha, nBeta) 遞歸unmake move m ; 撤銷搜索過(guò)的節(jié)點(diǎn)if(score nAlpha) /取極大值nAlpha = scor

26、e;if (nAlpha = nBeta)return nBeta; /beta剪枝,拋棄后繼節(jié)點(diǎn)return nAlpha ; 返回極大值5、其他功能5.1悔棋與還原悔棋的思想很簡(jiǎn)單,只是調(diào)用STL的stack容器,保存每一步走法,當(dāng)需要悔棋時(shí),從相應(yīng) 得棧中彈出來(lái)即可,注意需要導(dǎo)入#includeUsing namespace std;5.2保存殘局運(yùn)用CFileDialog類對(duì)象打開(kāi)文件選擇對(duì)話框,定義FILE* fp;fp=fopen(pCMFile,nw);/打 開(kāi)for(i=0;i10;i+)for(j=0;j=BlackKing&x=RedKing&x=RedSoldier)判斷

27、是不是同一方的棋子#define IsSameSide(x,y) (IsBlack(x)&IsBlack(y)|(IsRed(x)&IsRed(y)這樣C+就當(dāng)作內(nèi)聯(lián)來(lái)處理。有些函數(shù)在程序中反復(fù)被調(diào)用了無(wú)數(shù)次,如果把它寫成內(nèi)聯(lián)函數(shù),這樣會(huì)大 大提高執(zhí)行效率的,但是,C +的編譯器對(duì)于任何內(nèi)有循環(huán)語(yǔ)句的內(nèi)聯(lián)函數(shù)都 認(rèn)為是過(guò)于復(fù)雜, 而不當(dāng)作內(nèi)聯(lián)處理了。例如判斷游戲 是否中止的函數(shù) IsGameOver(),這段代碼檢查了將帥是否都還存在,并返回了結(jié)果。我們可以把該 函數(shù)內(nèi)部的循環(huán)展開(kāi),將若干語(yǔ)句逐一寫上去,將帥的位置并不太多,這樣也比 使用循環(huán)快一點(diǎn)。然后,編譯的時(shí)候內(nèi)聯(lián)代碼就產(chǎn)生了。C+中虛函

28、數(shù)存在后期綁定問(wèn)題,由于走法產(chǎn)生、估值、搜索相互對(duì)象中 存在反復(fù)調(diào)用,嚴(yán)重影響了執(zhí)行速度,較快速的方法也是將估值、走法產(chǎn)生和搜 索引擎合成一個(gè)類,讓它們之間在互相調(diào)用時(shí)不再使用對(duì)象指針操作虛函數(shù),這 樣就可以去除在核心代碼中由于后期綁定所造成的性能損失。但是這樣,這個(gè)類 就太龐大了,影響了程序的可讀性,也違反了面向?qū)ο蟮幕舅枷搿?、內(nèi)存管理的時(shí)間開(kāi)銷申請(qǐng)內(nèi)存的操作同算術(shù)運(yùn)算、賦值、函數(shù)調(diào)用等操作相比,是相當(dāng)緩慢的。 所以當(dāng)程序執(zhí)行市,在搜索的過(guò)程中避免動(dòng)態(tài)的申請(qǐng)內(nèi)存。也要避免創(chuàng)建對(duì)象, 因?yàn)槿魏螌?duì)象的創(chuàng)建同樣會(huì)引發(fā)內(nèi)存的動(dòng)態(tài)分配在產(chǎn)生走法時(shí),程序首先將走法隊(duì)列置于一段預(yù)先申請(qǐng)的內(nèi)存當(dāng)中,以避免 頻繁的申請(qǐng)動(dòng)態(tài)內(nèi)存而引起大量的時(shí)間耗費(fèi)。當(dāng)搜索引擎對(duì)象被創(chuàng)建出來(lái)時(shí),所 有的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論