演算法基礎 知識點總結

2022-07-12 11:24:10 字數 1509 閱讀 6956

演算法基礎課程的總結,方便以後快速查閱和複習

列舉各元素,進行猜測。

給出解空間,建立簡潔的數學模型,列舉出可能的情況

減小搜尋的空間,避免不必要的計算

採用合適的搜尋順序

有時使用遞迴來求解問題時,子問題可能存在大量重複計算,從而嚴重影響效率,除了在遞迴計算的過程中使用記錄表存一些資料,還可以使用遞推的方式:從簡單的狀態開始遞推到要解決的問題。

將原問題分解成子問題

確定狀態:乙個或多個子問題各個變數的一組取值

確定一些初始狀態的值

確定狀態轉移方程

深度優先搜尋遍歷整個圖的框架為:

dfs(v)

int main()

有時不需要遍歷整個圖,比如希望找到符合條件的步數最少的節點,可以給節點分層,一層一層地去判斷,找到了合適的就停止。

廣度優先搜尋演算法(使用queue)

把初始節點s0放入open表中

如果open表為空,則問題無解,失敗退出

把open表的第乙個節點取出放入closed表,並記該節點為n

考察節點n是否為目標節點,若是,則得到問題的解,成功退出

若節點n不可擴充套件,則轉到第2步

擴充套件節點n,將其不在close表和open表中的子節點(判重)放入open表的尾部,並為每乙個子節點設定指向父節點的指標或記錄節點的層次,然後轉到第2步

判重常常需要根據具體情況,建乙個標誌位序列。根據時間空間的權衡設計合適的標誌位序列。

給定排列求序號

數出有多少種排列比給定的排列小,比如3241:

給定序號n求排列

八數碼問題,從奇排列不能轉化成偶排列或相反。很多問題如果可以人為的找到一些規律,利用這些規律常常能簡化搜尋過程。

bitset的使用

求和

#include

int a[16] = ; int sum = accumulate(a, a + 16, 0);//最後那個0是指求和的初值

賦值,將內容拷貝到想要放置的記憶體位置

#include

memcpy(a, aa, sizeof(a));

可以直接使用乙個int型的整數來模擬二進位制的序列,比如int x = 0xffff;操作的時候使用為運算子

對已經排序好的序列,首先檢查序列的中間元素:

設計貪心策略常常可以對序列先進行排序,然後再依次進行操作

出處:[

Java基礎知識點總結

一 方法的過載 方法的過載與返回值型別無關,只需滿足兩個條件即可 一是方法名相同,二是引數個數或型別不同。二 陣列初始化 動態初始化 在定義陣列時,只指定陣列長度,由系統自動為元素賦值的方式。靜態初始化 在定義陣列時為每個元素賦值。有兩種方式 陣列靜態初始化的方式有兩種 1.型別 陣列名 new 型...

RxJava基礎知識點總結

場景1 被觀察者 觀察者和訂閱分開寫 先建立乙個上游observable 角色 被觀察者 observableobservable observable.create new observableonsubscribe 建立乙個下游observer 角色 觀察者 observerobserver n...

CSS基礎知識點總結

一 css的簡介 1 什麼是css 層疊樣式表,css是對html進行樣式修飾語言 層疊 就是層層覆蓋疊加,如果不同的css樣式對同一html標籤進行修飾,樣式有衝突的部分應用優先順序高的,不衝突的部分共同作用 樣式表 就是css屬性樣式的集合 2 css的作用 1 修飾html的 使其html樣式...