一种城市路网数据组织与最短路径快速计算方法,涉及城市路网管理及交通诱导领域,包括建立邻接节点编号和邻接边权值数据组织结构并存到路网数据文件file中、邻接节点和邻接边权值定位查询及基于排序定位的改进Dijkstra最短路径计算三个步骤。本发明专利技术利用城市路网拓扑结构的稀疏特性巧妙地设计了一种能够定位查询邻接节点信息又能有效节省存储空间的路网数据组织结构,改变传统Dijkstra计算方法确定永久标号节点的实现策略,构建了一种新的临时标号节点数据组织和更新机制,实现了永久标号节点的定位获取,解决了多个同时具有最小长度标号的临时节点处理问题,有效提升了Dijkstra最短路径算法的计算效率,计算方法具有普遍适用性和可移植性。
【技术实现步骤摘要】
本专利技术涉及城市路网管理及交通诱导领域,具体涉及一种城市路网数据组织与最短路径快速计算方法。
技术介绍
在城市道路交通诱导领域,交通诱导的重要工作之一就是为出行者规划最佳出行路线,目前主要通过最短路径计算来完成对路网中任意一对或多对起讫点之间的最佳出行路线求解。其中,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)建立邻接节点编号和邻接边权值数据组织结构并存到路网数据文件file中首先将交叉口抽象为节点、交叉口之间的路段的每一个行驶方向抽象为一条有向边,且每条边都有权值,即将由交叉口和路段组成的路网抽象为由节点和边组成的有向加权图,因此,任意一条边都有两个不相同的节点确定。对图中的节点从1开始按照递增的顺序进行编号,得到节点编号集合E,节点总数为N。邻接节点编号和邻接边权值数据组织结构与存储方法为:确定路网中邻接节点最多的节点,获得其邻接节点总数为R,建立一个N行2R+1列的数据表文件。按E中节点编号递增的顺序,第1列依次存储各节点的邻接节点总数,第2列至第2R+1列依次存储各节点的所有邻接节点编号和与它们相应的邻接边权值。(2)邻接节点和邻接边权值定位查询根据数据文件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)所存储的数据;2)查询节点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的累积权值,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中拥有最小长度标号的节点的各数,还需要定义一个变量x。2)基于上述定义,改进的Dijkstra算法求解单个节点到其他所有节点的最短路径共包括以下几个分步骤:分步骤一:从数据文件file中读取数据并赋值给二维数组M;分步骤二:初始化,确定计算的起点为z(z∈E),求节点z到其他所有节点的最短路径,令d(z)=0,s(z)=0,p(z)=0,对于r∈E且r≠z的节点,令d(r)=+∞,s(r)=0,p(r)=0,令Q={z},x=0;分步骤三:确定下次迭代计算将为永久标号的节点,首先对Q中数据按照各节点的长度标号数据大小递减的顺序进行重新排序,确定拥有最小长度标号的邻接节点个数并赋值给x,即此时Q中第L‑x+1行至第L行所存储的数据均为具有最小长度标号的节点编号,将这些节点的状态标号同时由临时标号更新为永久标号,即令K={Q(k)|k=(L‑x+1):L,k为整数},s(k)=1(k∈K),为方便后续对Q中数据的更新操作,令L=L‑x;分步骤四:对于集合K中的每个节点k,更新节点k的所有邻接节点标号和一维数组Q,首先根据节点k的编号在二维数组M中查找它的所有邻接节点编号为M(k,2)~M(k,M(k,1)+1)所存储的数据,以及与这些邻接节点相应的邻接边权值为M(k,M(k,1)+2)~M(k,2M(k,1)+1)所存储的数据,再对M(k,2)~M(k,M(k,1)+1)中的每个节点t判断d(t)>d(k)+w(k,t)是否成立,如果成立,则令d(t)=d(k)+w(k,t),p(t)=k,并判断在此次更新之前节点t的长度标号d(t)是否为+∞,若果是,则令L=L+1,Q(L)=t;分步骤五:转至步骤三,重复步骤三~步骤四的计算,直到所有节点的状态编号全部为1时停止计算,即获得了从计算的起始...
【技术特征摘要】
1.一种城市路网数据组织与最短路径快速计算方法,其特征包括以下步骤:
(1)建立邻接节点编号和邻接边权值数据组织结构并存到路网数据文件file
中
首先将交叉口抽象为节点、交叉口之间的路段的每一个行驶方向抽象为一条
有向边,且每条边都有权值,即将由交叉口和路段组成的路网抽象为由节点和边
组成的有向加权图,因此,任意一条边都有两个不相同的节点确定。对图中的节
点从1开始按照递增的顺序进行编号,得到节点编号集合E,节点总数为N。
邻接节点编号和邻接边权值数据组织结构与存储方法为:确定路网中邻接节
点最多的节点,获得其邻接节点总数为R,建立一个N行2R+1列的数据表文件。
按E中节点编号递增的顺序,第1列依次存储各节点的邻接节点总数,第2列
至第2R+1列依次存储各节点的所有邻接节点编号和与它们相应的邻接边权值。
(2)邻接节点和邻接边权值定位查询
根据数据文件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)所存储的数据;
2)查询节点u的某一个邻接节点的邻接边权值:如节点u的某一个邻接节
点为file(u,v)(v小于节点u的邻接节点总数...
【专利技术属性】
技术研发人员:龚勃文,林赐云,
申请(专利权)人:吉林大学,林赐云,
类型:发明
国别省市:吉林;22
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。