五大常用算法之四:回溯法

1、概念

回溯算法實際上一個類似枚舉的搜索嘗試過程,主要是在搜索嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。

回溯法是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。

許多復雜的,規模較大的問題都可以使用回溯法,有“通用解題方法”的美稱。

2、基本思想

在包含問題的所有解的解空間樹中,按照深度優先搜索的策略,從根結點出發深度探索解空間樹。當探索到某一結點時,要先判斷該結點是否包含問題的解,如果包含,就從該結點出發繼續探索下去,如果該結點不包含問題的解,則逐層向其祖先結點回溯。(其實回溯法就是對隱式圖的深度優先搜索算法)。

若用回溯法求問題的所有解時,要回溯到根,且根結點的所有可行的子樹都要已被搜索遍才結束。

而若使用回溯法求任一個解時,只要搜索到問題的一個解就可以結束。

3、用回溯法解題的一般步驟:

(1)針對所給問題,確定問題的解空間:

首先應明確定義問題的解空間,問題的解空間應至少包含問題的一個(最優)解。

(2)確定結點的擴展搜索規則

(3)以深度優先方式搜索解空間,并在搜索過程中用剪枝函數避免無效搜索。

4、算法框架

(1)問題框架

設問題的解是一個n維向量(a1,a2,………,an),約束條件是ai(i=1,2,3,…..,n)之間滿足某種條件,記為f(ai)。

(2)非遞歸回溯框架

?

int a[n],i;
初始化數組a[];
i = 1;
while (i>0(有路可走)   and  (未達到目標))  // 還未回溯到頭
{if(i > n)                                              // 搜索到葉結點{   搜索到一個解,輸出;}else                                                   // 處理第i個元素{ a[i]第一個可能的值;while(a[i]在不滿足約束條件且在搜索空間內){a[i]下一個可能的值;}if(a[i]在搜索空間內){標識占用的資源;i = i+1;                              // 擴展下一個結點}else {清理所占的狀態空間;            // 回溯i = i –1; }}
}


(3)遞歸的算法框架

回溯法是對解空間的深度優先搜索,在一般情況下使用遞歸函數來實現回溯法比較簡單,其中i為搜索的深度,框架如下:

