路径分析是GIS空间分析最基本的功能其核心是对最短路径最佳路径.DOC

路径分析是GIS空间分析最基本的功能其核心是对最短路径最佳路径.DOC

路径分析是GIS空间分析最基本的功能其核心是对最短路径最佳路径

公交系统路径分析 (地图学与地理信息系统 200522050030 周智) 路径分析是GIS 空间分析最基本的功能,其核心是对最短路径、最佳路径的求解。无论是计算最短路径还是最佳路径,其算法都是一致的,不同之处在于有向图中每条弧的权值设置。如果需要计算最短路径,则权值设置为两个节点的实际距离;而要计算最佳路径,则可以将权值设置为从起点到终点的时间或费用。 1 经典Dijkstra 算法的主要思想 Dijkst ra算法的基本思路是:假设每个点都有一对标号(d j , p j ) , 其中d j 是从起源点s 到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路) , 其长度等于零) ; p j 则是从s 到j 的最短路径中j 点的前一点。求解从起源点s 到点j 的最短路径算法的基本过程如下: 1) 初始化。起源点设置为:①ds= 0, ps为空;②所有其他点: di=∞, pi=?;③标记起源点s,记k= s,其他所有点设为未标记的。 2) 检验从所有已标记的点k到其直接连接的未标记的点j的距离,并设置: dj=min[d j,dk+lk j ]式中,lk j是从点k到j的直接连接距离。 3) 选取下一个点。从所有未标记的结点中,选取dj中最小的一个i:di=min[dj , 所有未标记的点j]点i就被选为最短路径中的一点,并设为已标记的。 4) 找到点i的前一点。从已标记的点中找到直接连接到点i的点j* , 作为前一点, 设置i = j*。 5) 标记点i。如果所有点已标记, 则算法完全推出, 否则, 记k= i, 转到2) 再继续。 2.数据结构组织分析 从上面可以看出,在按标记法实现Dijkstra算法的过程中,核心步骤就是从未标记的点中选择一个权值最小的弧段, 即上面所述算法的2)~5) 步。这是一个循环比较的过程,如果不采用任何技巧, 未标记点将以无序的形式存放在一个链表或数组中。那么要选择一个权值最小的弧段就必须把所有的点都扫描一遍,在大数据量的情况下,这无疑是一个制约计算速度的瓶颈。要解决这个问题,最有效的做法就是将这些要扫描的点按其所在边的权值进行顺序排列, 这样每循环一次即可取到符合条件的点, 可大大提高算法的执行效率。另外, G IS中的数据要进行最短路径的计算, 就必须首先将其按结点和边的关系抽象为图的结构, 这在G IS 中称为构建网络的拓扑关系(由于这里的计算与面无关,所以拓扑关系中只记录了线与结点的关系而无线与面的关系, 是不完备的拓扑关系)。如果用一个矩阵来表示这个网络, 不但所需空间巨大, 而且效率会很低。下面主要就如何用一个简洁高效的结构表示网的拓扑关系进行讨论。 3.网络拓扑关系的建立 网络拓扑关系的建立有很多实现方法,根据最短路径算法的特性可以知道, 顶点的出度是个重要指标, 但是其入度在算法里则不必考虑。采用了两个数组来存储网络图, 一个用来存储和弧段相关的数据(Net-ArcList), 另一个则存储和顶点相关的数据(Net-NodeIndex)。Net-ArcList 用一个数组维护并且以以弧段起点的点号来顺序排列, 同一起点的弧段可以任意排序。这个数组类似于邻接矩阵的压缩存储方式, 其内容则具有邻接多重表的特点, 即一条边以两顶点表示。Net- NodeIndex则相当于一个记录了顶点出度的索引表, 通过它可以很容易地得到此顶点的出度以及与它相连的第一条弧段在弧段数组中的位置。此外, 属性数据作为GIS不可少的一部分也是必须记录的。这样,计算最佳路径所需的网络信息已经完备了。在顶点已编号的情况下, 建立Net- ArcList和Net-NodeIndex两个表以及对Net-ArcList的排序, 其时间复杂度共为O(2n+lgn),否则为O(m+2n+lgn)。这个结构所需的空间也是必要条件下最小的, 记录了m个顶点以及n 条边的相关信息, 与邻接多重表是相同的。数据结构组织如下图所示: 4.算法实现(C++) ////////////////////////////////////////////////////////// # includefstream.h # includeiostream.h # includeiomanip.h ///////////////////////////////////////////////////////// class CNodeIndex { public: int nodeID; int arcListID; int arcListNum; double dis; int pred; bool isMarked; }; ///////////////////////////////////////

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档