演算法設計清華大學出版社答案
『壹』 演算法設計與分析 屈婉玲版 答案
這本書有配套答案賣。
『貳』 急求數據結構演算法設計題目答案!!從順序表中刪除所有值為x的元素
評論 ┆ 舉報
最佳答案此答案由提問者自己選擇,並不代表網路知道知識人的觀點
回答:可愛鳥人
新手
11月19日 19:50 我覺得是這樣。。個人意見。
應該先判斷插入的數比哪個�蟆H緩?br />假如s=7.
p->Llink=s->Llink.
s->rlink=p->Rlink.
學過了 不過太就沒用可能給忘記了。
可以參考 數據結構(用面向對象方法與C++描述) 清華大學出版社。黃色皮的
揪錯 ┆ 評論 ┆ 舉報
『叄』 求演算法設計與分析(第二版)王曉東 編著 清華大學出版社的課後習題答案
你看看行不行。
『肆』 演算法設計-幫幫忙
這個估計要用文件輸入
否則太累了
--我們必須盡量優化程序才能達到題目的要求。顯然n實在是太大了,所以我們不但不可能忍受O(n2)的復雜度,甚至連n前面的系數過大都會造成超時。為了盡量減小時間復雜度,我們只能依靠自動機的理論。
自動機理論
一個DFA(確定性有限自動機)是一個五元組<∑, U, s, T, φ>,其中∑是字元集U 是一個有限的狀態集合, s 是 U 的一個元素表示初始狀態, T 是 U的一個子集,表示終止狀態and φ : U × ∑ → U 是轉移函數。
開始時自動機在初始狀態s,每步它讀入一個字元c,然後根據state=φ(state,c)進行狀態的轉移。如果當字元串結束時它達到了終止狀態,那麼就說它接受了字元串。
NFA(非確定性自動機)與DFA的主要區別就是,NFA從一個狀態按照一個字元轉移到的狀態可能有多個。因此NFA需要使用一個狀態集合來表示當前可能處在的狀態。
把自動機用圖來表示的話,一般用結點表示狀態,而結點之間有標有某個字元的有向邊,表示可以從邊的起點通過這個字元轉移到邊的終點。
此外NFA還可以包含標有ε的邊,這種邊表示不需要任何字元就可以直接進行狀態的轉移。
容易想到,如果我們建立了一個只接受符合正則表達式的自動機,就可以通過它來較快的判斷哪些位置是可匹配的。
具體應用
比較常見的字元串匹配自動機大多都是DFA。但是由於有+,*,把正則表達式直接轉變成DFA是非常困難的。因此我們只能先把它轉化成NFA。
先看一下一般的轉換規則:
如果正則表達式是一個字元,那麼對應的NFA是:
p0-a->p1
如果正則表達式是A+B的形式,那麼只要把它們的起始狀態和終止狀態合並就可以:
p0-a->p1
p0-b->p1
如果正則表達式是AB的形式,那麼只要把A和B對應的自動機首尾相接:
p0-a->p1-b->p2
如果正則表達式是A*的形式,那麼就需要按下面的圖來進行處理:
p0-a->p0
p0->p1
通過上面的步驟可以得出:NFA的狀態數不會超過正則表達式長度。
NFA中的狀態轉移
在NFA中進行狀態轉移比DFA要困難一些。我們可以定義兩個函數,一個叫做epsilon-closure,用來計算一組NFA狀態通過epsilon邊能夠到達的NFA狀態集合。另外一個move用來在NFA上進行狀態的轉移。
設當前的狀態集合是now,那麼狀態轉移的過程就是:
new = {}
for every state s in now do
new = new ∪ {t | (s,t) = c}
new = epsilon_closure(new)
其中的(s,t)=c表示從s狀態經過一個字元c可以轉化到t狀態。因為這個語句需要的集合總數也不會太多,所以可以通過預先計算出它們來加快速度。預處理後這個過程的復雜度是O(m2),而系數是比較小的。
但是由於在NFA中,我們必須把狀態的集合作為一個真正的狀態,每次狀態轉移都是對這個集合的處理。這樣轉移一次的復雜度是O(m2),這是不可忍受的(最大的數據需要大約2分鍾才能出解)。
既然NFA速度過慢,我們自然想要把它轉化為DFA。因為DFA中的狀態轉移是O(1)的。可是並沒有一個多項式復雜度的方法可以把NFA轉換成DFA。一般介紹的NFA轉換到DFA的方法都是通過類似BFS的方法來把NFA中所有可能出現的狀態集合對應成DFA的一個狀態。
這種轉換在本題中顯然是不可行的,因為NFA的結點數最多是500,而轉化成的DFA則可能有多達2500個狀態,即使實際有許多狀態不能達到,也是無論如何不可以忍受的。
看來把NFA轉換成DFA是行不通的。但是我們還是從NFA轉DFA的過程中受到了一些啟發:NFA之所以速度慢,是因為我們在進行狀態轉移的時候可能進行許多重復操作:比如從{1,2}沿一個字元1轉移後是{2,3},以後我們還可能遇到相同的情況,而這時我們還會用O(m2)的時間去進行狀態轉移。這是一種很嚴重的浪費。因此我們每進行一次狀態轉移,就把這個狀態轉移的情況放到hash表中,以後使用的時候就可以查找了。這相當於只把我們需要的一部分子集轉移成DFA,雖然一般情況下並不能降低時間復雜度,但是在實際應用中確實很有效。(特別是對於沒有*和括弧的自動機,這樣做可以保證線形的時間復雜度)
演算法回顧和細節
我們重新來看一下演算法的框架:
根據正則表達式建立NFA
now = start
while not eof do begin
read(c);
if 曾經進行過now,c的轉移 then 利用以前的結果
else 進行狀態轉移並記錄結果
if 終止狀態 in now then 輸出當前位置
end
建立NFA有各種方法,由於NFA並不會很大,所以我們可以使用遞歸的方法來實現。為了盡量減小系數,我們使用位壓縮的方式來實現集合,並採用較為簡化的hash函數(比如把一個集合位壓縮後的一系列整數加起來取對220的余數),並在輸入和輸出的時候通過緩沖區來加快速度。這樣就基本可以達到題目的時間要求。
但是注意到字元串可能有10M,而產生的NFA的狀態集合最多也可能有10M個,而每個集合都需要100到200位元組的存儲空間,大大超出了允許的空間范圍。因此我們需要對hash表的規模加以嚴格限制。如果規模過大就不得不放棄存儲狀態的想法,犧牲一定的時間來換取空間。
『伍』 誰有《演算法設計與分析》—王紅梅編著,清華大學出版社出版,這本書裡面的演算法用vc實現的代碼啊
Re:王紅梅老師你好,想提個建議給您的《演算法與設計》這本書,您能出一本答案么 發件人信息
發件人:[email protected] <[email protected]> 查看 添加 拒收
時 間:2010年10月22日(星期五) 上午10:28 純文本 |
收件人: 1010919533 <[email protected]>
附 件:0 個 ( )
大 小:2.2K
列印 | 顯示郵件原文 | 導出為eml文件 | 郵件有亂碼? | 轉發到群郵件 | 保存到記事本 | 作為附件轉發
備 註:
編輯刪除
請在此輸入備注...
取消
標記:已將此郵件標記為星標郵件。 取消星標
王同學您好!
我也一直有這個想法,無奈時間安排不過來,謝謝!
王紅梅
我給他發郵件,她說她忙……
『陸』 演算法設計
第5章:常用演算法設計(軟體設計篇)免費下載
鏈接:https://pan..com/s/1EsbJAHii_AXsOL6JuSnRHw
《演算法設計》是2007年清華大學出版社出版發行的圖書,作者是Jon Kleinberg / Éva Tardos。
『柒』 求 計算幾何 演算法與應用 第三版(清華大學出版社) 的習題答案
你到網上搜《演算法設計與實驗題解》找個電子版下就行了。同一個作者所著,包含你要的主教材習題解答。
『捌』 有誰知道在哪下《演算法設計與分析基礎》的課後習題答案的(作者:Anany levitin 潘彥翻譯)
去書城邊看邊拍照。
『玖』 求《計算機演算法設計與分析第5版習題及答案》全文免費下載百度網盤資源,謝謝~
《計算機演算法設計與分析第5版習題及答案》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1oxH2d3SdEUN0rx6LJRNBoA
簡介:本書是與「十二五」普通高等教育本科國家級規劃教材《計算機演算法設計與分析(第5版)》配套的輔助教材和國家精品課程教材,分別對主教材中的演算法分析題和演算法實現題給出了解答或解題思路提示。為了提高學生靈活運用演算法設計策略解決實際問題的能力,本書還將主教材中的許多習題改造成演算法實現題,要求學生設計出求解演算法並上機實現。本書教學資料包含各章演算法實現題、測試數據和答案,可在華信教育資源網免費注冊下載。本書內容豐富,理論聯系實際,可作為高等學校計算機科學與技術、軟體工程、信息安全、信息與計算科學等專業本科生和研究生學習計算機演算法設計的輔助教材,也是工程技術人員和自學者的參考書。

