演算法設計與分析第二版王紅梅
⑴ 快速排序的演算法復雜度分析
原文地址:
快速排序的演算法復雜度分析
以下是快排的java演算法:
大家都知道快排的時間復雜度是O(n*ln[n]),那麼這個復雜度是如何計算出來的呢?
最好的情況下,每次劃分對一個記錄定位後,要記錄的左側子序列與右側子序列的長度相同。在具有n個記錄的序列中,一次劃分需要對整個待劃分序列掃描一遍,所需的時間為O(n)。
設 是對n個記錄的序列進行排序的時間,每次劃分後,正好把劃分區域分為長度相等的連個子序列,顯然T(0)=T(1) =1,則有:
最壞的情況下,待排序的記錄序列正序或逆序,每次劃分只能得到一個比上一次劃分少一個記錄的子序列,(另一個子序列為空)。此時,必須經過n-1次遞歸調用才能把所有記錄定位,而且第i趟劃分需要經過n-i次比較才能找個才能找到第i個記錄的位置,因此時間復雜度為
平均情況下,設軸值記錄的關鍵碼第k小(1≤k≤n),則有:
由上式可推出如下兩式:
兩式相減,然後兩邊同除以n(n+1)得
又因為f(n)單調遞減,單調有界數列極限定理,所以f(n)有界
此數稱為歐拉常數,
約為 0.57721566490153286060651209
所以
所以
**如果有何處不當,請不吝賜教,一定多加完善。謝謝 **
參考資料:
【1】《演算法設計與分析》第二版 王紅梅
⑵ 演算法設計與分析 第二版 王紅梅 清華大學出版社 pdf!!!
只找到這個,應該是第一版的,沒有找到第二版的。
⑶ 昆明理工大學計算機系考研指定教材用書,《877數據結構與演算法分析》指定教材用書
「昆工計算機初試官方沒有指定教材,對於數據結構可參考《王道數據結構》,對於演算法設計可參考《演算法設計與分析(第2版)王紅梅》。後面演算法這本書是昆工研究生課程的教材。由於數據結構是主要內容,我建議再結合一本教材來復習,這樣效果更好,我推薦一本:《數據結構 周桂紅》」
⑷ 演算法設計與分析習題解答(第2版)的內容提要
《演算法設計與分析習題解答》(第2版)是清華大學出版社出版的普通高等教育「十一五」國家級規劃教材《演算法設計與分析(第2版)》(主教材)配套的輔助教材,對《演算法設計與分析(第2版)》一書中的全部習題做了詳盡的解答。《演算法設計與分析習題解答》(第2版)的內容是對《演算法設計與分析(第2版)》的較深入的擴展,許多在主教材中無法講述的、較深入的主題通過習題的形式展現出來。為了加強學生靈活運用演算法設計策略解決實際問題的能力,《演算法設計與分析習題解答》(第2版)將主教材中的許多習題改造成演算法實現題,要求學生不僅設計出解決具體問題的演算法,而且能夠上機實現。作者的教學實踐反映出這類演算法實現題的教學效果非常好。作者還結合國家精品課程建設,進行了教材的立體化開發,包括主教材、輔助教材、實驗與設計、電子課件和教學網站建設。
《演算法設計與分析習題解答》(第2版)內容豐富,觀點新穎,理論聯系實際。不僅可以用作高等學校計算機科學與技術學科各專業本科生和研究生學習計算機演算法設計的輔助教材,而且也適合廣大工程技術人員和自學讀者學習參考。
⑸ 數據結構中,無回溯的模式匹配演算法中next數組怎麼求
演算法設計與分析 王紅梅(編) 將KMP演算法的地方講的橫清楚,也給出實現代碼,去看看吧
⑹ 《演算法設計技巧與分析》pdf下載在線閱讀,求百度網盤雲資源
《演算法設計技巧與分析》([沙特]M. H. Alsuwaiyel)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:演算法設計技巧與分析
作者:[沙特]M. H. Alsuwaiyel
譯者:吳偉昶
豆瓣評分:7.5
出版社:電子工業出版社
出版年份:2004-8
頁數:318
內容簡介:
本書是國際著名演算法專家李德財教授主編的系列叢書「Lecture Notes Series on Computing」中的一本。本書涵蓋了絕大多數演算法設計中的一般技術,在表達每一種技術時,闡述它的應用背景,注意用與其他技術比較的方法說明它的特徵,並提供大量相應實際問題的例子。本書同時也強調了對每一種演算法的詳細的復雜性分析。全書分七部分19章,從演算法設計和演算法分析的基本概念和方法入手,先後介紹了遞歸技術、分治、動態規劃、貪心演算法、圖的遍歷等技術,對NP完全問題進行了基本但清楚的討論。對概率演算法、近似演算法和計算幾何這些近年來發展迅猛的領域也用一定的篇幅講述了基本內容。書中每章後都附有大量的練習題,有利於讀者對書中內容的理解和應用。
本書結構簡明,內容豐富,適合於作為計算機學科以及相關學科演算法課程的教材和參考書,尤其適宜於學過數據結構和離散數學課程之後的演算法課教材。同時也可作為從事演算法研究的一本好的入門書。
⑺ 《演算法設計與分析習題解答與學習指導第2版》pdf下載在線閱讀全文,求百度網盤雲資源
《演算法設計與分析習題解答與學習指導第2版》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/179vMdBZkff4hFnlBxtr5BQ
簡介:北京大學教學團隊力作,凝多年教學積淀和成果,MOOC演算法課程配套用書。普通高等教育「十一五」*規劃教材,高等學校計算機教材建設立項項目。演算法設計與分析習題解答與學習指導第2版由屈婉玲著
⑻ 求演算法設計與分析 答案 王紅梅 清華大學出版社,希望有心人可以發給我,或者提供一個連接
我也在求呀。。。。你還沒懸賞
⑼ 《演算法設計與分析》王紅梅版課後題答案
http://wenku..com/link?url=2a3bW-bJFbJnHtnPjME_MUwaTlPjgKLBrA9vm-nGNcSYacAIUY-_qeetGtD9oW8SK8VFDUa
⑽ 程序的遞歸演算法與非遞歸的區別
1、遞歸和非遞歸(用棧) 非遞歸(用棧),也用到棧函數了,和遞歸就沒多大區別了! 每次遞歸進棧出棧,非遞歸(用棧)的每次調用棧函數也是進棧出棧。主要是在非遞歸(用棧)中,它的棧函數里比遞歸多了些賦值語句。。。所以效率上,非遞歸(用棧)比遞歸差。 只不過,遞歸越深,佔用棧空間越多。非遞歸(用棧),佔用的棧空間少。如果,遞歸的深度還沒達到超出棧空間的程度,那麼遞歸比非遞歸(用棧)好。 如果是非遞歸(不用棧),當然是非遞歸最好。 在下面的這個例子(解決「整數劃分問題」)中,說明了如果只是用棧機械的模擬,得到的結果只是: 空間不變(事實上,非遞歸應該多一些),而非遞歸的時間數倍的增加。。 感興趣的朋友運行就知道了 #include<iostream> #include<stack> #include<ctime> using namespace std; //---------------------------遞歸演算法 int q(int n,int m) { if((n<1) || (m<0)) return 0; if((n==1) ||(m==1)) return 1; if(n<m) return q(n,n); if(n==m) return q(n,m-1)+1; return q(n,m-1)+q(n-m,m); } int q(int num) { return q(num,num); } struct Point { int n,m; Point(int _n,int _m){ n=_n; m=_m;} }; //-------------------------非遞歸演算法 int _q(int n,int m) { int sum=0; Point tmp(n,m); stack<Point> s; s.push (tmp); while(!s.empty()) { tmp=s.top(); n=tmp.n; m=tmp.m; s.pop(); if((n<1) || (m<0)) ++sum; else if((n==1) ||(m==1)) ++sum; else if(n<m) s.push(Point(n,n)); else if(n==m) { ++sum; s.push(Point(n,m-1)); } else { s.push(Point(n,m-1)); s.push(Point(n-m,m)); } } return sum; } int _q(int num) { return _q(num,num); } int main() { int num; unsigned int p; do{ cout<<"Input a num:"; cin>>num; p=clock(); cout<<" 遞歸: "<<q(num)<<endl; cout<<"\t\t用時:"<<clock()-p<<endl; p=clock(); cout<<"非遞歸: "<<_q(num)<<endl; cout<<"\t\t用時:"<<clock()-p<<endl<<endl; }while(num); return 0; } 2. 如果非遞歸不是用棧做的 這里有一個網友做的漢諾塔問題的非遞歸解法 看了真讓人汗顏 這樣的規律都有人發現 下載地址是: http://wenku..com/view/cfd56b3610661ed9ad51f3f9.html 此演算法不是用大家以前熟悉的遞歸演算法 雖然沒運行 可以猜想 這個程序的空間和時間效率毫無疑問會大幅度提高。 3. 總結: 直接引用《演算法設計與分析(第二版)》里的一段話: 結構清晰,可讀性強,而且容易用數學歸納法來證明演算法的正確性,而且它為設計演算法,調試程序帶來很大方便。 然而遞歸演算法的運行效率較低,無論是耗費的計算時間還是佔用的存儲空間都比非遞歸演算法要多 僅僅是機械地模擬還不能達到減少計算時間和存儲空間的目的。因此,還需要根據具體程序和特點對遞歸調用的工作棧進行簡化,盡量減少棧的操作,壓縮棧存儲以達到節省計算時間和存儲空間的目的。