Ⅰ 哪些學習數據結構與演算法的書籍值得推薦
大學計算機數據結構教材是 嚴蔚敏版的《數據結構》可以拿來入門。然後可以根據自己的實際情況來安排怎麼樣學習數據結構。很多人是看一遍書,然後在遇到演算法之後再去實現它。在這里列出一些我知道的演算法書籍,以供參考。(我也只看過演算法導論,編程之美)
1. CLRS 演算法導論
演算法網路全書,只做了前面十幾章的習題,便感覺受益無窮。
2. Algorithms 演算法概論
短小精悍,別據一格,准經典之作。一個壞消息: 同演算法導論,該書沒有習題答案。好消息:習題很經典,難度也適中,只需花點點時間自己也都能做出來。不好也不壞的消息:我正在寫習題的答案,已完成前三章,還剩九章約二百道題,順利的話二個月之後發布。另有中文版名《演算法概論》,我沒看過,不知道翻譯得怎麼樣。如果有心的話,還是盡量看原版吧,其實看原版與看中文版花費時間不會相差很大,因為大部分時間其實都花費在做習題上了。
作者:向小剛
鏈接:http://www.hu.com/question/19987046/answer/13945644
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
Ⅱ 實現《演算法導論》中的習題,用什麼語言比較好
演算法導論?一般都寫偽代碼的吧
當然如果你一定要用一種語言來寫,按照個人習慣吧。
我的比較建議C語言,畢竟是比較多的人的入門語言,感覺用來寫演算法不錯
Ⅲ ACM:參加過ACM的大牛是不是練習時都要把每個演算法敲幾十幾百次呢
ACM比賽可以帶紙質資料,准備一份模板是很有必要的,所以演算法模版很重要,記住模版一定要權威,不要網上雜七雜八的拿來當模版,一份好的模板一定會對你的編程習慣和演算法實現打下良好的基礎。但是,ACM比賽的等級越高,模版的作用就越小,畢竟比賽不是套模板。
沒有人會把每個演算法敲幾百遍,大牛更加不會,敲十遍還記不住的話,一百遍也沒用的,重要的是對演算法本身的理解。如果你真正理解了演算法但寫不出來,那是你編程水平問題,這樣應該多看看大牛的代碼,多看看模板。
大牛不是演算法模板敲的多,而是對演算法理解的深刻並加上做的題目多,演算法就像數學公式,你記住公式難道就能考高分了嗎。重要的是運用啊,一個數學高手對於新學的公式他可以隨時推導出來,因為對公式真正理解啊,推的多了自然記住了,不是嗎。對於新手,先不要學演算法,先去poj做水題,就是簡單的題目沒什麼演算法,水題不要做太多,100題就差不多了。接下來就該系統的學習一下演算法了,《演算法導論》和《演算法藝術與信息學競賽》是我覺得必看的兩本書。另外,歷屆NOI國家隊選手的論文也是很有價值的,也屬於必看。接下來繼續去poj做題,多思考,做不出來就網路,google,poj做題的人非常多。做題可以查漏補缺,之前沒碰到過的 演算法都可能在題目中體現,碰到沒學過的演算法就網路學習,然後選一個好的放到你的演算法模板庫,poj做題1000以上想不成大牛都難!
我只想說大牛基本上都是這么過來的,當然不排除個別天才,不過我沒碰到過也沒聽過誰不做大量的題就能成為牛人的,畢竟天道酬勤。
Ⅳ 關於acm與數學的一些問題
1.計算機裡面的「數學」與傳統數學還是有區別的。傳統數學主要圍繞「有窮和無窮」、「離散和連續」、「概率」來展開,而計算機裡面的「數學」主要則是「演算法的可行性分析」,也就是說,給你一個問題,那麼要怎麼樣將它符號化,且能用計算機表示出來,用計算機表示出來了後,用怎麼樣的演算法去解決他。所以,你要學指導方法,可以去看些演算法可行性的書籍。
2.編程主要是培養可行性。因為計算機的計算能力很強,但是他也只是個計算機,不會自動計算,他需要人類定義些計算規則。編程,就是找一些規則,使計算機能計算出想要的東西。
3.你學的是高級語言(如C C++ C# JAVA VF等),他們不在內存上操作(匯編語言在內存上工作)。計算機的每一次計算的時間與計算機的配置有關,我們能做的,只是用比較好的演算法去減少時間。
4.對於微積分以及其它與數學有關系密切的演算法,不妨看看《數值分析》(包括《計算機數值方法》《偏微分數值分析》)
Ⅳ 《演算法導論》第三章-思考題(參考答案)
(多項式的漸進行為) 假設 是一個關於 的 次多項式,其中 , 是一個常量。使用漸進符號的定義來證明下面的性質。
a. 若 ,則 。
b. 若 ,則 。
c. 若 ,則 。
d. 若 ,則 。
e. 若 ,則 。
已知: ,易得 。
故 。
情況 1:
,即: 。
故 。
情況 2:
,即: 。
故 。
情況 3:
,即: 。
故 。
情況 4:
,即: 。
故 。
情況 5:
,即: 。
故 。
(相對漸進增長) 為下表中的每對表達式 指出 是否是 的 或 。假設 且 均為常量。回答應以表格的形式,將「是」或「否」寫在每個空格中。
a.
令 代替 ,並令 代替 a,可得:
即: 。
又:若 。故: 。
b.
故, 。
令 。故 。
c.
。又 的值為在區間 中波動,故 與 無任何關系
d.
嚴格遞增,故對於任意正常量 ,總存在 ,使得 ,即:
也易證:故對於任意正常量 ,總存在 ,使得 ,即:
e.
。故 。
f.
故,
又, 是嚴格遞增的函數。故,
故, ,也即
也即
(根據漸進增長率排序)
a. 根據增長的階來排序下面的函數,即求出滿足 的函數的一種排列 。把你的表劃分成等價類,使得函數 和 在相同類中當且僅當 。
b.給出非負函數 的一個例子,使得對所有在(a)部分中的函數 , 既不是 也不是 。
(漸進記號的性質) 假設 和 為漸進正函數。證明或反駁下面的每個猜測。
a. 蘊含 。
錯。例如: 。
b. 。
錯。例如: 。
c. 蘊含 ,其中對所有足夠大的 ,有 且 。
正確。
對於足夠大的 ,有 ;且 ,則存在正常量 ,使得 ,有
又 ,故當 ,且 足夠大,有:
故原問題成立。
d. 蘊含 。
錯。例如: 。
e. 。
當 時, ;其他條件下,不成立。
f. 蘊含 。
正確。 ,即存在正常量 ,使得 ,有
,即
令 ,得 。
g. 。
錯。例如: 。
h. 。
正確。
易得, ,即存在正常量 ,使得 ,都有 。
令 ,即存在正常量 ,使得 ,都有 。
令 ,則 ,有 。
即 。
( 與 的一些變形) 某些作者用一種與我們稍微不同的方式來定義 ;假設我們使用 (讀作「 無窮」)來標識這種可選的定義。若存在正常量 ,使得對無窮多個整數 ,有 ,則稱 。
a. 證明:對漸進非負的任意兩個函數 和 ,或者 或者 或者二者均成立,然而,如果使用 來代替 ,那麼該命題並不為真。
主要缺少了 這個條件;則若 ,必然有無窮多個正整數 ,使得 成立;
若 ,則上述兩者均成立;
反例: ,但 。
b. 描述用 代替 來刻畫程序運行時間的潛在優點與缺點。
優點: 對下屆的要求更寬松,可以兼容更多的情況;
缺點: 並非嚴格的漸進下界。因此實際意義並不大。
某些作者也用一種稍微不同的方式來定義 ;假設使用 來標識這種可選的定義。我們稱 當且僅當 。
c. 如果使用 代替 但仍然使用 ,定理 3.1 中的「當且僅當」的每個方向將出現什麼情況?
沒有變化。 成立意味著 漸進非負,故 。
有些作者定義 (讀作「軟 」)來意指忽略對數因子的 :
:存在正常量 和 ,使得對所有 ,有 。
d. 用一種類似的方式定義 和 。證明與定理 3.1 相對應的類似結論。
:存在正常量 和 ,使得對所有 ,有 。
:存在正常量 和 ,使得對所有 ,有 。
(多重函數) 我們可以把用於函數 中的多重操作符 * 應用於實數集上的任意單調遞增函數 。對給定的常量 ,我們定義多重函數 為
該函數不必再所有情況下都是良定義的。換句話說,值 是為縮小其參數到 或更小所需函數 重復應用的數目。
對如下每個函數 和常量 ,給出 的一個盡量緊確的界。
Ⅵ 求演算法導論16章3-5,3-8的答案
3-8 Show that we cannot expect to compress a file of randomly chosen bits. Notice that the number of possible source files S using n bits and compressed files E using n bits is 2n+1 - 1. Since any compression algorithm must assign each element s 屬於 S to a distinct element e 屬於 E the algorithm cannot hope to actually compress the source file.
Ⅶ Data Structures and Algorithm Analysis in C++書後的習題答案
下面是我根據別人的提示和自己的參考總結出的幾個階段的書籍,希望對你有幫助!!
第一階段:
1::H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大學教程)
2:: 錢能的《C++程序設計教程》
3::Stanley B.lippman著 侯捷 譯的《essential c++》
4::Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》
5::Bjarne Stroustrup的《the c++ programming language》
第二階段:
1::Scott Meyers的《effective c++》
2::Herb Sutter的《exceptional c++》
3::Scott Meyers的《more effective c++》
4::Herb Sutter的《more exceptional c++》
第三階段:
1::Stanley B.lippman的《insied the c++ object model》(深度探索C++ 對象模型)
2::Bjarne Stroustrup的《The design and evolution of c++》(C++的設 計與演化)
3::tephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序設計陷阱)
第四階段:
1:: Nicolai M.Josuttis的《the c++ standard library》(C++標准程序庫 —自修教程與參考手冊)
2::Scott Meyers的《effective stl》
3::Matthew H. Austern的《generic programming and the stl》(泛型編 程與STL)
4::侯捷的 《stl源碼剖析》
第五階段:
1::Herb Sutter的《exeptional c++ style》
2::《c++ template》
3::Andrei Alexandrescu的《modern c++ design》
第六階段
1::《C++ 輸入輸出流及本地化》《C++ Network Programming》《大規模C++程序設計》
2::Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思錄)
其他的:
Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++對象模型》
Elements of Reusable Object-Oriented software》影印版、中文版《設計模式:可復用面向對象軟體的基礎》
John Lakos的著作《Large-Scale C++ Software Design》(《大規模C++程序設計》
Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》《Ruminations on C++》
Bruce Eckel,《C++編程思想》
windows編程系列:
Charles Petzold 的 《Programming Windows》(Windows程序設計)
Jeffrey Richter 的《》(Windows核心編程)和《Advanced Windows》(Windows 高級編程指南)
數據結構和演算法
1::清華教授嚴蔚敏和廣東工業大學教授吳偉民的《數據結構(C語言版)》
2::清華教授殷人昆的《數據結構(用面向對象方法與C++描述)》
3::經典書籍:Mark Allen Weiss的《Data Structures and Algorithm Analysis in C》(數據結構與演算法分析--C語言描述)和《Data Structures and Algorithm Analysis in C++》(數據結構與演算法分析--C++語言描述)
4::王曉東的《演算法設計與分析》
5::M.H.Alsuwaiyel(沙特)的 《Algorithms Design Techniques and Analysis》(演算法設計技巧與分析)
6::經典:Thomas H.Cormen, Charles E.Leiserson的《Introction to Algorithms》(演算法導論)
另外,虛機團上產品團購,超級便宜