回溯法的題目看起來都滿嚇人的,但是其實回溯法是一個邏輯容易理解題目。
回溯法是一種如何用聰明的方式來達到窮舉的目的,所以當題目有以下幾種特性的時候,就可以看看是否可以用回溯法來實作,但是都是不外乎以窮舉解決問題,或是在窮舉中,找到一個符合題目定義的可行解。
第一種特性,是題目看起來很嚇人的下棋問題。
下棋的問題和人類直覺的做法很類似,在現實生活中下棋時,需要快速的找出幾個可行解,接著在心中的棋盤放下那個旗子,並繼續往下推演,如果推演下去發現並不好或是無法滿足遊戲規則,就換下一個可行解來找,早期有些棋類遊戲人類旗手在電腦算法發展一段時間後,就再也贏不過電腦,就是因為棋類遊戲的組合是人類腦袋很難窮盡的,即使所有的棋類遊戲都有一些規則可以跳過窮舉的步驟,可是電腦的運算窮舉速度太快了,人類最後只能下棋到和局為止。
第二種特性,就是列舉出排列組合。
這種特性在高中數學的排列組合滿常遇到的,高中數學中的題目都是以我們要計算出給定條件下,有一系列事情可以列舉,總共有幾種排列組合?其實有辦法寫得出這個數學式,那我們就可以輕鬆的透過數學是寫出我們要如何有效率地去窮舉。
最後的最後,題目可能不是下棋,但是概念和下棋很像,那就是窮舉的可能答案可能很多種,只要我們確定可以找到一組可以完成目標的答案就好,這種題目我們也可以利用回溯法來找到答案。
Last updated