數據結構系列1——算法初識

算法

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

使用大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到底是多大!!一秒一億條指令)

條件

  1. 有窮性(在有限的時間內結束)
  2. 確定性(數值是確定的)
  3. 可行性(算法可以是一段描述,也可以是一段代碼,每一行都可行的)
  4. 有輸入與輸出

應用
機器學習、數據挖掘、自然語言處理、密碼學、計算機圖形學等

常用算法

  1. 窮舉(萬能算法)
  2. 分而治之(減而治之 )
    二分查找——減而治之
    歸併排序——分而治之
  3. 貪心法
    最小生成樹
    單源最短路
  4. 動態規劃
    揹包
    士兵路徑

介紹三個算法

  1. 暴力枚舉 O(n3)
  2. 優化枚舉 O(n2)
  3. 貪心法 O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章