int a[n];
try(int i){if(i>n)輸出結果;else{for(j = 下界; j <= 上界; j=j+1)  // 枚舉i所有可能的路徑{            if(fun(j))                 // 滿足限界函數和約束條件{a[i] = j;...                         // 其他操作try(i+1);              回溯前的清理工作(如a[i]置空值等);}}}}


?

?

?

?

轉載于:https://www.cnblogs.com/LUO257316/archive/2012/08/07/3220868.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274686.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何設置ad18捕捉圖標_圖標設計中的像素捕捉

如何設置ad18捕捉圖標More in the iconography series:? Foundations of Iconography? 7 Principles of Icon Design? 5 Ways to Create a Settings Icon? Icon Grids & Keylines Demystified? 3 Classic Icon FamiliesWe all want our designs to display sharp on a…

React Hooks 原理與最佳實踐

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以 點此加我微信ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

BW:BW增量更新方法(假增量)

1 說說假增量 我們都知道&#xff0c;對于BW來說&#xff0c;很多ECC的標準數據源自帶了增量更新功能&#xff0c;每天各種憑證產生的增量數據會自動堆積到增量隊列里&#xff0c;然后BW端做一個增量信息包按天把這些增量抽取到數據倉庫里&#xff0c;非常輕松自然&#xff0c;…

插圖 引用 同一行兩個插圖_為什么插圖是產品的重要組成部分

插圖 引用 同一行兩個插圖“Hi, my name is Ludmila and I’m a UX/UI designer”“嗨&#xff0c;我叫Ludmila&#xff0c;我是UX / UI設計師” “Hi, Ludmila”“嗨&#xff0c;路德米拉” “Welcome”“歡迎” Not anonymously at all, I’ve been doing UX/UI design fo…

如果是你你會如何重新設計和定義維基百科(wikipedia)?

日期&#xff1a;2012-8-11 來源&#xff1a;GBin1.com 最近一家設計公司發布了一個關于如何重新定義和設計維基百科的網站&#xff0c;在這里網站里詳細的刨析了如何重新設計維基百科的話&#xff0c;如何做品牌設計和網站設計&#xff0c;整個設計過程都使用非常詳細的文檔說…

祖父元素_幫助祖父母建立Skype帳戶的UX經驗教訓

祖父元素“Empathy is a key part of a UX designers arsenal”, they say. It’s drilled into our heads that we need to be thinking about our user, about their journey, about what works best for them. And it does feel empowering to boast of empathy, inside vis…

ECSHOP批量添加商品到購物車

Ecshop是一款開源的網上商店系統&#xff0c;在我心目中可以算得上網上商城界的Wordpress了。 本文介紹如何實現在ecshop中批量添加商品到購物車。 大家都知道&#xff0c;默認的ecshop只能單件點擊“添加到購物車”&#xff08;Add to Cart&#xff09;實現一件一件的添加商品…

2022年CSS的發展如何?

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以 點此加我微信ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

分布式實物實現方式_這是您完成實物產品設計任務的方式

分布式實物實現方式You’ve come to the last stages of an interview. There’s only one thing left to do: the dreaded take home design assignment.您已經到達面試的最后階段。 只剩下一件事要做&#xff1a; 可怕的帶回家的設計任務。 This is the hard part of any in…

TP-Link路由器下的多種接入模式

無線AP&#xff1a;把LAN轉成WLAN 客戶端&#xff1a;把WLAN轉成LAN 中繼&#xff1a;簡單放大上一個無線路由器的WLAN信號&#xff0c;SSID與上一個無線路由器一樣 橋接&#xff1a;與上一個無線路由器的WLAN信號連接&#xff0c;SSID與上一個無線路由器不同&#xff0c;又叫W…

type 和 interface 傻傻分不清楚?

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以 點此加我微信ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

上帝公式_感謝上帝的空白

上帝公式Do you ever walk into a room cluttered with discarded papers and leftover takeout and feel comfortable?您是否曾經走進過亂七八糟的房間&#xff1f; Yes, you might if you’re a sophomore at college. That’s just dorm life. Back in the late 90’s to …

POJ 1325 Machine Schedule(二分圖最小點集覆蓋)

題目鏈接&#xff1a;http://poj.org/problem?id1325 題意&#xff1a;A機器有n個模式&#xff0c;B機器有m個模式&#xff0c;有k個任務&#xff0c;第i個任務可以用A機器的ai模式或者B機器的bi模式&#xff0c;換模式需要重啟&#xff0c;開始兩個機器都在模式0&#xff0c;…

figma下載_在Figma上進行原型制作的各種觸發選項

figma下載Prototypes are model versions of digital products. They’re used to measure usability by testing with potential users of a product. When making prototypes with Figma, it is necessary that the actions that trigger reactions aren’t strangers and th…

通過動畫讓你深入理解 ES modules

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以 點此加我微信ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

海量數據處理之倒排索引

前言&#xff1a;本文是對博文http://blog.csdn.net/v_july_v/article/details/7085669的總結和引用 一&#xff0c;什么是倒排索引 問題描述&#xff1a;文檔檢索系統&#xff0c;查詢那些文件包含了某單詞&#xff0c;比如常見的學術論文的關鍵字搜索。 基本原理及要點&#…

ux和ui_如何為您的UX / UI設計選擇正確的原型制作工具

ux和uiAll UX/UI designers might encounter the situation of creating prototypes for wireframes or visual designs. In some cases, you may also receive the need to craft motion designs, for instance, animating icons or illustrations.所有UX / UI設計人員都可能遇…

Vue 性能指標逐漸開始反超 React 了!

大家好&#xff0c;我是若川。持續組織了8個月源碼共讀活動&#xff0c;感興趣的可以 點此加我微信ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

制作Ubuntu U 盤啟動盤在ubuntu12.04中

制作U盤啟動盤&#xff0c;這樣就可以通過U盤來裝系統了&#xff0c;簡單便攜。 在Ubuntu下&#xff0c;從dash home中找到Startup disk creator&#xff0c;當然之前把U盤插好&#xff0c;然后很簡單的兩個選擇就好了。 轉載于:https://www.cnblogs.com/allenzhaox/archive/20…

figma下載_我如何使用Figma,CSS Grid和CSS Flexbox構建登錄頁面

figma下載I enjoy looking at website designs that are on platforms like Behance, Dribble, etc. as they are visually very pleasing to the eye. While scrolling through these designs, I always wonder about one thing, that is, how difficult would it be to expre…