回溯演算法
回溯法是一種組織搜尋的一般技術,有「通用的解題法」之稱,用它可以系統的搜尋乙個問題的所有解或任一解。
可以系統地搜尋乙個問題的所有解或任意解,既有系統性又有跳躍性。
回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必要搜尋的窮舉式搜尋法。
這種以深度優先的方式系統地搜尋問題的解的方法稱為回溯法。
1回溯演算法的理論基礎
1.1問題的解空間
應用回溯法求解時,需要明確定義問題的解空間。問題的解空間應至少包含問題的乙個(最優)解。
1.2回溯法的基本思想
活結點:如果已生成乙個結點而它的所有兒子結點還沒有全部生成,則這個結點叫做活結點。
擴充套件結點:當前正在生成其兒子結點的活結點叫擴充套件結點(正擴充套件的結點)。
死結點:不再進一步擴充套件或者其兒子結點已全部生成的結點就是死結點。
在確定了解空間的組織結構後,回溯從開始結點(根結點)出發,以深度優先的方式搜尋整個解空間。
在回溯法搜尋解空間樹時,通常採用兩種策略(剪枝函式)避免無效搜尋以提高回溯法的搜尋效率:
用約束函式在擴充套件結點處減去不滿足約束條件的子樹;用限界函式減去不能得到最優解的子樹。
1.3子集樹與排列樹
有時問題是要從乙個集合的所有子集中搜尋乙個集合,作為問題的解。或者從乙個集合的排列中搜尋乙個排列,作為問題的解。
回溯演算法可以很方便地遍歷乙個集合的所有子集或者所有排列。
當問題是要計算n個元素的子集,以便達到某種優化目標時,可以把這個解空間組織成一棵子集樹。
例如,n個物品的0-1揹包問題相應的解空間樹就是一棵子集樹。
這類子集樹通常有2n個葉結點,結點總數為2n +1-1。
遍歷子集樹的任何演算法,其計算時間複雜度都是ω(2n)。
當所給的問題是確定n個元素滿足某種性質的排列時,可以把這個解空間組織成一棵排列樹。
排列樹通常有n!個葉子結點。因此遍歷排列樹時,其計算時間複雜度是ω(n!)。
例如,旅行商問題就是一棵排列樹。
2裝載問題
給定n個貨櫃要裝上一艘載重量為c的輪船,其中貨櫃i的重量為wi。貨櫃裝載問題要求確定在不超過輪船載重量的前提下,將盡可能多的貨櫃裝上輪船。
3 0-1揹包問題
給定乙個物品集合s={1,2,3,…,n},物品i的重量是wi,其價值是vi,揹包的容量為w,即最大載重量不超過w。在限定的總重量w內,我們如何選擇物品,才能使得物品的總價值最大。
4圖的m著色問題
給定無向連通圖g=(v, e)和m種不同的顏色,用這些顏色為圖g的各頂點著色,每個頂點著一種顏色。是否有一種著色法使g中相鄰的兩個頂點有不同的顏色?
這個問題是圖的m可著色判定問題。若乙個圖最少需要m種顏色才能使圖中每條邊連線的兩個頂點著不同顏色,則稱這個數m為該圖的色數。求乙個圖的色數m的問題稱為圖的m可著色優化問題。
程式設計計算:給定圖g=(v, e)和m種不同的顏色,找出所有不同的著色法和著色總數。
5 n皇后問題
在n×n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n皇后問題等價於在n×n格的棋盤上放置n個皇后,任何兩個皇后不放在同一行或同一列或同一斜線上。
程式設計要求:找出乙個n×n格的棋盤上放置n個皇后並使其不能互相攻擊的所有方案。
6旅行商問題
是指一銷售商從n個城市中的某一城市出發,不重複地走完其餘n—1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。
7流水作業排程問題
給定n個作業的集合j=。
每乙個作業ji都有兩道工序,分別在兩台機器上完成。一台機器一次只能處理一道工序,並且工序一旦開始,就必須進行下去直到完成。
每乙個作業必須先由機器1處理,然後由機器2處理。
作業ji需要機器j的處理時間為t[i][j],其中i= 1, 2, …, n ,j=1, 2。對於乙個確定的作業排程,設f[i][j]是作業i在機器j上的完成處理的時間,所有作業在機器2上完成處理的時間之和定義如下:
稱為該作業排程的完成時間之和。
由於只有兩台機器,作業的處理順序極大地影響結束時間f。流水作業排程問題要求對於給定的n個作業,制定最佳作業排程方案,使其完成時間和達到最小。
8子集和問題
子集和問題的乙個例項為<s,c>。其中,s=是乙個正整數的集合,c是乙個正整數。子集和問題判定是否存在s的乙個子集s1,使得s1的和為c。
試設計乙個解子集和問題的回溯法。
程式設計任務:對於給定的正整數集合s=和正整數c,程式設計計算s的乙個子集s1,使得s1的和為c。
9 zoj1145-dreisam equations
紙片上的符號只有數字,括號和等號。有足夠的證據可以證明dreisamwuste人只懂得三種運算子的運算:加,減和乘,而且算術運算沒有優先規則:
他們只是嚴格地將每項資料從左邊計算到右邊。
例如,3+3×5,他們的計算結果是30,而不是18。
但現在紙片上的等式裡沒有任何算術運算子。
因此如果這些假設是正確的,而且這些數字能形成等式,那麼這些運算子早已隨時間而消逝了。
坑爹啊啊啊啊啊啊
題目描述 滑雪是一項很受歡迎的體育運動,為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡。我們想知道載乙個區域中最長的滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 12 3 4 5 1617 18 19 6 1524 25 20 7 1423 22...
扯淡啊啊啊啊
兄弟們,姐妹們,土豪們,女神們 本人,乙個年輕帥氣富有朝氣,雖略微短板但霸氣內斂的真漢子,即將離開這個整日洋溢的歡聲笑語的團隊了,很慶幸遇上一群可愛的你們。一路上有你們,見證了乙個純潔少年蛻變為職業屌絲的艱苦歷程。奈何天下無不散之筵席,與各位的緣分也要暫時畫上乙個頓號了,在這離別之際借鑑一段名言名句...
積分啊啊啊啊
toc我想要積分啊啊啊啊啊啊啊啊啊啊啊啊 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將...