概述
回溯法
通过读题完成下面三个步骤:
1)描述解的形式,定义一个解空间,它包含问题的所有解。
2)构造状态空间树。
3)构造约束函数(用于杀死节点)。
然后就要通过深度优先搜索思想完成回溯,完整过程如下:
1)设置初始化的方案(给变量赋初值,读入已知数据等)。
2)变换方式去试探,若全部试完则转(7)。
3)判断此法是否成功(通过约束函数),不成功则转(2)。
4)试探成功则前进一步再试探。
5)正确方案还未找到则转(2)。
6)已找到一种方案则记录并打印。
7)退回一步(回溯),若未退到头则转(2)。
8)已退到头则结束或打印无解
约束函数:通过描述合法解的一般特征用于去除不合法的解,从而避免继续搜索出这个不合法解的剩余部分。因此,约束函数是对于任何状态空间树上的节点都有效、等价的。
状态空间树:状态空间树是一个对所有解的图形描述。树上的每个子节点的解都只有一个部分与父节点不同。
深度优先遍历和广度优先遍历
题型归类
坐标类型搜索 :这种类型的搜索题目通常来说简单的比较简单,复杂的通常在边界的处理和情况的讨论方面会比较复杂,分析这类问题,我们首先要抓住题目的意思,看具体是怎么建立坐标系(特别重要),然后仔细分析到搜索的每一个阶段是如何通过条件转移到下一个阶段的。确定每一次递归(对于DFS)的回溯和深入条件,对于BFS,要注意每一次入队的条件同时注意判重。要牢牢把握目标状态是一个什么状态,在什么时候结束搜索。还有,DFS过程的参数如何设定,是带参数还是不带参数,带的话各个参数一定要保证能完全的表示一个状态,不会出现一个状态对应多个参数,而这一点对于BFS来说就稍简单些,只需要多设置些变量就可以了。
数值类型搜索:这种类型的搜索就需要仔细分析分析了,一般来说采用DFS,而且它的终止条件一般都是很明显的,难就难在对于过程的把握,过程的把握类似于坐标类型的搜索(判重、深入、枚举),注意这种类型的搜索通常还要用到剪枝优化,对于那些明显不符合要求的特殊状态我们一定要在之前就去掉它,否则它会像滚雪球一样越滚越大,浪费我们的时间 。
(来自转载https://blog.csdn.net/qq_41681241/article/details/81432634)
贪心算法
基本思路:
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
最后
以上就是害羞缘分为你收集整理的机试算法总结(待更新)的全部内容,希望文章能够帮你解决机试算法总结(待更新)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复