基礎演算法學習筆記

2021-09-29 01:25:22 字數 1100 閱讀 9170

解決演算法問題的思路:

1、列舉

(核心問題:1.避免無用的組合可以減少列舉的次數 2.找到列舉的規律 3.是否存在乙個區域性,一旦這個區域性確定,其他部分也確定了)

2、遞迴

(核心問題:1.後一項依賴前一項的結果,如等差、等比數列 2.從大到小考慮 3.本身問題的定義包含遞迴,如a的定義用到了自身a,並且包含終止條件 4.將遞迴問題分解成更小的字問題求解)

3、二分查詢

(核心問題:1.凡事按順序大小查詢的程式都可以用二分查詢優化)

4、分治

(核心問題:1.把乙個任務,分成形式和原任務相同,但規模更小的乙個或幾個部分任務,分別完成,處理完成後的結果)

歸併排序、快速排序

5、動態規劃

型別 (1)記憶遞迴型動歸程式,直觀簡單

遞迴轉動規的一般轉化方法:從邊界值向前推導,遞迴函式的逆過程。 速度更快,使用滾動陣列節省空間

1)、遞迴的分析問題,分解成若干子問題,子問題和原問題形勢相同,子問題儲存結果避免重複計算。

2)、確定狀態,某個狀態下的值,對應字問題的解

3)、確定一些初始狀態(邊界狀態)的值

4)、確定狀態轉移方程

能用動態規劃解決的問題的特點。1)、問題具有最優子結構性質 2)、無後效性

6.深度優先搜尋

尋找圖上到一些節點的路徑或多種可能性

遍歷相鄰節點,記錄狀態,遞迴遍歷(可能性的去除狀態)

剪枝:對已經知道結果的枝不在探索,記錄下目前最優結果進行比較

可行性剪枝和最優性剪枝

1.深度優先搜尋確定列舉

2.搜尋的範圍

3.搜尋的順序

4.如何剪枝

7.廣度優先搜尋

1.初始節點放入open佇列

2.判斷是否為空,為空沒達到則無解

3.取出點放入close表

4.判斷是否為目標節點

5.是否可擴充套件,不可擴充套件則返回第2步

6.可擴充套件則判重後放入open表尾部,返回第2步

8.貪心演算法

在問題求解時,總是作出當前看來最好的選擇。

貪心演算法要求貪心策略具備無後效性,某個之前的狀態不會影響以後的狀態,及區域性最優解為全域性最優解

先排序在遍歷

基礎演算法學習筆記

2020.9.12將一本通上的貪心學的差不多了,現在就整理一下。1.選擇不相交區間問題 例題 p1803 凌亂的yyy 線段覆蓋 分析 板子題,沒什麼好說的,總之就是每次貪心選擇活動時間盡量少並且與之前的活動不相交的,不多評述。2.區間選點問題 例題 p1250 種樹 分析 給定許多區間,叫你取盡量...

基礎 排序演算法學習筆記

noip範疇常見的排序一般是這幾種 1 氣泡排序,選擇排序,插入排序 2 快速排序,歸併排序,堆排序 3 計數排序,基數排序,桶排序 前兩類是基於比較的,第三類是基於統計的。第一類都是o n 2 的,第二類都是o nlogn 的。氣泡排序 1.相鄰的資料兩兩比較,小數放前面,大數放後面 2.這樣每一...

演算法學習筆記(一)演算法基礎

一 資料結構和演算法的關係 資料 data 結構 structure 是一門研究組織資料方式的學科,有了程式語言也就有了資料結構.學好資料結構編寫出更加漂亮,更加有效率的 要學習好資料結構就要多多考慮如何將生活中遇到的問題,用程式去實現解決 程式 資料結構 演算法 資料結構是演算法的基礎,換言之,想...