資料結構系列1 演算法初識

2021-08-28 08:10:25 字數 1306 閱讀 1783

主要研究問題(核心):時間與空間複雜度

使用大o記號(這個為最壞的情況,是演算法的上界,忽略常數係數)

時間:基本操作次數(會變指令條數)

空間:占用記憶體位元組數

區別:空間可以再利用

時間空間可以互換(hash表)

常見時間複雜度分析方法

1.輸入輸出——確定演算法的下界

2.數迴圈次數——迴圈次數相乘,通過最內層迴圈優化

3.均攤分析——平均預估,多個操作,一起算時間複雜度

常見複雜度

o(1) (不管執行多少次)

基本運算,+,-,*,/,%,定址

o(logn)(分治類,一般以2為底)

二分查詢

o(n1/2)

列舉約數

o(n)

線性查詢

o(n2)

樸素最近點對、冒泡、選擇排序

o(n3)

floyd最短路

普通矩陣乘法

o(nlogn)

歸併排序

快速排序的期望(均攤)複雜度

基於比較排序的演算法下界

o(2n)

列舉全部的子集

o(n!)

列舉全排列

總結:

優秀 o(1) < o(logn) < o(n1/2) < o(n) < o(nlogn)

可能可以優化 o(n2) < o(n3) < o(2n) < o(n!) (n到底是多大!!一秒一億條指令)

條件

有窮性(在有限的時間內結束)

確定性(數值是確定的)

可行性(演算法可以是一段描述,也可以是一段**,每一行都可行的)

有輸入與輸出

應用

機器學習、資料探勘、自然語言處理、密碼學、計算機圖形學等

常用演算法

窮舉(萬能演算法)

分而治之(減而治之 )

二分查詢——減而治之

歸併排序——分而治之

貪心法最小生成樹

單源最短路

動態規劃

揹包士兵路徑

介紹三個演算法

暴力列舉 o(n3)

優化列舉 o(n2)

貪心法 o(n)

資料結構系列 初識演算法 一

簡單來說 演算法 就是描述解決問題的方法。能更有效的處理資料,提高資料運算效率。資料的運算是定義在資料的邏輯結構上,但運算的具體實現要在儲存結構上進行。比如 1 2 3 n 平常隨便乙個for迴圈就可以解決這個問題,但是如果n 1000 10000 100000 等,必然要改變變數型別,否則會溢位。...

初識演算法 資料結構

需求驅動 what why how 所有的學習從需求開始,學習任何知識要想事半功倍,一定要先搞清楚它存在的意義和價值 目錄 1 什麼是演算法?2 演算法好壞的評判標準 2.1 時間複雜度 流程決定 2.2 額外空間複雜度 流程決定 2.3 常數項時間 實現細節決定 what 總而言之 演算法就是解決...

資料結構與演算法初識

目錄首先明確的一點就是電腦科學不僅僅是對計算機的研究,雖然計算機在科學發展的過程中發揮了重大的作用,但是它只是乙個工具,乙個沒有靈魂的工具而已。所謂的電腦科學實際上是對問題 解決問題以及解決問題的 過程中產生產生的解決方案的研究。例如給定乙個問題,計算機科學家的目標是開發乙個演算法來處理該問題,最終...