近期学习总结2019/4/17

区间DP结束了,感觉这一部分学的不太好,做起题来很吃力,速度也慢了不少,一边模仿着例题一边做也不能比较好的完成。新学的搜索听课时感觉还可以,但看到题以后就觉得有点懵,还是不太懂怎么应用。
这两天主要是在复习课件和看题,晚上会试着打一打搜索的代码,不过目前做题还没有什么进展。看搜索例题的同时也会抽时间看一下区间DP。我看题的速度实在是有点慢,到现在区间DP那些题还没有看完,以后会再多花一点时间,并试着加快速度。

关于搜索
搜索分为广度优先搜索(BFS)和深度优先搜索(DFS)

**广度优先搜索(BFS)**在路径的寻找问题上用得比较多
基本思想:从初始状态S 开始,利用规则,生成所有可能的状态。构成的下一层节点,检查是否出现目标状态G,若未出现,就对该层所有状态节点,分别顺序利用规则,生成再下一层的所有状态节点,对这一层的所有状态节点检查是否出现G,若未出现,继续按上面思想生成再下一层的所有状态节点,这样一层一层往下展开。直到出现目标状态为止。
广度优先即是要按层数一层一层来遍历,先将一层全部扩展,然后再进行下一层。
广度优先搜索框架
While Not Queue.Empty ()
Begin
可加结束条件
Tmp = Queue.Top ()
从Tmp循环拓展下一个状态Next
If 状态Next合法 Then
Begin
生成新状态Next
Next.Step = Tmp.Step + 1
Queue.Pushback (Next)
End
Queue.Pop ()
End

深度优先搜索(DFS)
基本思想:从初始状态,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态,若未出现,以此状态利用规则生成再下一层任一个结点,再检查,重复过程一直到叶节点(即不能再生成新状态节点),当它仍不是目标状态时,回溯到上一层结果,取另一可能扩展搜索的分支。采用相同办法一直进行下去,直到找到目标状态为止。
状态必须在遍历完所有它的子状态之后,才能继续进行对同一层中下一个状态的遍历。.
深度优先搜索框架
递归实现:
Function Dfs (Int Step, 当前状态)
Begin
可加结束条件
从当前状态循环拓展下一个状态Next
If 状态Next合法 Then
Dfs (Step + 1, Next ))
End
非递归实现:
While Not Stack.Empty ()
Begin
Tmp = Stack.top()
从Tmp拓展下一个未拓展的状态Next
If 没有未拓展状态(到达叶节点) Then
Stack.pop()
Else If 状态Next合法 Then
Stack.push(Next)
End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值