- 9
- 0
- 约2.57千字
- 约 24页
- 2016-05-25 发布于天津
- 举报
窮舉法
窮舉法 / 歸納法 Week 4_1 2005/9/6 kckckc 大綱 窮舉 What is 窮舉 How to 窮舉:*使用時機*好的例子 & 不好的例子 窮舉方法:順序窮舉 / 排列窮舉 / 組合窮舉 (---前面排列組合講的---) 提高窮舉的效率 歸納 What How Example What is 窮舉 遇到一個問題 … 1.列出問題的所有可能解 2.根據題目條件逐個判定 3.滿足條件 - 得到一個解 窮舉 – 使用時機 1.問題可能解的個數不是特別大 2.答案的變化具有一定的規律性 窮舉法的範例 1.給定不考慮運算優先順序的4個算數符號+-×÷ 2.輸入任5個正整數 A1 A2 A3 A4 A5 3.在每個相鄰的正整數間填入一個上述的算數符號,構成一個算數表達式 4.給定一個M,使該算數表達式剛好為M 5.求出,所有可能的算數表達式 窮舉法的範例 (cont.) A1(+-x÷)A2 (+-x÷) A3 (+-x÷) A4 (+-x÷) A5 最多僅有 44 種解法 有規律 : 4個位置所要填的算數符號 用+-×÷去填充。- 用一個4重回圈,即可以完成。 不適用窮舉的例子 1.給定一個正數的集合 A = {a1,a2,a3,…an} ,(n=30) 2.4個算數符號+-×÷不考慮運算優先順序 3.從A中選取若干的元素,用上述算數符號連結起來成一個表達式 4.給定一個M,求出,以最少的運算次數可以產生M的算數表達式 不適用窮舉的例子(cont) ※此例與上個例子均為根據結果來組合表 達式 不同的是: 集合A中的個數和順序選取無法確定 - 無法用固定的循環來控制和窮舉 - 適合用搜索回朔法 窮舉的方法 排列窮舉 / 組合窮舉 *利用數學中排列組合的知識,產生出問題的答案的所有可能解,根據題設中答案的檢驗條件去判斷是否有滿足的答案。 順序窮舉 *將問題的答案範圍內所有情況與自然數建立起一個一一對應的關係,從而可以按自然數的變化順序去窮舉問題的所有可能解。 順序窮舉的例子 數字三角形問題: 假設三角形行數 = 10 (裡面數字不超過100的整數) 從最頂層走到最底層,每步可沿左下或右下走 輸入一數值M,確定是否存在一個路徑,使沿著該路徑所經過的數字總和恰為M。 順序窮舉的例子(cont) 三角形行數=10 (不大) - 可用窮舉 列出每一條路徑的總和,看是否等於M 思考(優化問題的解法): 上層到下層,每次只有2種走法- 用”0”表示往左下走;”1”表示往右下走 層數為n的三角形 - 每種走法可用一個 n-1 位的2進位數表示 順序窮舉的例子(cont) 所以:可以用n-1位的2進位數來表示每組的解 窮舉出:10進位的 0 ~ 2n-1, 相對應的2進位數。 總共列舉出 2n 個整數 - 轉換為2進位的串列 提高窮舉的效率 HOW ? - 減少窮舉的數量 提高效率,減少窮舉的數量 HOW *依各種問題,減少的方法不盡相同. *分析問題 - 找出問題的隱含條件 - 排除明顯不可能屬於問題的解的狀態 減少窮舉數量的例子 方格填數問題 條件:a. 8個方格中填入 1~8 b. 使相鄰和對角線上的數字差不為1 減少窮舉數量的例子(cont) 直接窮舉 - 8! = 40320 種方法 思考: B3&B6,與它們相鄰的方格共有6個。 - 填入這2格中的數,必須和6個數不連續(同義:可以和一個數連續) - 這2格只可以填 1 or 8 減少窮舉數量的例子(cont) 2817 or 7182 減少窮舉數量的例子(cont) B2 B4 B5 B7 :從 3.4.5.6 中挑選 需要窮舉的數量 = 2 × 4! = 48 提高窮舉的效率(fin) 結論: *排除明顯不可能屬於問題解的狀態 *注意:必須不遺漏問題的解的可能的狀 態。否則會造成漏解。 歸納法 What: 有些看起來非常複雜的問題,用窮舉法無法完成。 How: 從簡單的情況入手,分析問題的狀態與特點。 找出簡單的規律,將問題推廣到一般情況。 Example 一種特殊的排序: 最多只有3個關鍵字(例如奧運獎牌:金銀銅,排序後金牌最前面、之後銀牌、最後銅牌) 題目:1、2、3為關鍵字,由小到大排列。給定一個只含有關鍵字的序列(內含 1000 個關鍵字),計算,最少需幾次交換操作即可以將序列由小到大排列。 Example(cont.) 雖然題目是”排序” ,卻無法用簡單的排序方法來完成,因為題目要求的是”交換次數最少”。 序
原创力文档

文档评论(0)