關於數據結構(一)

問題:怎麼學好數據結構?

回答一:

數據存儲 的目的是便於數據訪問,這個關係就是數據結構面試

算法 是計算機解題的模型:輸入,輸出,順序執行,跳轉,循環,分支,有限步驟算法

人大腦組織數據的方式有線,樹,圖三種邏輯結構,而計算機存儲採用順序,鏈式和二者混合的方式。前者是概念性的東西,後者是物理實現。數據結構

線形結構:算法是迭代算法,你只要注意規模最小的狀況下不出錯,則算法通常不出錯。數據結構和算法

樹形結構:算法是遞歸算法,你只要運用遞歸組合的方法,將簡單情形組合出複雜情形,簡單情形不出錯,則算法通常不會出錯。學習

簡單情形不出錯,則算法通常不會出錯。
圖形結構:DFS:將圖按照樹形結構來處理,運用遞歸算法
BFS:將圖按章線形結構來處理,運用迭代算法
必須會下面幾個幾個算法:
(線形兩個)
1.將兩個有序表合併爲一個表,這個算法的變種不少,能夠是鏈表順序表。涉及集合運算,
歸併排序,字符串處理。
2.將一個順序表的元素從新劃分,左邊的較小,右邊較大。涉及快速排序,求字符串的逆串。
(樹形若干個)注意:有些能夠實現,有些實現不了,能夠拿來思考。
3.前序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
4.中序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
5.後序線索化,遞歸實現,棧模擬遞歸,非棧式迭代實現。
(圖形)注意:會畫表格,寫出算法的逐個步驟便可。
6.MST:prim,kruskal
7.short path:Dijkstra ,Floyd
8.AOV:拓撲排序的DFS,BFS實現
9.AOE:關鍵路徑
嚴蔚敏數據結構應該怎麼學習。 google

回答二:

Google 上關於數據結構與算法的回答: url

我屢次在google面試或者畢業招聘的時候看到這樣的情形:學習數據結構和算法--CS課程裏面幾乎最重要的課程--的方式很不科學!!
到不是說你們用的書或者老師用的材料不對,而是說學生們對於這些課程自己的理解很是缺少. spa

打好數據結構和算法基礎的關鍵並不在於對於全部數據結構的細緻的瞭解,不是記住每個大O值或者攤餘成本..((@_@;)? [不懂]).
若是這些知識你都掌握了,固然很棒而且能夠給人留下很深的印象,可是你基本上用不着啊!
你的職業生涯中或許永遠都不會要求你實現一個紅黑樹刪除節點的算法.可是!你必須有能力並且手起刀落輕輕鬆鬆的識別出何時使用二叉樹更簡單更有效, 由於你十分須要這樣的技巧. 排序

因此,不要試圖記住全部的東西.而是從基礎開始,作兩件事: 遞歸

  • 第一件事. 把數據結構圖形化,視覺化.(忽然想起來我高中競賽老師說的一句話:數形結合千般好,一旦不作萬事休啊! 就是要畫圖! )在直覺上感覺一個數據結構是什麼樣子的.使用它是什麼感受,抽象上和具體實現上是什麼樣子的.這就是最重要的事情.而且不管是對於簡單的隊列,棧仍是天殺的平衡樹都很重要並且有效.把數據結構畫出來,在你的腦殼瓜裏面就能想象出來,總之,你須要作的就是,直觀的去了解這些數據結構.
  • 第二件事.學習何時用什麼樣的數據結構和算法.對於學生來講這很難,並且你要作做業的時候老師也沒告訴大家這該怎麼辦.╮( ̄▽ ̄")╭ 不過不要緊. 你要認識到當你真正處理到現實問題的時候或許你才能掌握某些數據結構,好比哈希表.可是即便是個學生,你也應該知道數據結構的實用性:何時你須要個哈希表,何時你須要個樹,何時你須要個堆? 而不是一開始就陷入到追求細節中去.

    我在google面試的時候,我常常會問一個能夠由二叉樹搜索解決的問題. 好的應聘者能夠幾分鐘內就能夠想到用二叉樹來解決,並且對於個人其餘問題也差很少10-15分鐘就能夠解決.固然,偶爾會有一個應聘者,他能直觀的認識樹這種結構,並且能夠把個人問題形象化,圖形化的描述出來.固然他或許對於某些操做的時間複雜度不甚瞭解,可是對於問題他卻能夠立馬迴應,由於他們腦殼裏就有這樣的樹結構啊~因此他也能拿到工做啊.

至於書嘛,只推薦一本--- <算法導論>

若是你想要一本有不少例子而且和語言相關的書的哈u,我就推薦 <Algorithms in C++ ><Algorithms in Java> 固然我仍是更推薦<算法導論>,不過這些也是很好的教輔書啦~

回答三:

給一個小小的建議:學數據結構的時候,不要陷入C語言的思惟(固然,也不要陷入其餘語言的思惟)

  • 先把你學的計算機語言忘了,而後發揮你的想象力,把各類數據結構在你的大腦中具象化,一開始沒必要追求過多的理論知識,也不要關心嚴密性,追求感性的認知;
  • 當可以形象地想象出某種數據結構的時候,動手用你學的C語言實現它。記住,不要追求完備的功能,只要寫一個最簡單的實現,一開始就追求完美不是一個好的學習過程;
  • 寫完以後,回過頭看那些理論上的東西,造成知識體系;
  • 最後,若是還有精力,從新寫一個功能更完備一點兒的實現;

經過上面幾步學習,基本上就掌握的比較好了,即使過了一段時間,也不會忘的一乾二淨;

回答四:

對於某個數據結構,幾步:
一、理解該數據結構的基本概念(定義、實現)
二、嘗試理解這個數據結構的意義(爲何它會被髮明)
三、用這種數據結構解決一些對應的例題(書本上的習題、Online Judge上的水題)
四、嘗試用這個數據結構解決一些以往你用別的數據結構解決的問題,可否解決,爲何。
五、再次嘗試理解這個數據結構的意義
六、嘗試改變這個數據結構以應對各類現實的問題(Online Judge的好題)
八、學好數學,別數都不會數。

注:以上回答取材出自知乎 :http://www.zhihu.com/question/19830721

相關文章
相關標籤/搜索