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