資料結構 遞迴 演算法分析

2021-04-13 00:58:15 字數 1010 閱讀 1330

使用遞迴的四個法則:

1.基準情形(base case):必須總有某種基準情形,它無須遞迴就能解出.

2.不斷推進(****** progress):對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須要使求解狀況朝接近基準的情形的方向推進.

3.設計法則:假設所有的遞迴呼叫都能執行.

4.合成效益法則:在求解乙個問題的同一例項時,切勿在不同的遞迴呼叫中做重複性的工作.

關於演算法執行時間的幾個法則:

法則1-for 迴圈:

一次for迴圈的執行時間至多是該for迴圈內語句(包括測試)的執行時間乘迭代的次數.

example 01 o(n):

for(int i=0;i2):

for(int i=0;i2)

for(i=0;i      法則4-if else語句:

乙個if/else語句的執行時間從不超過判斷再加上s1和s2中執行時間長者的總的執行時間.

if(condition )

s1else

s2兩個遞迴的漂亮應用:

1. 最大子串行和問題:o(nlogn)

static int maxsubsum(const int a,int left,int right)

maxrightbordersum = 0;rightbordersum =0;

for(i=center+1;i<=right;i++)

return max3(maxrightsum,maxleftsum,maxleftbordersum+maxrightbordersum);

}int maxsubsqeencesum(const int a,int n)

2. 冪運算:o(logn)

long int pow(long int x,int n)

兩個經典演算法:

1.二分查詢:o(logn)

int binarysearch(const elementtype a,element x,int n)

return m;

}

資料結構 演算法 遞迴

遞迴在較為高階的數演算法實現中是常用的,比如深度優先搜尋,暴力搜尋。下面展示較為簡單的遞迴 執行的過程中。public void recurisve recurisve system.out.println str test public void test 測試 依次輸入是 k i h a 依次輸...

資料結構與演算法分析筆記(4) 遞迴

簡單來說,遞迴 recursion 就是程式簡單呼叫自身的技巧。乙個過程或 函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。遞迴的能力...

資料結構 演算法分析

1 冒泡法 冒泡法大家都較熟悉。其原理為從a 0 開始,依次將其和後面的元素比較,若a 0 a i 則交換它們,一直比較到a n 同理對a 1 a 2 a n 1 處理,即完成排序。voidbubble int a,intn 定義兩個引數 陣列首位址與陣列大小 冒泡法原理簡單,但其缺點是交換次數多,...