ida*搜尋又成為迭代加深搜尋,感覺迭代加深這個稱謂就基本概括了這種搜尋算沒的核心。首先所以討論一下什麼迭代加深搜尋,深度優先搜尋乙個局面可以搜尋很多很多層,這種情況很可能時間啊複雜度很大;怎麼辦呢?聰明的人們想到了限制限制了搜尋深度,正是所謂的迭代加深搜尋,就是在深度無上限的情況下,先預估乙個深度(盡量小)進行搜尋,如果沒有找到解,再逐步放大深度搜尋。這種方法雖然會導致重複的遍歷 某些結點,但是由於搜尋的複雜度是呈指數級別增加的,所以對於下一層搜尋,前面的工作可以忽略不計;
總的來說,迭代加深搜尋是在速度上接近廣度優先搜尋,空間上和深度優先搜尋相當的搜尋方式。由於在使用過程中引入了深度優先搜尋,所以也可以當作深度優先搜尋的優化方案。
迭代加深搜尋適用於當搜尋深度沒有明確上限的情況。
又從別的大佬那裡看到一張圖,可以看出ida*搜尋和廣搜的搜尋形式相同,但是只要搜尋到答案的深度就可以了,不像廣蒐會跑完整張圖。
題意:乙個個井字形的棋盤上有8個1,8個2,8個3,有8個操作(標號為a~h),表示把某一行或某一列進行挪動,頭位數字放到尾部,其他依次挪一格,求出字典序最小的操作序列。
#includeusing namespace std;
int step[10][10]=,// a
,// b
,// c
,// d
,//e
,//f
,//g
,//h
};int index[9]=;//中心位置的方塊用於檢查
int map[30];
char ans[100];
int check()
return 1;
}int move(int loc)
map[step[loc][6]]=head;
return 0;
}int pre()
return most;
}int dfs(int d,int dm )
if(i%2==0)
else
move((i+3)%8);
} return 0;
}int main()
// for(int i=0;i<24;i++)
// cout<
if(check())
else
ans[i]='\0';
cout<
} cout<
} return 0;
}
深搜 IDA 演算法 POJ2286
寫得真是太好了 而ida 演算法具有如下的特點 綜合了a 演算法的人工智慧性和回溯法對空間的消耗較少的優點,在一些規模很大的搜尋問題中會起意想不到的效果。它的具體名稱是 iterative deepening a 1985年由korf提出。該演算法的最初目的是為了利用深度搜尋的優勢解決廣度a 的空間...
IDA 搜尋 迭代加深
首先放一道例題 給出n個數,以及目標m,需要用這n個數中的若干個數加起來等於m,問所有方案中使用的數的數量最少的方案是什麼。顯然,對於這道題,我們並不知道搜尋的深度會是多少,如果放任程式像野狗一樣滿場子亂搜,那麼肯定tle無疑了。由於需要記錄答案,所以用廣搜的話空間可能會炸。於是,我們只能用深搜,為...
IDA (迭代加深搜尋)
首先我們先來上一下這個東西的概念 ida 演算法就是基於迭代加深的a star演算法 此演算法的優勢,主要是改成了深度優先的方式,與a比起來,ida更實用 1.不需要判重,不需要排序 2.空間需求減少。最典型的應用就是八數碼問題和十五數碼問題。上面這一條我還是真的沒有看出來!這道題還是比較基礎的,但...