資料結構和演算法基礎

2021-09-26 03:53:19 字數 876 閱讀 7054

最近在學習王爭老師的資料結構和演算法之美課程,課程的很多知識之前並未了解。在此做簡單記錄。

廣義上,資料結構是一組資料的儲存結構,演算法是操作這組資料的方法。狹義上,是指某些著名的資料結構和演算法,比如堆、棧、佇列、二分查詢等。

資料結構和演算法是相輔相成的。資料結構是為演算法服務的,演算法要作用在特定的資料結構上。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...