演算法 經典演算法

2021-08-01 06:47:50 字數 2715 閱讀 6139

1 匹配演算法:

匹配開始,從長的字串開始,匹配成功,長的和短的字串均向後匹配,而匹配失敗,則長的字串從開始的位置向後乙個字元,重新開始匹配,而短的字串則完全從頭開始。

/**

* 匹配演算法

* * @param str1

* 長匹配字串

* @param str2

* 短的匹配字串

* @return 匹配成功 返回短字串在長字串開始的位置,從1開始數, 匹配失敗返回-1

*/public

static integer bf

(string[

] str1, string[

] str2)

elseif(

(a >= str1.length)

||(b >= str2.length))}

if(b == str2.length)

else

}public

static

void

main

(string[

] args)

; string[

] str2 =

newstring

; system.out.

println

(bf.

bf(str1, str2));

}

2 折半查詢

2.1 折半查詢的非遞迴寫法:

說明:查詢區間先從0到最後乙個數,找到最中間的數與要比較的數就行比較,當小於要比較的數時,說明從0到中間這半部分的數普遍小於被比較數,查詢區間為中間位置加1至末尾,繼續之前類似的操作。當中間的數比要比較的數大則說明後半部分的數普遍大於被查詢的數,查詢區間縮小為0到中間的數的索引。繼續之前類似的查詢。遞迴寫法類似。不再描述。

/**

* 折半查詢

* * @param data

* 查詢陣列

* @param x

* 別查詢數

* @return 查詢成功返回索引,失敗返回-1

*/public

static integer binarysearch_01

(integer[

] data, integer x)

else

if(data[middle]

< x)

else

}return-1

;// 查詢失敗

}

2.2 折半查詢的遞迴寫法:

/**

* 折半查詢

* * @param data

* 資料域

* @param front

* 查詢的相對開始區間

* @param rear

* 查詢的相對結束區間

* @param x

* 要查詢的數

* @return 查詢成功,返回索引,失敗返回-1

*/public

static integer binarysearch_02

(integer[

] data, integer front,

integer rear, integer x)

else

if(data[middle]

< x)

else

return

binarysearch_02

(data, front, rear, x)

;// 下乙個區間繼續查詢

}else

}

折半查詢的實際利用-求開方值。

@test

public

void

test02()

/** * 求開方數

* @param val 被開方數

* @param begin 估值起始區間

* @param end 估值結束區間

* @param scale 精確位數

* @return 開發值

*/public

double

sqert

(int val,

double begin,

double end,

int scale)

else

if(result.

doublevalue()

<0)

else

}

3 遞迴問題–斐波拉契數列

public

static

intfibonacci

(int num)

else

}

斐波拉契求和:

public

static

void

main

(string[

] args)

system.out.

println

(sum);}

public

static

intfibonacci

(int num)

else

}

未完待續。。。

演算法經典題目

1.在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 因為這是乙個從左到右遞增和從上到下遞增的二維陣列,例如下 1,2,3,4 2,3,4,5 3,4,5...

gbdt演算法 經典演算法 GBDT

梯度提公升樹 gradient boosting decison tree,gbdt 是整合學習boosting重要演算法。該方法是針對模型的偏差進行的優化。而隨機森林是基於對模型的方差進行優化。即使在整合演算法中,adaboost是利用前一輪迭代器弱學習器的誤差率來更新訓練集的權重。gbdt演算法...

演算法經典書籍推薦

學計算機的人是幸福的,因為在這個領域中有如此多的通俗易懂 相對來說 的經典好書,你需要做的只是堅持把它們一本一本讀下去而已。在這裡列出一些我看過或者準備看的演算法書籍,以供參考。1.clrs 演算法導論 演算法百科全書,只做了前面十幾章的習題,便感覺受益無窮。2.algorithms 演算法概論 短...