[英]How do I make a simple bus route search Engine?
[不是:e用户在铁路查询系统的开发中再次询问这个问题,如何为火车,车站和站点建模? ] 我的问题描述:
假设我在ROUTE-1中有一个BUS-123,它将穿过ROUTE-2到D,E,F, X,Y,Z的 A,B,C,D,E,F,G,H和BUS-321。 。 如果有人输入B作为源点而F输入目标点,那么带有BUS-123的ROUTE-1应显示在结果中。 但是如果有人输入H作为源而A作为目标结果不应该显示,因为返回可能并不总是与行进的结果相同。 但是如果一个人输入A作为源而Z作为目的地,则应显示带有ROUTE-1的 BUS-123和带有ROUTE-2的 BUS-321 。
我的问题是:如何在数据库中存储该路由信息? 如果我存储在RDBMS中,如下所示
BUS_NUMBER ROUTE_NUMBER VIA_ROUTES
BUS-123 ROUTE-1 A, B, C, D, E, F, G, H
BUS-321 ROUTE-2 D, E, F, X, Y, Z
然后我的搜索将如何工作。 我的意思是如何在字符串中搜索它。 如果我将所有VIA_ROUTES存储在不同的不同列中,那么它将如何...? 请用你自己的技巧建议我。 这并不紧急,但我打算进行基本的公交路线搜索,所以感谢您的评论。
我将其建模为循环图。 每个公交车站由一个顶点表示。 两个站点之间的每个直接连接由标有路由号码的边缘表示; 因此,每条路线都是一系列连接的边缘。 也使边缘定向。 并非所有从A站到B站的路线都必须从B站往另一个方向A站行驶。
可能希望用估计的旅行时间来填充每个边缘,这条腿的方差的度量(或度量) - 在星期日晚上凌晨2点,方差可能很低,但是在星期五晚上的下午5点,它可能非常高,以及出发时间列表。
然后是图遍历并找到“最低成本”路线,然而您选择定义“最低成本” - 您可能要考虑的因素包括:
应该注意的是,太多的等待时间是不好的(1月份等待公共汽车需要花费40分钟才能达到-10华氏度?)。 太少也是坏事,因为它增加了错失连接的可能性,因为公交车的时间表往往具有相当大的可变性,因为它们对当地交通状况的波动具有高度响应性。
我就是这样做的。
我不相信我会尝试直接在SQL中解决它。
不过,该模型非常适合SQL。 您需要以下实体,然后是一些实体,因为您需要表示时间表等:
我认为bus_numbers并不重要,因为你可以稍后查看它们。 也许你需要的是在一个大矩阵中创建一个带有bus_stops的二维矩阵,然后使用像dijkstra这样的图遍历算法来找到从A到B的最短路径。当你得到它时你可以很容易地查找bus_numbers和向客户展示它们。 因此我认为您的数据库已经非常好了。
我有一个route
表和一个route_part
表。 后者将包含对路线的引用,加上用于排序的序数和对stop
表的引用。 因此,您可以存储任何路线。
在搜索方面,如果你想搜索两站之间的路线,你可以在route_part
表中查找两个站点,看看它们在任何情况下是否出现在同一条路线上(请记住,路线可能存在于一个方向,而不是另一个方向)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.