栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么是回溯法 (Backtracking)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是回溯法 (Backtracking)?

找到所有选择,走不通则回溯

假定问题的解是一个向量(a1,a2,a3,...,an),其中的每个元素ai都是问题的一个元素

步骤:

建立一个问题的部分解v=(a1,a2,...,ak)

若这个部分解是可行解,则继续,若不是可行解,删除ak,加入ak情况的另一种可能

若ak的可能已经遍历完,回溯并寻找ak-1的下一个可能

 

算法改进:搜索剪枝

剪枝(pruning)可以帮助我们减少搜索空间,更快的找到解

剪枝的思想就是就是通过某种判断,避免一些不必要的遍历过程,就是如果发现此分支不可能找到最优解,就立刻回溯

剪枝的策略需要具体问题具体分析,这里不细讲

回溯法框架:

递归法

Backtrack(k,X[1...K-1])    if(k>n) output(X[1...N])    else        for each element x in S(k):    if(constraint(x,X[1...k-1]))         X[k]=x         backtrack(k+1,X[1...k])

迭代法

IterativeBacktrack()    k=1    while k>0        while set S(k) is not empty get a new element x from set S(k) if(constraint(x,X[1,k-1]))     X[k]=x     if(solution(X)) output(X)     else k++

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/366156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号