《數據結構與演算法分析C語言描述》真的適合初學者嗎?
網上普遍對這本書讚賞有加,基本都是對初學者力薦此書。可是我看到前面的AVL樹就已經覺得很困難了。另外一個我經常參考的網站是geeksforgeeks的DS部分,那裡對每種數據結構有更多更全面的代碼實現,可是我又覺得那些代碼就算掌握了也不算是學到了什麼,因為那完全就是填鴨式的方法。究竟怎樣才能算是對數據結構入了門的呢
大學裡一般用嚴蔚敏版本,不過這本講的內容更多,初學者用個人覺得是ok的。
看不懂的話就多看幾遍,覺得困難的話就去網上找視頻看,多看幾遍,看懂為止。重要的是自己都要代碼實現一遍!!建議用c實現。填鴨式的看法不太認同,別人的更全更好的代碼實現也是別人,看跟寫差太多了,個人以為不能徒手寫出來代碼的是萬萬稱不上掌握的。
說到用,比如說一個問題,怎樣快速判斷一個無序數組有沒有重複元素。最容易想到的是循環然後比較,時間複雜度n平方,但是如果你了解散列表,時間複雜度n就可以搞定。這時候差距就體現出來了。至於入門,了解並且能代碼實現就是入門了吧。用這個過程,感覺在工作中是學無止境的,不好說明。---
慚愧,好像是第一次被點贊。再更新一點。
很多東西是有知識壁壘的,比如說如何快速判斷一個無序數組有沒有重複元素,如果不知道散列表的話;計算表達式的值,如果不知道棧的話;比如說判斷一大堆島嶼是否互通,如果不知道圖的概念,也就不會算連通子圖,更是麻煩。更不用說現在一大堆的深度學習什麼的演算法。
在實際應用中,都是比較具象的問題,比如說,開發遊戲的時候,它有很多個島嶼,建造島嶼的時候需要判斷,島嶼是否連通,類似這種問題的解決有時候很難在搜索引擎中找到,大概只能去論壇裡面提問,但是如果我們知道這個問題對應的知識點的話,對應的算連通子圖,你直接搜索這個連通子圖這個知識點,就比較容易。
這裡再舉個例子:賽車遊戲中求解最短路徑和最小曲率路徑
沒有一定數學功底的話遇到上面的問題只能束手無策。如果你了解對應的數學解法,可以說90%的工作量都在確定解決方式上面,剩下10%的工作量才是編碼。
學演算法,學數學,個人認為第一步就是知道概念。這樣你在實際應用中,知道這個問題可以通過某種演算法或者某種數學方式直接快速解決,你直接去搜索這個知識點就可以搞定。所以可以說,第一步就是填鴨,讓你知道有這個東西。
那第二步呢?我們都講究代碼是要寫的,不用拿來看,是因為手寫的印象肯定更深刻,還有就是這是一個提煉的過程。實現這個代碼,再去ACM上面刷題,其實是在考驗自己對這個演算法的理解,是否能應用到問題的解決當中。演算法其實也就是公式,你先了解了這個公式,再懂的運用這個公式,自然能解決更多問題。這其實就是一個思維的訓練過程,我想大家都會遇到,初中或者高中數學學的很努力,但是成績就是不好的人(並無貶低之意),其實這就是一個用的過程,知識點或者公式也就那幾個,有時候就需要變通一下。第三步,大概就是造公式吧,一大堆研究生博士生老教授天天研究這個,每當優化一個或者創造出一個新的公式往往能帶來生產力的具大提升。個人淺見,隨便看看就好。倘若能對你覺得有幫助,那真是萬分榮幸。
個人水平很低,勉強一答。
我覺得這本書不太適合新手,裡面的描述比較抽象,很多東西並沒有說的很具體,需要自己再去查資料,網上很多教程其實說的比書上詳細多了。如果非要用這本書的話,可以參考中國大學MOOC中陳越老師的 數據結構_浙江大學_中國大學MOOC(慕課),會容易上手一點。
我認為數據結構入門應該是了解各種結構的優點缺點,各種演算法的時間複雜性,知道在什麼場景中如何選擇最優的數據結構,另外就是多做題,多實踐。
做題網站有很多,就不細說了。
大話數據結構走起!正在看
堆排,拓撲,Dijkstra,最小生成樹之類的,如果是過一段時間也能靠演算法思路自己手寫出來,還不算學到了嗎。
這本書很多都是偽代碼,即便有代碼,也因為某些函數或聲明不完全,不能抄下來運行一下看結果。但演算法思路講的很好
這要看你是不是學過C語言以及是不是想用C語言來實現了!
語言本身對於數據結構和演算法而言不是問題!
因為數據機構和演算法是思想!弄明白思想,用什麼語言實現無所謂!就像你想買東西,弄明白價格,用什麼方式支付,只要它支持,你隨便!
再就是對於初學者的定義從這個全民編程的時代而言太寬泛!如果你入門學的C語言,那麼慢慢使用C語言來學習就還不錯!如果入門學的其他語言,那就嘗試找一些其它語言的這類的資料看一下!
找一些視頻來輔助,一定要練!練習能幫助你理解!光看可能不理解,敲著敲著慢慢就理解了!關鍵要耐心!
哈哈,在學這本書。看到Dji演算法和floyd演算法有點懵逼。動態規劃也挺難的。。
我買了這本書,就來答一發。這本書講得很詳細,代碼並不是偽代碼,不夠的確漏了一部分代碼,不過你把裡面的內容看懂了,外加查其他資料,也就問題不大了,這本書更注重對數據結構的理解吧,而且還有演算法的講解。
不適合,C語言不能從高層描述數據結構。
用戶在編寫數據結構的同時,要花很多時間了解內存和指針。java和c#最合適推薦閱讀:
※文科生跨考類計算機專業,求分析?
※O(1)刪除鏈表節點?
※演算法書如何選擇?
※超長字元串中如何快速查找一個子串?
※請問編輯器中的undo和redo操作是如何實現的?