演算法思維01:圖形,有效性思想

序言

  • 首先介紹一下數據結構,再看演算法

一.數據結構

主要就是數據之間的關係,數據與數據的交互

每個東西既然要動,那就得有依據的動—>

  • 說明它本身就動不了的:要麼交互位置,要麼從首尾幹掉了..
  • 數據與數據的交互:無法就是判斷咱兩誰大,兩個數據之間的交換切除一些東西-判斷:選擇排序的思想.交換:冒泡,插入排序的思想

數據結構

  • 分類:集合,線性,樹形,圖狀
  • 關鍵後三,都得會
  • 線性也就是一對一,前驅後驅

演算法介紹

  • 演算法是有窮的,程式的運行是無窮的,除非終結了
  • 數據類型,原子類型,結構類型—類似與java的基本類型,對象—他們都是數據,所以都可以由演算法,集合操作
  • 時間複雜度,首先看for while 再看單個元素的變化,與目標值的公式
  • 口訣:常對冪指階

關鍵明白:

  • 演算法特性:有窮,確定,可行,輸入,輸出
  • 好演算法: 正確性,可讀性,健壯性(非法),高效率,低存儲

二.思想:

一.圖形思想

一.1.判斷

  • 如果判斷的元素多於兩個,那麼開始使用數軸
  • 如果判斷的涉及多餘一個,那麼考慮邊界(內外!!!)

一.2.對於一些數,集合什麼的

  • 要有xy形式的圖,遇到就畫!!

二.有效性,無效性思想

二.1.放棄雜物,只要有用的

  • 如一個數軸上L-R的中間數,正常計算為(L+R)/2
  • 而我們要放棄L左邊的距離,只關注L與R的關係,,,L+(R-L)/2—達成思路清晰!

二.2.增益,負增益

  • 增益指的是我們如果要求一些最大值時,我們考慮的第一個應該是增益

  • 如果增益有效,繼續,增益無效則放棄

    • 注意要判斷好前增益,後增益,前增益為負時應該放棄了,後增益完為負時,應該跳過到下一個正的
  • 當然還需一個計數器

  • 舉例:最大子序和