每天堅持學習小甲魚講解的《數據結構與算法》課程1-3節,總共98節視頻課程基本上算是過了一遍。第一遍只能是盡可能的去理解一下概念和原理,基本上只能說是與《數據結構與算法》混了個“臉熟”;甚至連“臉熟”也談不上。畢竟《數據結構與算法》理論性太強,概念太多,對計算機基礎知識的要求也很高。《數據結構與算法》是練內功開闊視野的一門課程,以我這稀爛的基礎必須多看幾遍反復學習才可以,所謂“讀書百遍,其義自見”。
雖說學習它不能帶來RMB,但是在喧囂的環境中能安安靜靜的坐下來踏踏實實的聽別人講課,既是一種享受,同時也是對身心的一種修煉。人不能閑著,一旦閑著了就愛惦記一些不該惦記的事情,比如,別人的.....,別人的......。
計算機內存是個線性結構,記得C語言中有這樣的描述:“字節是內存中最小的尋址單元,在內存中每個字節都有一個獨一無二的編號,這個編號就是地址”;內存是用來存儲數據的,那么數據又分為:1,基本類型,如,字符,整形,浮點型;2,構造類型,如數組,結構體,枚舉。聯合體;3,指針類型;4,void類型,函數作為一段代碼,在內存中自然也會有入口地址(函數名),當然,void也代表“任意類型”。郝彬老師說過,編程最終就是要解決數據的存儲問題;我的理解就是:在內存中由零號地址(32位系統中,任何數據類型都由4個字節地址長度構成)開始的線性結構中,對數據進行遍歷,查找,插入,刪除這四種操作。數據一般有順序存儲(如數組,結構體)和鏈式存儲這兩種存儲方式。每種存儲方式都有自己的優點和缺點。如ucos-ii操作系統中的任務控制塊,內存控制塊,消息隊列就是以鏈式存儲方式處理的,每個控制塊都可以以一個鏈表中的“結點”來描述。鏈表包括單向鏈表,雙向鏈表和循環鏈表(隊列),本人深有體會,學好鏈表對理解操作系統原理大有裨益。
因為計算機內存是個線性結構,要將多維的復雜的現實世界問題模擬到一個一維空間,顯然就有難度。于是那些科學家們就想辦法將模擬復雜的現實世界的數據以各種結構形式存儲到內存中,以便于更好的處理一些復雜的問題。于是,就構造出了:數組,結構體,鏈表,樹,表,圖等等這些復雜的數據結構;構造一種類型的數據本身就是一種智慧,應該也是一種算法的體現。解決問題的方法有很多,哪種方法最高效呢?于是,那些牛人又提出了“時間復雜度”和“空間復雜度”這兩個指標或概念來衡量一種算法的“復雜度”。這些牛人包括霍夫曼(樹),最優二叉樹,“樹”這種數據結構的代表,卡爾曼(濾波),高斯(法國神童),哈希算法(HASH是不是人名?)等等。什么"最短路徑",”哈希算法“,”折中算法“,”黃金分割法“,”線索二叉樹“等等都是一些牛人的智慧。
算法中,最牛逼的應該是遞歸。用牛人的話說,人用“迭代”,神用“遞歸”。的確用遞歸解決一些重復的問題只要設置好退出遞歸的條件就是神來之筆。例子很多,不多說了。有一種感覺:過一遍《數據結構與算法》真的大大開拓了視野,知道了什么是神什么是人;之前學習過的那些單片機程序僅僅只能算是入門,沒什么大不了的。開發板永遠是別人的,僅僅只能起個入門的作用。
作為一個學習者,有時候不必妄自菲薄,有時候也大可不必因為學會了一點東西而妄自尊大!任何一門科學是人類智慧的結晶而不是某個人的成果。個人頂多是一塊磚,僅此而已。據說法國那位天才數學家高斯先生,到死也沒有得到國際象棋中的“八皇后問題”的正確答案。
woc,這個點了。tmd,白天昏昏沉沉,晚上盡胡說八道睡不著;叫老子咋整?!睡覺。
---- 王衍
|