首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物流和运输计划技术

物流和运输计划技术
EN

Stack Overflow用户
提问于 2012-10-11 04:20:58
回答 1查看 728关注 0票数 0

实际上,我正在开发一个汽车票预订系统。提供商有许多路线和不同的行程。我已经建立了一个相当全面的数据库,将所有这些都映射在一起,但当我涉及到跨路线预订时,我遇到了让路径算法工作的问题。

例如,用户想要从蒙特利尔到舍布鲁克,他将只走我们在这里称为路由#47的路线。但如果他去萨顿而不是舍布鲁克,他现在必须在某个时候转乘53号路线。

现在,检测一个且只有一个传输并不太难。但当我发现他可以做什么来跨越多条路线时,我有点害怕。我已经设计了一种可爱且相对有效的方法,仅使用SQL就可以在1-3跳内完成此操作,但我想知道如何在更广泛的范围内组织这一切,因为客户端可能不会在余生中停留在2条路由上。

到目前为止我想到的例子:

代码语言:javascript
复制
StartingStop
joins to Route
joins to StopsOfTheRoute
joins to TransfersOnThatStop
joins to TargetStopOfThatTransfer
joins to RouteOfThatStop
joins to StopsOfThatNewRoute
[wash rince repeat for more hops]
where StopsOFThatNewRoute = EndingStop

问题是,如果我有3个以上的跃点,我肯定我的SQL服务器在压力下会很快卡住,即使我正确地索引了我的数据库,我也可以很容易地预测最终会出现重大故障……

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 08:29:00

我对你的问题的理解是:你正在寻找一种算法,可以帮助你确定一条合适的路径(覆盖一条或多条路由的路段)。

正如Jason正确指出的那样,这是一个寻路问题。对于这类问题,您可能应该先看看维基百科的article on pathfinding,然后深入研究Djikstra's algorithm的细节。这可能会让您开始使用它。

但是,您很可能很快就会意识到,从结构和性能的角度来看,您的数据模型可能会带来问题。典型的例子是如果你需要管理时间限制:假设你找到了几条路径,哪条路径的旅行时间最短?一条路径可能是最短的,但每天只提供一次乘车,而另一条路径可能更长,但每天提供几次乘车。

一种可能的处理方法是创建一个图,其中每个节点对应于特定时间的特定停靠点。一条边将在房间时间内从这个停靠点连接到其他两个地理停靠点,以及下一个时间点的自身。

我的建议是从阅读寻路算法开始,然后重新检查您的数据模型,了解您可能遇到的任何约束。然后,重点介绍用于存储数据的结构和用于搜索路径的结构。

建议(效率不高,但如果有足够的RAM可以使用)。使用关系数据库服务器存储基本信息:停靠点,哪些路线连接到哪些停靠点,等等。看起来你已经讲过了。然后,在给定约束的情况下,构建图的内存表示。您可能会很快地为此构建自己的库(我不知道有任何这样的PHP库)。

另一种选择是使用图形数据库,如Neo4j及其REST接口。我猜这需要对你的应用程序进行一些重大的重新设计。

希望这篇文章能给你一些有用的建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12827670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档