X算法

在計算機科學中 ， X算法可用來求解精確覆蓋問題 。 此名稱最早在高德納的論文 《 舞蹈鏈 》 中出現 ， 他認爲此算法是 “ 試錯法中最顯而易見 ” 的 。 就技術而言 ， X算法是一個深度優先的不確定性回溯算法 。 由於X算法是一個解決精確覆蓋問題的簡潔方法 ， 高德納希望通過該算法體現舞蹈鏈數據結構的高效性 ， 他把使用後者的X算法稱爲DLX 。 X算法用由0和1組成的矩陣A來表示精確覆蓋問題 ， 目標是選出矩陣的若干行 ， 使得其中的1在所有列中出現且僅出現一次 。 X算法的步驟如下 ： 選擇r的不確定性意味着算法將衍生出若干獨立的子算法 ， 每個子算法都從其父算法中繼承了去除部分行列的A矩陣 。 如果其中有一列全爲零 ， 則當前情況無解 ， 子算法返回失敗 ， 但不一定意味整個問題無解 。 實際上 ， 所有子算法形成了一棵搜索樹 ， 其中原問題爲根節點 ， 樹的第k層由子算法在第k次所選擇的行組成 。 整個算法即用回溯法對搜索樹深度優先遍歷 。 第二步中 ， 無論用什麼方法選擇列最終都可以得到解 ， 但有的方法效率明顯較高 。 爲減少迭代次數 ， 高德納建議每次都選取1最少的列 。