如何看待偽代碼?
01-30
王垠在《如何掌握程序語言》 http://blog.sina.com.cn/s/blog_5d90e82f01015271.html 一文有寫道:
...
程序語言無用論。這是國內大學計算機系的教育常見的錯誤。教授們常常對學生灌輸:「用什麼程序語言不重要,重要的是演算法。」而其實,程序語言卻是比演算法更加精髓的東西。任何演算法以及它的複雜度分析,都是相對於某種計算模型,而程序語言就是描述這種計算模型的符號系統。演算法必須用某種語言表述出來,通常演算法設計者使用偽碼,這其實是不嚴謹的,容易出現推理漏洞。演算法設計再好,如果不懂得程序語言的原理,也不可能高效的實現。即使實現了,也可能會在模塊化和可擴展性上面有很大問題。某些演算法專家或者數學家寫出來的程序極其幼稚,就是因為他們忽視了程序語言的重要性。...
我這學期在上數據結構與演算法課,採用的教材是清華大學出版社的《數據結構C語言版》第二版,裡面的數據結構和演算法是由C語言的子集再加某些規則,也就是偽代碼寫成。但我看著就是不舒服,真心不想學習偽代碼的書寫規則,只想直接用面向對象的C++語言寫出來。
此外我發現Google面試也不提倡偽代碼,只要求當事人用喜歡的編程語言寫即可。
樓主應該是用的嚴蔚敏那個書吧?
那個書我早就看過,(偽)代碼排版地亂七八糟的,部分內容選得很偏,分析講解也比較爛。原型估計是1983年出版(此後無新版),Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft寫的Data Structures and Algorithms。(以上為個人無責任觀點,書不在手邊,沒辦法細說。)
如果你要學用實際代碼的書,建議你看Mark A. Weiss寫的Data Structures and Algorithm Analysis in C++,國內有影印版(《數據結構與演算法分析:C++描述(英文版第3版)》)。我看過最靠譜的數據結構書沒有之一。
至於問題本身偽代碼的作用,其實你看下CLRS(Introduction to Algorithms,國內一般叫《演算法導論》)就會明白。雖然偽代碼到真實實現會有距離,但是偽代碼對於演算法設計/分析來說比較方便,因為省去了只有實現時才需要考慮的細節。比如說Dijkstra演算法,CLRS上的偽代碼就是用了優先順序隊列的一些操作,沒有指定優先順序隊列如何實現。CLRS之後有分析指出不同的優先順序隊列實現的時間複雜度不一樣。而嚴書則是直接拿數組實現優先隊列,然後直接說複雜度是O(V^2),顯然是缺了點東西。多年以後,人都會只記得偽代碼,而背不出源代碼。
偽代碼是一種折衷,如果一種教材用真實語言寫的話,會縮小讀者群。這實際上就是降低在某些數據上的準確性,換了來更好的泛化性。
偽代碼的好處是便於書寫,以及細枝末節懶得實現的時候可以注釋楞當實現糊弄過去。想看比偽代碼更嚴謹的語言推薦看 a discipline of programming 。
推薦閱讀:
※關於數據結構和演算法學習?
※九章演算法 | Google 2016 面試題6 : Count of Smaller Numbers After Self(數組計數)
※九章演算法 | Facebook 面試題 : 桌上的戰艦
※九章演算法 | Google 面試題 : 最優賬戶結餘
TAG:編程語言 | 演算法 | 編程 | 代碼 | 程序 | 數據結構 | 演算法設計 | 演算法與數據結構 | 如何看待評價X |