算法圖解學習筆記之算法

1、二分查找算法

二分查找的輸入是一個有序的元素列表。若是元素在列表中,返回其位置,不然返回null數組

二分查找每次都將列表分紅兩半,分別與查詢元素對比。捨棄其中一半。而後再另外一半中查找元素。機器學習

每次均可以排除一半的元素。因此其效率爲O(logn以2爲底)函數

二分查找查詢的速度很是快,可是要求也比較嚴格,須要有序的列表。若是是無序的列表,就不能每次排查一半了。學習

2、遞歸排序

遞歸應該不算算法的一種,可是仍是稍微提一下遞歸

遞歸其實就是循環調用某個函數,直到知足條件才退出。隊列

遞歸中很重要的是基線條件和遞歸條件效率

基線條件是退出遞歸的條件,若是沒有基線條件,那麼遞歸不會中止。陷入無限的循環中。搜索

遞歸條件是知足這些條件才循環調用函數。

二者缺一不可

3、快速排序(排序算法的一種,簡稱快排)

快排常常會和遞歸一塊兒使用

其基線條件爲,數組爲空或者只包含一個元素。由於爲空和只有一個元素就不須要排序了,直接返回。

遞歸條件爲,從數組中取出一個元素,將其餘元素分紅兩部分,一部分大於該元素,一部分小於該元素(等於能夠包含再大於或者小於之中,均可以),而後遞歸調用大於該元素的數組和小於該元素的數組。返回大於元素的數組(遞歸調用結束後有序)+元素+小於元素的數組(遞歸調用結束後有序)。

快排的最好狀況效率是O(n*logn),最壞狀況是O(n*n)

假設傳入的是一個有序的數組

咱們選擇的元素是數組第一個元素。

那麼就會出現最壞狀況,遞歸次數爲n次,每次對比n-1,n-2,到1次,那麼就是n*n

若是咱們選擇元素是數組中間元素

那麼就會出現最佳狀況,遞歸次數爲logn次,那麼就是n*logn

最佳狀況其實也是平均狀況,只要每次隨機選擇一個數組元素做爲基準值。

4、廣度優先搜索

 廣度優先搜索時一種用於圖的查找算法,可邦族回答兩類問題

一、從節點A出發,有前往節點B的路徑嗎?

二、從節點B出發,前往節點B的那條路徑最短?

廣度優先搜索常常搭配隊列使用,

首先將出發點的全部鄰居加入隊列,遍歷每一個鄰居,找到終點直接返回,不然把每一個鄰居的鄰居加入隊列,一直循環往復,直到找到終點或者隊列爲空。

廣度優先搜索的效率爲O(V+E),V時頂點數,E爲邊數

5、狄克斯特拉算法

狄克斯特拉算法一般用來處理加權圖,包含四個步驟

一、找出最便宜的節點,便可在最短期內到達的節點

二、更新該節點的鄰居開銷

三、重複這個過程,直到對圖的每一個節點啊都這樣作了

四、計算最終路徑

狄克斯特拉算法不能處理環,由於環會致使無限循環。陷入我也是個人鄰居的鄰居的無限循環中。

環其實就是無向圖。因此狄克斯特拉算法只能處理加權有向圖。權重不能爲負

5、貪婪算法

貪婪算法很簡單,每步都採起最優的作法,最終獲得一個局部最優解(多是全局最優解)

NP徹底問題(很難找到快速解決方案)

判斷問題是否爲NP徹底問題一些方法

一、元素少時算法運行速度很是快,可是元素數量增長,速度變得很是慢

二、涉及「全部組合」的問題一般都是

三、不能將問題分爲小問題,必須考慮各類可能的狀況。多是NP徹底問題

四、問題涉及序列且難以解決,可能就是NP徹底問題

五、問題涉及集合且難以解決,可能就是NP徹底問題

六、問題可轉換爲集合覆蓋問題或旅行商問題,確定是NP徹底問題

6、動態規劃

動態規劃經過將問題分爲若干個離散的子問題,分別解決各個子問題,而後獲得最終答案。

7、K最近鄰算法(機器學習經常使用)

特徵抽取,分類時抽取元素的特徵,根據特徵繪圖。若是有多個特徵,建議經過降維將維度縮小到二維或者三維。

經過畢達哥拉斯公式,計算其餘元素跟該元素的距離。將該元素分類爲與該元素距離越近的分類

分類就是編組

迴歸就是預測結果

相關文章
相關標籤/搜索