五大核心演算法

2021-10-09 18:43:15 字數 3502 閱讀 2123

#include

using

namespace std;

/*遞迴實現機械人台階走法統計

引數: n - 台階個數

返回:上台階總的走法

f(n) = f(n-1) + f(n-2);

*///分治演算法

intwalkcount1

(int n)

}/*動態規劃是一種分治思想,但於分治演算法不同的是,

動態規劃是自底向上先求最小的子問題,

把結果儲存在**中,在求解大的子問題時,

直接查詢小的子問題的解,避免重複計算,從而提高效率

*///用陣列儲存計算情況使之避免重複計算

intwalkcount2

(int n)

ret = value[n]

;delete value;

return ret;

}int

main()

參考a*演算法
#include

using

namespace std;

/* 分:遞迴解決較小的問題

治:然後從子問題的解構建原問題的解

分解,解決,合併

分解成諾幹個小問題,問題小容易解決,將子問題的解合併成原問題的解

*///遞迴二分查詢

intbinarysearch

(int

*list,

const

int left,

const

int right,

const

int x)

else

if(x > list[mid]

)else

}return-1

;}intmain()

;int index =

binarysearch

(girls,0,

9,15)

; cout << index << endl;

system

("pause");

return0;

}

#include

using

namespace std;

bool

haspathcore

(const

char

* matrix,

int rows,

int cols,

int row,

int col,

const

char

* str,

int& pathlength,

bool

* visited);/*

功能:查詢矩陣中是否含有str指定的字串

引數說明:

matrix 輸入矩陣

rows 矩陣行數

cols 矩陣列數

str 要搜尋的字串

返回值:是否找到 true 是,false 否

*/bool

haspath

(const

char

* matrix,

int rows,

int cols,

const

char

* str)}}

delete

visited;

return

false;}

/*探測下乙個字元是否存在*/

bool

haspathcore

(const

char

* matrix,

int rows,

int cols,

int row,

int col,

const

char

* str,

int& pathlength,

bool

* visited)

bool haspath =

false;if

(row >=

0&& row < rows&&col >=

0&& col < cols&&matrix[row*cols + col]

== str[pathlength]

&&!visited[row*cols + col]

)return haspath;}}

/*單元測試*/

void

test

(const

char

* testname,

const

char

*matrix,

int rows,

int cols,

const

char

* str,

bool expected)

//abtg

//cfcs

//jdeh

void

test1()

//abce

//sfcs

//adee

void

test2()

//abtg

//cfcs

//jdeh

void

test3()

//abcehjig

//sfcslopq

//adeemnoe

//adidejfm

//vceifggs

void

test4()

void

test5()

void

test6()

void

test7()

void

test8()

void

test9()

intmain()

#include

#define n 7

int value[n]=;

int count[n]=;

/*貪心演算法

把子問題對應的區域性最優解合成原來整個問題的應該近似最優解

*//*

對輸入的零錢數,找到至少要用的紙幣數量

引數:money - 要找/支付的零錢數

返回:至少要用的紙幣數量,-1表示找不開

*/int

solve

(int money)

//減去得到剩下需要找零的錢

money -

= c * value[i]

;//需要錢的張數

num +

= c;

if(money ==0)

break;}

if(money >

0)num =-1

;return num;

}int

main()

else

system

("pause");

return0;

}

五大演算法三 貪心演算法

一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在 當前看來是最好的選擇 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的 區域性最優解 貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略...

五大常用演算法 貪心演算法

一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在 當前看來是最好的選擇 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的 區域性最優解 貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略...

五大常用演算法 貪心演算法

貪心演算法是指 在每一步求解的步驟中,它要求 貪婪 的選擇最佳操作,並希望通過一系列的最優選擇,能夠產生乙個問題的 全域性的 最優解。貪心演算法每一步必須滿足一下條件 1 可行的 即它必須滿足問題的約束。2 區域性最優 他是當前步驟中所有可行選擇中最佳的區域性選擇。3 不可取消 即選擇一旦做出,在演...