麻省理工学院——人工智能公开课04

本文深入探讨了搜索算法,包括大英博物馆法、深度优先搜索、广度优先搜索及其优化算法爬山算法和束搜索算法。文章详细解释了每种算法的实现原理,如深度优先搜索的回溯机制和广度优先搜索的队列使用,以及如何通过避免重复搜索来提升效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

这一讲开始讨论各种搜索算法,首先是最基本的大英博物馆法,也就是一种找出所有路径的蛮力算法这种算法时间搜索长,占用空间大。

之后讲解了深度优先搜索算法和广度优先搜索算法,

深度优先算法是怎样实现的呢?

他是从树根开始往下搜索,每次遇到分叉的时候总选择向左边的一条路径搜索,当搜索到路的尽头时,回溯到上一个分叉,然后选择右边的路径继续深度优先搜索,直到搜索到目标节点为止。

广度优先搜索是怎样实现的呢?

它是从根节点开始,沿着树的宽度搜索树的节点,当同一层搜索完后仍为搜索到需搜索的节点时,跳转到树的下一层继续搜索。

具体怎么实现的呢?

首先初始化一个队列,然后把第一个路径放到队列里,然后检验第一个队列是不是你想要的,如果不是,则将拓展路径入队,对于深度优先搜索,拓展队列放在队列的前端,这样,深度优先搜索的模型就出来了:

1,初始化一个队列,

2,将第一个路径放到队列里,

3,检验是否符合要求,

4,不符合要求则将第一个路径拓展后放在列首,

5 ,回到第二步,
至于广度优先搜索,只需要把第4步中的置于列首改成置于列尾就好,其他步骤都一样
之后介绍了搜索中如何避免重复搜索,并用其分别优化深度优先和广度优先算法,得到爬山算法和束搜索算法。


怎么避免重复呢?
这里添加一个位置列表,出现过的节点都会记录在列表里,这样,当需要拓展的时候,就检验待拓展节点是否在位置列表里出现过。如果出现过,就不再拓展。


怎么又优化深度优先算法得到爬山算法呢?
事实上,深度优先算法是优先选择分叉的左边开始搜索,而左边不一定是最好的,所以我们将这一步优化为优先选择离目标近的节点,这样改进之后,就得到了爬山算法。


怎么实现呢?
很简单,只需要在上面的第三步之后加上一步,将待拓展节点排序,小的放前面,然后继续下面的步骤。
怎么优化广度优先算法得到束算法呢?


首先我们需要限制每一层的束宽a,然后每一层中,我们只考虑离目标较近的a个节点,其他的去掉,这样就得到了束算法。这个算法的实现也很简单,只需要排序得到束宽就可,其他步骤不变。


最后,讲解了故事阅读中搜索的程序例子。

1 Introduction and scope 2 Reasoning: goal trees and problem solving 3 Reasoning: goal trees and rule-based expert systems 4 Search: depth-first, hill climbing, beam 5 Search: optimal, branch and bound, A* 6 Search: games, minimax, and alpha-beta 7 Constraints: interpreting line drawings 8 Constraints: search, domain reduction 9 Constraints: visual object recognition 10 Introduction to learning, nearest neighbors 11 Learning: identification trees, disorder 12 Learning: neural nets, back propagation 13 Learning: genetic algorithms 14 Learning: sparse spaces, phonology 15 Learning: near misses, felicity conditions 16 Learning: support vector machines 17 Learning: boosting 18 Representations: classes, trajectories, transitions 19 Architectures: GPS, SOAR, Subsumption, Society of Mind 20 The AI business 21 Probabilistic inference I 22 Probabilistic inference II 23 Model merging, cross-modal coupling, course summary PROBLEM SETS TOPICS CODE FILES Problem Set 0 (PDF) Python programming, symbolic algebra Code for Problem Set 0 (ZIP) (This ZIP file contains: 5 .py files.) Problem Set 1 (PDF) Forward chaining, backward chaining and goal trees Code for Problem Set 1 (ZIP) (This ZIP file contains: 7 .py files.) Problem Set 2 (PDF) Search, using heuristics, optimal search, graph heuristics Code for Problem Set 2 (ZIP) (This ZIP file contains: 5 .py files.) Problem Set 3 (PDF) Game search Code for Problem Set 3 (ZIP) (This ZIP file contains: 7 .py files.) Problem Set 4 (PDF) Constraint satisfaction problems, k-nearest neighbors, decision trees Code for Problem Set 4 (ZIP) (This ZIP file contains: 12 .py files, 6 .ord files, 4 .csv files and 2 .dat files. sudoku_csp.py is courtesy of Justin Cullen, and is used with permission.) Problem Set 5 (PDF) Neural nets, boosting Code for Problem Set 5 (ZIP - 1.2MB) (This ZIP file contains: 12 .py files, 2 .dat files, 5 .csv files, 6 .ord files, 1 .out file, and 9 .tab files.)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值