一种城市路网数据组织与最短路径快速计算方法与流程

文档序号:13730866阅读:188来源:国知局
技术领域本发明涉及城市路网管理及交通诱导领域,具体涉及一种城市路网数据组织与最短路径快速计算方法。

背景技术:
在城市道路交通诱导领域,交通诱导的重要工作之一就是为出行者规划最佳出行路线,目前主要通过最短路径计算来完成对路网中任意一对或多对起讫点之间的最佳出行路线求解。其中,Dijkstra标号最短路径计算方法应用最为普遍。但是,Dijkstra计算方法仍存在一定问题:如1)尚未解决多个同时具有最小长度标号的临时节点的状态标号更新问题,易造成重复计算;2)缺少专门用于最短路径计算的邻接节点数据优化组织与快速查询方法,邻接节点查询问题仍主要通过对节点与其他节点间的连接关系进行逐一判断来解决,如现有的邻接矩阵法既浪费存储空间且邻接节点查询慢;3)具有最小长度标号的临时节点的确定问题仍需要对所有节点的状态标号和长度标号进行一一判断比较来解决,而其中对已经是永久标号的节点和长度标号为无穷大的节点的判断比较是多余的计算,缺乏优化的处理策略。由于城市路网的大规模、稀疏特性,这些问题尤为突出,严重影响了Dijkstra计算方法对城市路网最短路径的计算效率,亟待解决。

技术实现要素:
本发明要解决的技术问题是提供一种适用于城市出行路径规划的路网数据组织与最短路径快速计算方法。本发明所提出的一种城市路网数据组织与最短路径快速计算方法,其特点在于通过以下步骤实现:1、建立邻接节点编号和邻接边权值数据组织结构并存到路网数据文件file中本发明首先将交叉口抽象为节点、交叉口之间的路段的每一个行驶方向抽象为一条有向边,且每条边都有权值(可以是路段长度或行程时间等),即将由交叉口和路段组成的路网抽象为由节点和边组成的有向加权图,因此,任意一条边都有两个不相同的节点确定。对图中的节点从1开始按照递增的顺序进行编号,得到节点编号集合E,其中,节点总数为N。邻接节点(与指定节点仅通过一条边连接的其他节点)编号和邻接边(指定节点到其邻接节点之间的有向连接边)权值数据组织结构与存储方法为:确定路网中邻接节点最多的节点,获得其邻接节点总数为R(城市路网中一般不超过7个),建立一个N行2R+1列(不包含表头)的数据表文件,按节点编号依次递增的顺序,第1列依次存储E中各节点的邻接节点总数,第2列至第2R+1列依次存储各节点的所有邻接节点编号和与它们相应的邻接边权值,若某节点的邻接节点总数小于R,则剩余列为空或赋予0,具体组织结构与存储格式见图1。2、邻接节点和邻接边权值定位查询本发明所设计的邻接节点和邻接边权值数据组织结构能够支持二者的定位查询,即只要给出节点编号,可直接在路网数据文件file中通过确定的数据存储位置查找出该节点的所有邻接节点编号和与之相应的邻接边权值数据,不需要遍历式查询。根据数据文件file,以任意节点u(u∈E)为例,邻接节点和邻接边权值的具体查询方法为:(1)查询节点u的全部邻接节点编号和邻接边权值:节点u的全部邻接节点编号在数据文件file中的存储位置为第u行的第2列~第file(u,1)+1列(其中,file(u,1)表示file文件中的第u行第1列所存储的数据),即全部邻接节点编号为file(u,2)~file(u,file(u,1)+1)所存储的数据,与它们相应的邻接边权值在数据文件file中的存储位置为第u行的第file(u,1)+2列~第2file(u,1)+1列,即全部邻接边权值为file(u,file(u,1)+2)~file(u,2file(u,1)+1)所存储的数据;查询节点u的某一个邻接节点的邻接边权值:如节点u的某一个邻接节点为file(u,v)(v小于节点u的邻接节点总数+1)所存储的数据,则与之相应的邻接边权值为file(u,v+file(u,1))所存储的数据。3、基于排序定位的改进Dijkstra最短路径计算本发明基于步骤1中所建立的路网数据文件和步骤2中所给出的邻接节点和邻接边权值数据查询方法,针对传统的Dijkstra计算方法所存在的问题进行改进,设计了一种基于排序定位的改进Dijkstra计算方法,具体实现过程如下:(1)首先给出计算过程中所使用符号的定义:为每个节点i(i∈E)分别定义一个长度标号、前驱节点标号p(i)及状态标号s(i),其中,d(i)用于存储从计算起点到节点i的累积权值(起点到节点i的路径上各边的权值之和),p(i)用于存储从起点到节点i的路径上节点i前面的一个节点,s(i)用于存储节点i的计算状态,若s(i)=0表示尚未求得从路径起点到到该节点的最短路径(称为临时标号),若s(i)=1表示已求得从路径起点到到该节点的最短路径(称为永久标号),定义w(i,j)为节点i到其邻接节点j(j∈E)之间的邻接边权值;为构建新的临时标号节点数据组织和更新机制,实现永久标号节点的定位获取,需要定义一个行数可变的动态一维数组Q,用于存储长度标号小于无穷大(计算过程中用+∞表示)且状态标号为临时标号的节点编号,用L表示Q的行数变量,随着Q中数据的增减L是动态变化的,Q的数据结构及更新机制见图2,同时为统计Q中拥有最小长度标号的节点的个数,还需要定义一个变量x。(2)基于上述定义,应用改进的Dijkstra计算方法求解单个节点到其他所有节点的最短路径共包括以下几个分步骤:分步骤一:从数据文件file中读取数据并赋值给二维数组M;分步骤二:初始化,确定计算的起点为z(z∈E),求节点z到E中其他所有节点的最短路径,令d(z)=0,s(z)=0,p(z)=0,对于r∈E且r≠z的节点,令d(r)=+∞,s(r)=0,p(r)=0,令Q={z
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1