回溯法
适用情景:
要求在满足某些限制条件下,求得由小于或等于n个元素组合而成的,全部解或者最优解。
即:1、有约束条件 2、解集合中可包含的元素确定 3、全部解或最优解
步骤:
把解集合,划分成最大层次(n)确定的树状或图状的空间;每一层的节点对应于解的一部分(如第m层对应于是否包含解解集合的第m部分)。
如果某分支上,第m层仍然满足约束条件,那么继续遍历到第m+1层;否则,回溯到第m-1层,去其他树枝上遍历(这里节省了时间)。这里实际是深度优先遍历!
如果到了最后一层,那么证明这是一个合理的解;至于是否是最佳解,需要比较。
如上图所示,树总共有4层,第0层表示开始,无具体意义;剩余3层表明解集合有3个可选部分。
第1到第n层,如果支线上数字为1,表示选择解部分s[n];如果为0,表示不选择该解部分s[n]
到第n层(111,110,......,000),表示求得一个解。
例子:
http://blog.csdn.net/jarvischu/article/details/16067319