最近在學習王爭老師的資料結構和演算法之美課程,課程的很多知識之前並未了解。在此做簡單記錄。
廣義上,資料結構是一組資料的儲存結構,演算法是操作這組資料的方法。狹義上,是指某些著名的資料結構和演算法,比如堆、棧、佇列、二分查詢等。
資料結構和演算法是相輔相成的。資料結構是為演算法服務的,演算法要作用在特定的資料結構上。eg:二分查詢需要用陣列來儲存資料,鍊錶這種資料結構,二分查詢就不起作用了。
閱讀框架原始碼和背後的設計思想有很大幫助;編寫高質量的**;看問題的深度和解決問題的角度就會不同。
資料結構和演算法解決的問題是如何更省更快的儲存和處理資料,評估演算法優劣的方法有事後測試法和事前評估法。事後測試法是通過跑**,統計、監控獲取演算法執行的時間和占用的記憶體。這種評估方法對測試的環境和測試資料規模依賴性很大。時間和空間複雜度不需要具體的測試資料來測試,就可以粗略估計執行效率和資源消耗的方法。
學習的時候要學習它的來歷,自身的特點,適合解決的問題,實際的應用場景。
大o時間複雜度並不表示具體的**真正執行的時間,而是表示**執行時間隨時間規模增長的變化趨勢,也叫漸進時間複雜度。
只關注迴圈執行次數最多的一段**;加法法則:總複雜度等於量級最大的那段**的複雜度;乘法法則:巢狀**的複雜度等於巢狀**內外**複雜度的乘積。
漸進空間複雜度,表示演算法的儲存空間和資料規模增長的變化趨勢關係。常見的空間複雜度有o(1),o(n),o(n*n).
在同一段**在不同的情況下,時間複雜度有量級的差別,才使用這三種複雜度區分。
最好情況時間複雜度:在最理想的情況下,執行這段**的時間複雜度
最壞情況時間複雜度:在最糟糕的情況下,執行這段**的時間複雜度
平均時間複雜度:加權平均時間複雜度或者期望時間複雜度,**在所有情況下執行次數的加權平均值表示。
均攤時間複雜度:
資料結構和演算法 2 基礎查詢演算法
有兩種對列表內資料進行查詢的方法 順序查詢和二叉查詢。當資料項在列表內隨機排列的時候可以使用順序查詢,而當資料項在列表內有序排列的時候則會用到二叉查詢。順序查詢 二叉查詢 using system using system.collections.generic using system.linq ...
資料結構和演算法 2 基礎查詢演算法
有兩種對列表內資料進行查詢的方法 順序查詢和二叉查詢。當資料項在列表內隨機排列的時候可以使用順序查詢,而當資料項在列表內有序排列的時候則會用到二叉查詢。順序查詢 二叉查詢 using system using system.collections.generic using system.linq ...
資料結構和演算法 1 基礎排序演算法
冒泡 選擇插入 陣列的大小會使演算法的效能產生很大的差異。選擇排序比氣泡排序快了 100 多倍,而且選擇排序比插入排序快了 200 多倍。當陣列元素量增加到 10000 個的時候,確實能看出陣列大小對三種排序演算法的影響。優先順序 選擇排序 氣泡排序 插入排序 1.氣泡排序 public stati...