论文部分内容阅读
回溯法有“通用解题法”之称。它以试探方式求出问题的所有解或任意解。概括地说,回溯法是一种既带有系统性又带有跳跃性的搜索法。它在包含问题所有解的一棵状态树中,按照深度优先的策略,从树根出发进行搜索。在搜索过程中,每到达一个状态节点,总是先判断以该节点为根的子树是否肯定不包含问题的解。如果肯定不包含,再跳过对该子树的搜索,逐层向该子树的上级节点回溯,直至遇到一个还未被完全搜索过的上级节点,然后转向其未被搜索过的某一子树继续搜索;否则,进入该子树,继续按深度优先策略搜索。
回溯法用于求解问题的所有解时,要回溯到状态树的根,且根的所有子树都被搜索过后才结束。而当回溯法用于求解问题的任意解时,只要搜索到问题的一个解就可以结束。
从本质上讲,回溯法是一种带有某种约束的枚举法,当搜索中的某些路径肯定不包含问题的解(即不符合问题的必要条件)时,省略了对该路径的搜索。因此,无法指望它有很好的最坏情形时空复杂度。
本文以一个典型的回溯问题为例,通过对比,说明回溯法在不同数据结构下,其时间效率的差异,验证对于可表示成稀疏矩阵的数据集,在使用四向链表结构时,可以大大提高时间效率。纠正他人算法描述中的疏漏与错误,并且提出改良方法。然后,利用回溯法和四向链表结构,提出了俄罗斯方块中的两个数学问题的解法,这两个问题于1999年由一个台湾数学家提出,到目前为止仅讨论了问题是否可解,但尚未得出解,而根据本文所提出的办法,不但可以得到这两个问题的所有解,还可将解决问题的范围加以扩充,这一类型的问题都可以按照本文的方法求到解。通过使用四向链表结构,使得算法的效率得到大幅度的提升,然后根据俄罗斯方块的特性对算法进行进一步的优化,最后本文讨论了这种算法在高效解决其它问题(N皇后问题等)的应用。