IDA 搜尋 迭代加深

2021-09-25 06:51:41 字數 592 閱讀 3540

首先放一道例題:

給出n個數,以及目標m,需要用這n個數中的若干個數加起來等於m,問所有方案中使用的數的數量最少的方案是什麼。

顯然,對於這道題,我們並不知道搜尋的深度會是多少,如果放任程式像野狗一樣滿場子亂搜,那麼肯定tle無疑了。

由於需要記錄答案,所以用廣搜的話空間可能會炸。

於是,我們只能用深搜,為了不讓程式這條野狗跑的太遠,我們人為地做一條韁繩,讓它只能在固定範圍內移動,等它搜完這個範圍之後,如果沒有找到答案,再把韁繩伸長一些,繼續找。

這就是——迭代加深搜尋

在不知道搜尋的深度的時候,我們就需要人為地控制深度,當設定深度為deep時如果沒找到答案,我們就讓deep+1,然後重新搜尋一次。

雖然這樣有一點點缺陷,也就是每次搜尋deep+1時,會把深度為deep時遍歷過的地方又遍歷一次。但由於深搜的時間複雜度是隨著深度成指數級增長的,所以重新遍歷的這一點點根本不算什麼。

回到上面那個例題,具體的做法已經很明顯了,我們列舉每一次使用多少個數來相加,然後在此基礎上跑深搜即可。

高階埃及分數

題解

IDA (迭代加深搜尋)

首先我們先來上一下這個東西的概念 ida 演算法就是基於迭代加深的a star演算法 此演算法的優勢,主要是改成了深度優先的方式,與a比起來,ida更實用 1.不需要判重,不需要排序 2.空間需求減少。最典型的應用就是八數碼問題和十五數碼問題。上面這一條我還是真的沒有看出來!這道題還是比較基礎的,但...

POJ 2286 IDA 搜尋(迭代加深搜尋演算法)

ida 搜尋又成為迭代加深搜尋,感覺迭代加深這個稱謂就基本概括了這種搜尋算沒的核心。首先所以討論一下什麼迭代加深搜尋,深度優先搜尋乙個局面可以搜尋很多很多層,這種情況很可能時間啊複雜度很大 怎麼辦呢?聰明的人們想到了限制限制了搜尋深度,正是所謂的迭代加深搜尋,就是在深度無上限的情況下,先預估乙個深度...

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...