暴力搜索

暴力搜索或窮舉搜索 ， 在計算機科學中也稱生成與測試 ， 是一種非常低效的解決問題的技術 ， 方法包括了系統地枚舉解決方案的所有可能候選項 ， 以及檢查每個候選項是否符合問題描述 。 找出自然數n的約數的暴力搜索算法將枚舉出從1到n的所有整數 ， 並檢查它們中的每一個是否除n後沒有餘數 。 針對八皇后問題的暴力搜索算法會檢查所有在8X8棋盤上八個 “ 皇后 ” 可能的擺放方法 ， 並且 ， 對每一種擺放方法 ， 檢查其每一個 “ 皇后 ” 是否能攻擊到其它人 。 雖然暴力搜索很容易實現 ， 並且如果解決方案存在 ， 它就一定能夠找到 。 但是它的代價是和候選方案的數量成正比 ， 由於這一點 ， 在很多實際問題中 ， 消耗的代價會隨着問題規模的增加而快速地增長 。 因此 ， 當問題規模有限 ， 或當存在可用於將候選解決方案的集合減少到可管理大小的針對特定問題的啓發式算法時 ， 通常使用暴力搜索 。 另外 ， 當實現方法的簡單度比速度更重要的時候 ， 也會用到這種方法 。 例如 ， 在關鍵的應用中 ， 或當用計算機證明數學定理時 ， 算法中的任何錯誤將會導致嚴重的後果 。 暴力搜索也可在其他基準化算法和啓發式算法裏用作基準方法 。 事實上 ， 暴力搜索可以被看作最簡單的啓發式算法 。 暴力搜索與回溯概念是不相同的 ， 在回溯算法中 ， 大量的解決方案並沒有被枚舉而直接被丟棄 （ 例如上文提到的 “ 八皇后問題 ” 的解決方案 ） 。 用於在表中查找一個項目 ， 也就是說順序地檢查表中所有條目的暴力方法被稱爲線性搜索 。