首页 > 代码库 > 搜索总结
搜索总结
个人的小总结之搜索:
以下是我做了丢丢题之后的总结
计算机很多问题无法根据某种确定的法则来求解,可以利用搜索与回溯;
搜索与回溯的题目问法(我做过的练习题中的orz)有
1、排列
2、分解(一个数有几种分解方法);对应的有合成(几个数可以组成这个数),如一个简单的背包问题:一个包可以放的重量是多少,每件物品重量是多少?、
3、遍历。怎么走?怎么跳?有几种走法?(有障碍就用bool 型标记一下)
题型
特点1:跳马:其实马每跳一步所面临的条件都是一样的:没有跳过,或者没有障碍,还超过界限,结束条件是到达终点;
素数环:相当于20个空位,每加入一个数就面临着共同的条件或者约束 与它相邻的数和他的和是素数,唯一面临的条件不一样的是最后一个,要判断和第一个的和是不是素数
所以搜索有循环的意思,他们面临的条件都一样;
特点2 :最值问题:效率最高?时间最少?怎样分配?
需要将所有排列的情况列出找最值
注意剪枝(如求最小值时,如果当前的值已经比之前求出的最小值大了,这就情况就可以舍弃了,不用继续进行)
典型题如:1分书:先找共同条件:找一本没有被选过且他喜欢的书,2 图m的着色:涂一个和这个结点连接的点颜色不同的颜色 3、分配工作:分一个没有被选过的工作
技巧
1、剪枝(不多解释了)
2、排列问题:怎样不重复
(1)素数环的题目
怎样避免出现平移答案,也就是一组答案,最后一个数移到第一个数前面组成一个新的答案;
可以将第一个素数固定,就好比一个手镯,你已经固定1个点朝上,那么整个手镯就转不动了
(2)如数的拆分中,将7分解,7=4+3与7=3+4是一种情况,怎样避免呢?
可以分解时分解的第n个数比n-1大那样7=4+3就没有了,(详细代码见前面的随笔)
(3)有重复元素排列问题:aacc 进行排列 就会aacc,aacc是一种情况,怎样避免?
可以加一个计数器,统计每个字母出现的次数,每用一次计数器-1,可以排列的条件是计数器不为零(代码见前面随笔)
(4)字符序列题目中 ABABC是不允许的,怎样判断呢 ?
A=1,B=2,C=3;
加入第n个数,计算a[n-3]*10+a[n-2]是否等于a[n-1]*10+a[n],相当于例子中12123 发现12=12是不允许的。
搜索总结