資料結構與演算法之美

2022-05-22 22:33:11 字數 2449 閱讀 7448

什麼是資料結構?什麼是演算法

狹義重點:複雜度分析

方法:邊學邊練,適度刷題

複雜度分析

時間複雜度

常見時間複雜度

非多項式量級:非常低效的演算法

空間複雜度:漸進空間複雜度,表示演算法的儲存空間和資料規模的增長關係

最好情況時間複雜度:理想情況的時間複雜度

最壞情況時間複雜度:最糟糕的情況下的時間複雜度

平均情況時間複雜度:所有出現的情況累加除以可能性出現的情況,加權平均複雜度,期望時間複雜度

均攤時間複雜度:把最壞的情況的時間複雜度均攤到所有耗時少的情況下---使用很少        

陣列線性表:資料排成像一條線一樣的結構

jvm清楚垃圾**:標記已經刪除的位置,當沒有更多的儲存空間的時候在執行刪除操作

煉表單鍊錶

迴圈鍊錶

雙向鍊錶

插入操作也同理

隨機查詢也比單鏈表更加高效  

空間換時間的設計思想:快取  

**的書寫

技巧二:警惕指標丟失和記憶體洩露

技巧三:利用哨兵簡化實現難度

技巧四:重點留意邊界條件的處理

技巧五:舉例畫圖,輔助思考

技巧六:多寫多練,沒有捷徑

常見的操作

棧理解:一摞疊在一起的盤子,只能後進先出,先進後出

操作棧在函式呼叫中的應用

棧在表示式求值中的應用

佇列理解:排隊買票,先進先出

操作:只支援入隊,出隊  

迴圈佇列

阻塞佇列

併發佇列

遞迴編寫遞迴**的關鍵是,只要遇到遞迴,我們就把它抽象成乙個遞推公式,不用想一層層的呼叫關係,不要試圖用人腦去分解遞迴的每個步驟

遞迴**限制最大深度,避免堆疊溢位 

優點:寫起來簡潔

缺點:空間複雜度高,有堆疊溢位風險、存在重複計算、過多的函式呼叫會耗時較多等問題。

排序基於比較的排序演算法。

氣泡排序是穩定的排序演算法嗎?

氣泡排序的時間複雜度是多少?

插入排序---這個用的還是挺多的

插入排序的時間複雜度是多少?

選擇排序

快速排序

o(n)時間複雜度內求無序陣列中的第k大元素?

'''

快速排序:分而治之,一分為二進行排序

'''

importcprofile

importrandom

defquick_sort(nums):

iflen(nums) <=1:

returnnums

s_nums=

l_nums=

#小於nums[0]放左邊

foriinnums[1:]:

ifi < nums[0]:

else:

# #大於nums[0]放右邊

#nums[0:1]是列表,nums[0]是int數字

#連線左右列表加num[0:1]

returnquick_sort(s_nums)+nums[0:1]+quick_sort(l_nums)

資料結構與演算法之美 開篇

資料結構與演算法,是計算機的核心課程之一,是程式設計師武功體系的內功,想成為武林高手必須內功過硬,作為乙個非科班碼農,面試時因為內功不強而碰壁數次,使我真實的體驗到學好資料結構與演算法的重要性,為了不在這個方面繼續碰壁,也為了能在軟體開發工程師的道路上走的更遠更快,我決心集中精力學習突破這道關口 以...

資料結構與演算法之美06

個人學習筆記總結,詳見資料結構與演算法之美 度娘 線性表 非線性表 陣列 1 儲存結構 鏈式儲存,前驅後繼關聯 2 操作 crud 前後索引關聯,涉及最優最糟問題 特點 非常低效 查詢操作 了解其儲存方式,即查詢就是通過陣列下標進行。插入操作 假設陣列的長度為n,現在,如果我們需要將乙個資料插入到陣...

資料結構與演算法之美 8 遞迴演算法

遞迴嚴格說起來不算一種演算法,只能說是一種問題處理思想或者問題處理技巧。只要問題同時滿足以下三個條件,就可以考慮用遞迴來解決 乙個問題的解可以分解為幾個子問題的解 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 存在遞迴終止條件 個人覺得,寫遞迴 最關鍵的是寫出遞推公式,找到終止條件...