首先要說明的一點就是兩種搜尋的過程都是乙個列舉的過程,無論如何都可以將其視為一種暴力求解的過程,當然這個過程中是可以進行剪枝的,即人為的為其判斷進行優化,快速捨棄那些不可能的解,最經典要屬奇偶剪枝了,這時符合邏輯的因為起點和重點確實存在這種關係,但是這還是不能改變這一搜尋過程是近乎盲目的。好了,了解到這兩種搜尋的屬性,我們不禁要思考在什麼情況下要用到這兩種搜尋方式呢?首先因明確兩種搜尋方式只是利用了搜尋過程中的嚴謹性,即對人而言大量的組合性運算極容易出錯(可能在乙個迷宮裡,你走了20步,拐了3個彎你就不知道自己是打哪來的了),而計算機不會,只要你願意,它能記錄下所有的資訊,這時計算機執行演算法的強大所在。所以說組合性的問題就可以用這兩種搜尋來操作,也即它們能為我們帶來我們能夠想象到的各種假設,然後根據我們的意願得到最大值或最小值。那麼就解決這類問題會遇到哪些問題呢?bfs肯定要說的就是mle,相對應的dfs就是tle了,前者可能消耗過多的儲存空間,而後者則在時間上占用太多,前者有穩紮穩打之勢,後者則有急功近利之嫌啊。
bfs如何去優化呢,那便是只允許更「好」的狀態加入佇列,這個「好」要依題目情況而視定,比如在求淳樸的迷宮中走出迷宮最少時間的問題中,不可能把已經走過的點又走一遍,
這是無意義的,換句話說,那些走過的點是毫無「好」而言的。呵呵,更高深的我也無法舉例出來了。大概在我做的少數題目中都能夠模擬成這樣的。那麼dfs呢,既然要在時間
上優化,那麼便是避免搜尋到已經被你搜尋過的點了,可以看到很多**中在遞迴dfs之前都使用了乙個標記陣列,這樣就能避免在後面的遞迴中重複搜尋已經搜尋的點了,如
果不這樣,且在遞迴過程中沒有縮小搜尋半徑的話,嘿嘿,死迴圈是在所難免的了。
有時候我們會有這樣的感觸,遞迴往往會和dfs聯絡起來,個人覺得dfs還是應該劃一塊單獨的地方給他,不能因為乙個要用到遞迴演算法的時候,比如動態規劃等等就馬上把函式名命名為dfs。
學習還在繼續,在此將現在的自己對於兩種搜尋的理解記錄一下。
oracle兩種認證方式總結
oracle 資料庫通過 sqlnet.ora 檔案中的引數 sqlnet.authentication services,引數檔案中的 remote login passwordfile 和口令檔案 pwdsid.ora 三者協同作用實現身份認證 sqlnet.authentication ser...
oracle兩種認證方式總結
oracle 資料庫通過 sqlnet.ora 檔案中的引數 sqlnet.authentication services,引數檔案中的 remote login passwordfile 和口令檔案 pwdsid.ora 三者協同作用實現身份認證 sqlnet.authentication ser...
oracle 兩種認證方式總結
oracle 資料庫通過 sqlnet.ora 檔案中的引數 sqlnet.authentication services,引數檔案中的 remote login passwordfile 和口令檔案 pwdsid.ora 三者協同作用實現身份認證 sqlnet.authentication ser...