A*搜索算法AStar_BFS
A*搜索算法AStar_BFS
算法原理: 利用优先队列(优先级属性每一个结点的估计函数值+当前的路径消耗值)后进先出的性质来一层层的遍历。最佳优先搜索的最广为人知的形式称为 A* 搜索。它对结点的评估结合了到达此结点已经花费的代价,和从该结点到目标结点所花代价。由于结合了从开始结点到结点 n 的路径代价和从结点 n 到目标结点的最小代价路径的评估值,因此评估函数值等于经过结点 n 的最小代价解的估计代价。
算法时间空间复杂度分析:时间复杂度:O(b^m ),空间复杂度:O(b^m )
算法步骤:
1)将开始结点压入优先队列中;
2)取出队列结点当前拓展结点,设置为已访问;
3)判断当前结点是否为目标结点,若是则输出路径搜索结束,否则进行下一步;
4)访问当前结点的所有相邻子节点;
5)判断该该子节点是否被访问过,若已经访问过则回到2),若还未访问过则继续下一步6);
6)对于每一个子节点,获取其相关信息值并进行路径更新,将其子节点的父亲结点指向当前结点,返回2);
7)对新的队列进行一次优先级排序;
8)若优先队列为空还未找到目标结点,返回搜索失败;
package 实验一;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class AStar_BFS extends BuildGraph{public void ShortestPath(){ShortestPath(start,end);}public Queue<Vertex> SortTest(Queue<Vertex> queue){List<Vertex> list=new ArrayList<>();while(!queue.isEmpty()){list.add(queue.poll());}Collections.sort(list, new Comparator<Vertex>(){@Overridepublic int compare(Vertex o1, Vertex o2) {// TODO Auto-generated method stubreturn (o1.dist+o1.h)<(o2.dist+o2.h)? -1:((o1.dist+o1.h)==(o2.dist+o2.h)? 0:1);}});int i=0;while(i<list.size()){//System.out.println(list.get(i).h);queue.add(list.get(i));i++;}return queue;}public void ShortestPath(Vertex startNode,Vertex endNode){//初始化Queue<Vertex> queue = new LinkedList<>();//startNode.dist=0;queue.offer(startNode);//将源点dist设置为0并入队列while(!queue.isEmpty()){Vertex v = queue.poll();explored.put(v.vertexLabel, 1);if(v.vertexLabel==endNode.vertexLabel){System.out.println("AStar_BFS Route:");showPath_A(v,startNode);return;}for(int i=0;i<v.child.size();i++){Vertex current=v.child.get(i).endVertex;//System.out.println(explored.get(current.vertexLabel));if(explored.get(current.vertexLabel)==0){current.dist=v.dist+v.adjEdges.get(v.child.get(i));queue.offer(current);current.preNode=v;}}queue=SortTest(queue);}System.out.println("AStar_BFS Route:"+" Failure!");return;}
}
A*搜索算法AStar_BFS相关推荐
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob ...
- 二进制搜索算法_使用安全摄像机镜头解释二进制搜索算法
二进制搜索算法 by Julia Geist Julia·盖斯特(Julia Geist) 使用安全摄像机镜头解释二进制搜索算法 (Binary Search Algorithms explained ...
- 算法基础知识科普:8大搜索算法之二叉搜索树(上)
前几天,我们介绍了在顺序存储结构上构建的搜索算法,如二分搜素,插补搜索等,这种结构适合于静态搜索,但对于动态搜索会涉及到大量记录的移动导致效率的降低.这样我们自然会想是否能够利用链式的存储结构,这样在 ...
- 算法基础知识科普:8大搜索算法之顺序搜索
基本概念和术语 搜索表(Search Table):是由同一类型的数据元素(或记录)构成的集合. 关键字(Key):是数据元素中某个数据项的值,用它可以标识一个数据元素.若此关键字可以唯一地标识一个记 ...
- 低耗时、高精度,微软提基于半监督学习的神经网络结构搜索算法
作者 | 罗人千.谭旭.王蕊.秦涛.陈恩红.刘铁岩 来源 | 微软研究院AI头条(ID:MSRAsia) 编者按:近年来,神经网络结构搜索(Neural Architecture Search, NA ...
- 广度优先搜索算法(有向图和无向图)
广度优先搜索算法的思想:以v作为源点出发访问其他节点,首先使用队列存储节点,再从队列中取出节点,遍历查找v和其他连通的节点,将和v连通的节点并且未被访问过的节点入队,遍历完和v连通的节点:再从队列中取 ...
- 阿里文娱搜索算法实践与思考
作者:若仁,来自:DataFunTalk 导读:视频搜索是涉及信息检索,自然语言处理 ( NLP ),机器学习以及计算机视觉 ( CV ) 等多领域的综合应用场景,随着深度学习在这些领域的长足进展以及 ...
- 干货 | 拒当调参师工程师:超参数搜索算法一览
https://www.toutiao.com/a6683809735214367239/ 2019-04-25 20:35:22 机器学习训练模型的过程中自然少不了调参,许多机器学习工程师都戏称自己 ...
最新文章
- m个足球放入n个篮子中或者放苹果问题
- 一起谈.NET技术,保护您的 Silverlight 应用程序的安全
- 12.3、Libgdx的图像之截屏
- Spring Boot中对自然语言处理工具包hanlp的调用详解
- 互联网IP路由的逐跳全局最优化原则-Dijkstra算法证明
- PHP在函数体中传递与接收参数
- MMDB ip地址库操作
- WinSCP+PuTTY搭配使用 ,解决Windows连接Linux系统文件传输和终端登陆
- numpy基础笔记01
- 更改matplotlib中x或y轴上的“刻度频率”?
- 最长上升子序列o(nlogn)复杂度一种简单易懂的理解
- C#之double内存
- Unity3D(七)声音
- 【JAVA】第十一届蓝桥杯省模拟赛答案(本科组)
- 修改了Excel默认打开方式后仍然使用WPS打开的解决办法
- 微信投票小程序怎么弄(微信活动投票小程序制作方法)
- 【数据处理】 python 极速极简画图——频数(率)分布直方图
- 学生信息管理系统作业
- 24岁女孩与30多岁成熟有家男人
- 网站如何锁定用户,超级浏览器有办法解决吗?