主权项 |
一种基于数据库中数据集合进行的图上两点间最短路径查询方法,其步骤包括:1)从图上随机抽取若干点作为支点,根据各支点间的最短路径得出图上每点的中间性估计值;2)将中间性估计值大于设定值的点作为中心点及图中各点到各中心点的最短路径信息加入图中各点的hop信息,这些中心点的集合记为Wb;3)将图去除Wb中各点后分割为若干小图Si,1<i≤m,m为小图个数,并得到点割集Ws;4)对于每个小图Si根据枚举出的任意两点间最短路径,得到该小图Si内的所有点的hop信息;所述图中各点的hop信息为四元组<v,u,Dist<sub>sp</sub>(v,u),neighbor(v)|<sub>u</sub>>,其中,v是大规模数据图上的任意点,u是覆盖v的一条最短路径的中心点,Dist<sub>sp</sub>(v,u)是u与v之间的距离,neighbor(v)|<sub>u</sub>表示从v到u的最短路径上v的邻居;5)根据Wb中各点到Ws中各点的最短路径得到不同小图之间的点的hop信息;6)根据图中各点的hop信息,得到用户输入的两查询点之间的最短路径,具体操作过程如下:6‑1)当查询两个大规模数据图上的点v<sub>1</sub>和v<sub>2</sub>之间距离时,对于v<sub>1</sub>和v<sub>2</sub>分别维护一个hop信息的有序列表,列表中每一项对应一个四元组,列表按照四元组中的中心点的ID的值排序;6‑2)对两个列表进行归并操作,进而得到两点间距离,分别指定两个指针c<sub>1</sub>和c<sub>2</sub>分别对v<sub>1</sub>和v<sub>2</sub>的hop信息有序列表进行遍历,当c<sub>1</sub>和c<sub>2</sub>所指向的四元组的中心点w一样时,将Dist<sub>sp</sub>(v<sub>1</sub>,w)+Dist<sub>sp</sub>(v<sub>2</sub>,w)作为v<sub>1</sub>和v<sub>2</sub>之间距离的候选值;当所有候选值都得到之后,取最小的值即为v<sub>1</sub>和v<sub>2</sub>之间距离;如果v<sub>1</sub>和v<sub>2</sub>之间不连通,返回无穷大作为两点间距离;6‑3)计算查询点之间路径时,还需记录v<sub>1</sub>和v<sub>2</sub>为了取这个候选值所需要途径的邻居结点neighbor(v<sub>1</sub>)|<sub>w</sub>和neighbor(v<sub>2</sub>)|<sub>w</sub>,然后迭代地计算neighbor(v<sub>1</sub>)|<sub>w</sub>和neighbor(v<sub>2</sub>)|<sub>w</sub>之间的最短路径,直到最后收敛到一个点。 |