最短路径介绍
算法库使用
报错情况
比较分析
1、最短路径介绍
1)最短路径指的是什么?
最短路径算法中的最短路径指的并不能简单的理解为两点之前距离最短的通行路径,他可以是距离最短,也可以是时间最短,又或者是权重值(根据距离,时间,做功的大小计算得出的值)最少的路径。
2、算法库使用
2.1、java-dijkstra
来源:开源中国,API如下
/**
* dijkstra 算法实现
* @param source 点
* @param edegs 边
* @param start 寻径的起点
* @param end 需要寻的终点
* @return
*/
public Stack<Point> dijkstra(ArrayList<Point> source, ArrayList<Edge> edegs, Point start, Point end)
Example:
备注:
1)使用该算法库需要提供参数: 点的集合 边的集合 起点 终点
2)边的集合:起点 终点 权重
3)返回值:1>3>2>4
2.2、 KShortestPaths_Res
API如下
/**
* Note that, the source should not be as same as the sink! (we could extend
* this later on)
*
* @param source_vertex 起点
* @param sink_vertex 终点
* @return
*/
public Path get_shortest_path(BaseVertex source_vertex, BaseVertex sink_vertex)
/**
* Get the top-K shortest paths connecting the source and the target. This
* is a batch execution of top-K results.
*
* @param source 起点
* @param sink 终点
* @param top_k路线数量
* @return
*/
public List<Path> get_shortest_paths(BaseVertex source_vertex, BaseVertex target_vertex, int top_k)
API如下
/**
* Constructor 2 重载的构造方法
*
* @param graph
* 文件存储对象
* @param source_vt
* 起点
* @param target_vt
* 终点
*/
public YenTopKShortestPathsAlg(BaseGraph graph, BaseVertex source_vt, BaseVertex target_vt)
Example:
备注:
备注: 参数:起点 终点
运行结果分析:当同时存在权重相同的两条路线时,只返回一条。
Example:
备注:参数:起点 终点 数量(返回权重值最少的路线数量)
运行结果分析: 排行前几的结果集。
Example:
备注:参数:线段文件 起点 终点
运行结果分析:回所有路线(节点较多时不建议使用)。
3、报错情况
3.1、 Java-dijkstra
Example:
备注:声明一个点F,不添加到点集合中,此时运行正常但是无返回结果。
Example:
运行结果如下:
备注:声明一个点F,并将点F加入到点集合中,但是点F是不可到达的点,此时运行结果会抛出空指针异常,同样的异常还包括点的集合为空时,以及线段集合为空时。
3.2、KShortestPaths_Res
Example:
备注: 第一行是节点数量,下面从左到右分别是 起点 终点 权重。
运行结果如下:
运行结果分析:
1)参数中第一个参数传不存在的节点时,系统会抛出空指针异常。
2) 参数中第二个参数传不存在的节点,此时会返回一个空 的路线List和一个近乎无穷大的权重值。
3) 两个都传不存在的节点 报空指针异常。
Example:
备注:文档中第一个参数含义是值节点的数量,只能多,不能少,少了会在加载数据初始化的时候抛出异常。
4、算法库的比较:KShortestPaths_Res&Java-dijkstra
4.1、相同点:
1) 都需要 线段信息 起点 终点。
2)在计算中遇到线段中不存在的点时都会抛出空指针异常。
4.2、不同点:
1)KShortestPaths_Res 不需要点的信息 Java-dijkstra需要。
2)KShortestPaths_Res 线段信息通过文件存储,使用时通过读取文件内容给线段列表赋值 Java-dijkstra是通过java对象存储,直接存储在内存中。
3)KShortestPaths_Res 提供的API要多于Java-dijkstra。
4.2、KShortestPaths_Res&Java-dijkstra的优缺点
4.2.1、Java-dijkstra优点
1)Java-dijkstra使用方便,直接在内存中对需要的数据进行赋值,传参即可使用。
4.2.2、Java-dijkstra缺点
1)Java-dijkstra的数据复用性差,假设这里将路径进行分层查询最短路径,那么使用内存存储的数据在java中只能存在一份。所以每次发生交替查询时就需要重新从数据库中查询点的信息和线段查询,数据复用性就很差。
4.2.3、KShortestPaths_Res优点
1)KShortestPaths_Res 提供的API多样化 ,可使用性高。
2)KShortestPaths_Res 的数据使用文档存储,复用性高。在这里我们查询时时只需要修改文件对象的引用地址就可以实现分层查询。不需要重复的构建参数数据。
4.2.4、KShortestPaths_Res缺点
1)数据的维护难度会加大,如果线段信息产生改变,这边不光需要维护相应的数据库,还需要维护对应的文件内容。
独乐乐不如众乐乐!