请去帮助-新手上路获取积分
- 积分
- 38
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-11-26
- 最后登录
- 1970-1-1
|
本楼: |
👍
100% (4)
|
|
0% (0)
👎
|
全局: |
👍 88% (519) |
|
11% (66) 👎 |
Dijkstra 算法的另一个名字叫Uniform Cost Search 。在你脑海中想象,从起始点S开始,哪些点是可以到达的,并且到达他们的距离是多少,取最小的那个出来(叫它点P),这个距离就是到这个点的最短路径,然后我们看看从这个点出去又可以到达哪些其他的点,到这些点的距离就是到P的距离加上对应边的距离。然后从所有这些可到达的点(记得包括上一轮的那些点哦)再取(距离)最小的那个出来,然后重复。
代码也好实现,iterarive的,用一个priority queue,按照上面的方法把这些点(以及的对应的到这些点的距离)放在这个queue里,每次取最小的出来。
同理,bfs, dfs, heuristic, A*都可以同样实现,唯一区别就是priory queue 是怎么确定priority 的:
Bfs对应FIFO quque
Dfs对应FILO queue
UCS对应用cumulative distance from S的priority queue
A*对应用 cumulative distance from S + estimate distance to G (target node)
CS188(Berkeley的本科AI课)的一开始就讲的这个,因为怎样Search for a (shortest) path是很多intelligent agent的一个核心步骤(想想我们每天是不是经常问自己: 从宿舍怎么走到教学楼最快,怎么最快修完专业所需所有课程,怎么花最少钱做成xxx)。更广义一点就是说怎么样去搜索一个optimization问题的解。
你甚至可以说,AI的最终解决朴实无华,就是有足够的算计去搜索一个最短路径in一个巨巨巨巨大的空间(当然我是不太了解也不太认同的,我认同的是每次算计有大提升效果也明显地会有大提升)。
欢迎有insight的朋友补充。 |
|