常見5大演算法思想(排序 查詢 分類)

2021-10-08 10:28:00 字數 2473 閱讀 6768

1. 動態規劃簡單介紹

推薦博文-漫畫動態規劃

動態規劃中的三個重要的概念:

最優子結構

邊界狀態轉移公式

【例】爬樓梯問題,一次一步或者兩步,

f(1)

=1;f(

2)=2

;f(n)

= f(n-1)

+ f(n-2)

(n>=3)

;

1、f(n-1) 和 f(n-2)是f(n)的【最優子結構】

2、f(1)和f(2)可以直接得到結果,是問題的【邊界】

3、f(n) = f(n-1)+f(n-2)是階段和階段之間的【狀態轉移方程】

問題:最長遞增子串行

設定dp[i]是陣列以i下標的陣列段的最長遞增子串行,最後的結果:

for(

int i=

0; isize()

; i++

)return res;

問題:dp[0..

.4]怎麼推算出dp[5]

dp[5

]是陣列以5下標的陣列段的*

*最長*

*遞增子串行

i =5

;此處for

(int j=

0; j綜合://初始化dp陣列值

for(

int i=

0; isize()

; i++)

}for

(int i=

0; isize()

; i++

)return res;

2. 分治演算法

3. 貪心演算法

貪心演算法原理

每次選擇區域性最優化解,通常和其他演算法結合使用

4. 回溯演算法(搜尋問題)

推薦博文

【定義】探索與回溯法,是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯點」

【使用場景】八皇后問題、揹包問題

* result =

* def backtrack

(路徑,選擇列表):*

if 滿足結束條件:

* result.

add(路徑)

*return

*for 選擇 in 選擇列表:

* 做選擇

*backtrack

(路徑,選擇列表)

* 撤銷選擇

*void

backtrack

(std:

:vector:string>

&res, std:

:string s, std:

:string &track, std:

:vector

&visit)

// 選擇和選擇列表

for(

int i =

0; i < s.

size()

; i++)if

(i >0&&

!visit[i-1]

&& s[i-1]

== s[i]

) visit[i]

= true;

// 做選擇

track.

push_back

(s[i]);

// 進入下一次決策樹

backtrack

(res, s, track, visit)

;// 撤銷選擇

track.

pop_back()

; visit[i]

= false;

}}

#include

"stdio.h"

#include

"stdbool.h"

#define size 4

int queen[size]=;

bool is_ok

(int row)

return true;

}void

queen_postion

(int row)

return;}

for(

int i=

0; i}int

main

(int argc,

char

*ar**)

void

dfs(

int i,

int cv,

int cw)

}else}}

}

5. 分支界限演算法

演算法 常見演算法分類和思想

演算法分類分為 1.基礎演算法 包括字串,陣列,正規表示式,排序,遞迴等。2.資料結構 堆,棧,佇列,鍊錶,矩陣,二叉樹等。3.高階演算法 貪心演算法,動態規劃等。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。void bubble ...

常見排序演算法思想

穩定的排序演算法有 1.氣泡排序 將小的數往前挪,將大的數往後挪。2.插入排序 移動第i 1的那個數,在此數之前的序列中,從後往前進行比較相鄰的兩個數,將更小的數放前面,保證每次第i 1個之前的子串行有序。3.歸併排序 利用分治的思想,將乙個無序的陣列分解若干以兩個數為一組的子陣列,然後將每個子陣列...

常見排序演算法分類

此篇部落格不討論排序演算法的思想,時間複雜度,空間複雜度,實現 只介紹常見排序演算法有哪些,並按照什麼進行分類。排序演算法分為兩大類 比較類非線性時間排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 非比...