演算法思維01:圖形,有效性思想
序言
- 首先介紹一下數據結構,再看演算法
一.數據結構
主要就是數據之間的關係,數據與數據的交互
每個東西既然要動,那就得有依據的動—>
- 說明它本身就動不了的:要麼交互位置,要麼從首尾幹掉了..
- 數據與數據的交互:無法就是判斷咱兩誰大,兩個數據之間的交換—切除一些東西-判斷:選擇排序的思想.交換:冒泡,插入排序的思想
數據結構
- 分類:集合,線性,樹形,圖狀
- 關鍵後三,都得會
- 線性也就是一對一,前驅後驅
演算法介紹
- 演算法是有窮的,程式的運行是無窮的,除非終結了
- 數據類型,原子類型,結構類型—類似與java的基本類型,對象—他們都是數據,所以都可以由演算法,集合操作
- 時間複雜度,首先看for while 再看單個元素的變化,與目標值的公式
- 口訣:常對冪指階
關鍵明白:
- 演算法特性:有窮,確定,可行,輸入,輸出
- 好演算法: 正確性,可讀性,健壯性(非法),高效率,低存儲
二.思想:
一.圖形思想
一.1.判斷
- 如果判斷的元素多於兩個,那麼開始使用數軸
- 如果判斷的涉及多餘一個,那麼考慮邊界(內外!!!)
一.2.對於一些數,集合什麼的
- 要有xy形式的圖,遇到就畫!!
二.有效性,無效性思想
二.1.放棄雜物,只要有用的
- 如一個數軸上L-R的中間數,正常計算為(L+R)/2
- 而我們要放棄L左邊的距離,只關注L與R的關係,,,L+(R-L)/2—達成思路清晰!
二.2.增益,負增益
-
增益指的是我們如果要求一些最大值時,我們考慮的第一個應該是增益
-
如果增益有效,繼續,增益無效則放棄
- 注意要判斷好前增益,後增益,前增益為負時應該放棄了,後增益完為負時,應該跳過到下一個正的
-
當然還需一個計數器
-
舉例:最大子序和