搜尋與資料結構

2021-07-17 05:47:24 字數 1343 閱讀 2532

最簡單的搜尋當然分為兩種,深度優先搜尋和廣度優先搜尋。這兩種演算法分別採用了棧和佇列的資料結構來實現。對於深搜,優化方法通常是各種剪枝,主要包括最優化剪枝和可行性剪枝。對於廣搜,優化方式通常是進行重複去除和優先搜尋。

通常都說能用深搜不用廣搜,其實在一定條件下確實有道理。在很多情況下,深度優先搜尋通常比廣度優先搜尋寫起來簡單、方便。同時,採用簡單的遞迴方法來描述深度優先搜尋,可以避開對資料結構的操作。同時,深度優先搜尋不需要乙個巨大的佇列來記錄,因此可以節約記憶體。但使用深度優先搜尋需要合理並且足量的剪枝才能完成。

深度優先搜尋

深度優先搜尋遵循深度優先,遇阻回溯的原則,可以構造出如下的偽**。

void dfs(int depth)

典型樣例:n皇后問題

這是乙個很典型的深度優先搜尋問題。套用上面的規程,(出現問題)就是驗證是否有兩個皇后互相可以干擾,(到達終點)就開始輸出,此題無需進一步剪枝,處理資料就是對皇后擺放位置的迴圈。

#include 

#include

#include

#include

#include

#define llat(x) ll[x+50] #define lrat(x) lr[x+50] using namespace std; char a[14]; char ucr[14]; char ll[100],lr[100]; int cnt=0; int n=0; int dfs(char line) ;

int oj[8]=;

int check()

{ int i,j;

for(i=0;i

>n>>m>>sx>>sy; --sx;--sy; int i=-1,j=-1,l,cnt=0;; queue

vi;queue

vj; vi.push(sy);vj.push(sx); while(check()) { cnt++; if(cnt>n*10)break; vi.push(-1);vj.push(-1); while((!vi.empty())&&vi.front()!=-1) { i=vi.front();j=vj.front(); vi.pop();vj.pop(); for(l=0;l<=7;l++) if(a[i+oi[l]][j+oj[l]]==0&&i+oi[l]>=0&&i+oi[l]

=0&&j+oj[l]

典型錯誤與優化建議

1.刷表是記憶化搜尋思想的一種實現,有時能起到極大的時間複雜度降低的作用,在很多題目中都得以體現。

(待更新



資料結構與演算法 搜尋

搜尋是在乙個專案集合中找到乙個特定專案的演算法過程,返回乙個布林值。搜尋的幾種常見方法 順序查詢 二分法查詢 二叉樹查詢 雜湊查詢 二分查詢也叫折半查詢,優點是比較次數少,但是只能是在有序的序列中才能用此方法,查詢過程 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果...

python演算法與資料結構 搜尋

搜尋是指查詢乙個數列中乙個元素是否存在 條件 要求處理的數列是經過排序的,操作物件支援下標索引,也就是說元素要連續,那麼也就是只能處理順序表 演算法過程 一,將游標定位到中間位置,判斷目標數字 與當前的數字 的大小,如果 大於 則向右查詢,反之,向左迭代查詢 時間複雜度 最壞情況 o log n 對...

資料結構 演算法 搜尋與查詢

搜尋 搜尋是在乙個專案集合中找到乙個特定專案的演算法過程。搜尋通常的答案是真的或假的,因為該專案是否存在。搜尋的幾種常見方法 順序查詢 二分法查詢 二叉樹查詢 雜湊查詢 二分法查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半...