存储路线数据

时间:2012-05-19 18:18:27

标签: database algorithm path-finding

我有一些列车网络的时间表 -

  

开始位置(时间) - >停止1(时间1) - >停止2(时间2) - > ...结束位置

即。每个路线/时间表由在升序时间发生的一系列停靠点组成。这些路线每天重复多次。

最终我想在这些数据之上构建一个寻路算法。最初,这将从单个时间表/路线返回路径。但最终我希望能够计算出多条路线的最佳旅程。

因此,我的问题是,存储此数据以使查询路由尽可能简单的最佳方法是什么?我想一个查询的格式是......

  

开始位置:x,结束位置:y,时间:t

1 个答案:

答案 0 :(得分:1)

如果您正在进行路径查找,许多路径查找算法会处理跟随到下一个节点的最短路径段,并查询该节点的路径。因此,您的查询将最终成为,在时间t或之后来自x站的所有段,但最早是针对给定的不同目的地。

如果您有从华盛顿特区到巴尔的摩的路线,您的1号站和2站可能是New Carrolton和Aberdeen。所以你可以存储:

id (auto-increment), from_station_id, to_station_id, departure_time, arrival_time

你可能会将华盛顿的记录保存到New Carrolton,New Carrolton到Aberdeen的记录,以及从Aberdeen到Baltimore的记录。但是,如果(a)它们是您旅行计划的可能来源和目的地,或者(b)有一些重要的连接路线(不仅仅是乘坐火车并在同一条路线上乘坐下一条路线),我只会包括这些站点。

您的路径查找算法将从具有最低当前成本(最早到达)列表的节点开始(从一个循环开始)下一个段的列表,以及该段带给您的节点。

select segments.*
from segments inner joint segments compare_seg on segments.to_station_id = compare_seg.station_id
where departure_time > ?
group by segments.id
having segment.arrival_time = min(compare_seg.arrival_time)