演算法導論 第一部分 基礎知識

2022-03-08 00:00:03 字數 1318 閱讀 2142

第二章: 

1/ 插入排序:原址,複雜度為n^2

最佳執行時間為線性,最壞情況為n^2 

void sort_array(int  *array )

array[i + 1] =key;

}for (int k = 0; k <7; k++)

cout

<< array[k] <

cout

<< "

end of the sort

"<

}

2/ 歸併排序(merge sort):需要另外開闢n個儲存空間  複雜度: nlgn

merge : 假設merge的兩個數串都是已經排序好的數

void merge(int *a, int p, const

int q, const

intr)

else

}delete

l;

delete

r; }

}void merge_sort(int *a, const

int p, const

intr)

return

; }

else}}

3、 最大子陣列問題:求乙個陣列中後乙個元素與它之前的任意乙個元素的差的最大值(**最大利潤) 假設分別為 m , n

a/   暴力求解: n^2

b/   分治策略: nlgn 採用遞迴解決

將原來陣列分解為兩個陣列,出現兩種情況: 

m在後乙個陣列,n在前乙個陣列。  m: 後乙個陣列的最大值   n:前乙個陣列的最小值

c/  將原來陣列轉換為連續值得差值,求子陣列和最大的子陣列

如:  10,11,7,10,6  轉換為: 1 ,-4 ,3, -4  定義乙個sum如果前面的和為小於0則丟棄,從新開始新的陣列

int max(int *a , int

n)

else}}

4、 用主方法求解遞迴公式在用遞迴解決問題時,常會用到遞迴公式,主定理用於求解遞迴公式的複雜度。

t(n)  = at(n/b) + f(n);

三種情況的判斷標準: f(n) 和 n^(lg a / lg b )  的複雜度 大小

證明略, 部分可參考: 

第一部分 基礎知識

之前一直想看下神書演算法導論,由於種種原因一直沒有仔細研讀,從今天開始,接下來乙個乙個多月的時間裡,爭取一天一章內容,認真研讀這本書。非形式地說,演算法就是任何良定義的計算過程,該過程取某個值或值的集合作為輸入並產生某個值或或值的集合作為輸出。這樣演算法就是吧輸入轉換成輸出的計算步驟的乙個序列。若對...

演算法導論第一部分筆記

一 偽 規範總結 1 縮排表示塊的結構 實際上這個我們可以聯想python來理解 2 while 後面跟上end比較好,for to downto 後面則不需要 3 大部分都類似於c的 4 部分操作可以由英文來代替 5 一般不使用全域性變數,復合資料往往組織為物件來進行操作 二 演算法複雜度 跳過 ...

演算法第一部分(1)

1.學習演算法,最好先了解陣列,鍊錶,堆,棧等線性結構 2.對遞迴,遍歷,演算法複雜度有著常識性理解 3.主要包括三方面的知識 線性 主要是排序 樹形結構 圖形結構 定義 選擇排序每次都從剩下的n i 個元素找到最小的數,並與i位置的數交換位置。public void selectionsort t...