我最近开始了一个项目,涉及使用来自伦敦Ungerground数据集的数据,以便找到来自给定工作站的n分钟路线。
到目前为止,我已经能够解析数据集中的数据,并在每个站点之间创建可能的路由。我现在有一个路由对象列表,它具有以下属性:
Parent - the first station
Child - the next linked station
Line - whichever line the station is on
Time - the time between the two stations
我目前使用VICTORIA作为起始站的数据是:
我已经格式化了我的输出以使其更容易阅读,但每一行都是路由对象的表示。所以你有起始站,时间,下一站和线路。
VICTORIA => 1 <= PIMLICO : Victoria
VICTORIA => 2 <= GREEN PARK : Victoria
VICTORIA => 2 <= ST JAMES PARK : Circle
VICTORIA => 2 <= SLOANE SQUARE : Circle
PIMLICO => 2 <= VAUXHALL : Victoria
GREEN PARK => 2 <= OXFORD CIRCUS : Victoria
GREEN PARK => 1 <= WESTMINSTER : Jubilee
GREEN PARK => 2 <= BOND STREET : Jubilee
GREEN PARK => 1 <= PICCADILLY CIRCUS : Piccadilly
GREEN PARK => 1 <= HYDE PARK CORNER : Piccadilly
ST JAMES PARK => 1 <= WESTMINSTER : Circle
SLOANE SQUARE => 1 <= SOUTH KENSINGTON : Circle
VAUXHALL => 2 <= STOCKWELL : Victoria
VAUXHALL => 2 <= PIMLICO : Victoria
OXFORD CIRCUS => 1 <= PICCADILLY CIRCUS : Bakerloo
OXFORD CIRCUS => 2 <= REGENTS PARK : Bakerloo
OXFORD CIRCUS => 2 <= TOTTENHAM COURT ROAD : Central
OXFORD CIRCUS => 1 <= BOND STREET : Central
OXFORD CIRCUS => 2 <= GREEN PARK : Victoria
OXFORD CIRCUS => 1 <= WARREN STREET : Victoria
从VICTORIA收集所有可能路线的最佳方法是什么?
例如:
VICTORIA > GREEN PARK > WESTMINSTER
VICTORIA > GREEN PARK > BOND STREET
VICTORIA > PIMLICO > VAUXHALL
答案 0 :(得分:12)
听起来像是一个图论问题。我最喜欢的!
找到“所有可能的路线”的问题在于,使用您提供的数据(或在这种情况下的任何真实数据集),您将遇到循环。因此,对于任何给定的路线,您将需要确保每个电台仅访问一次。
由于您只有一个起点,我建议Djikstra's Alogrithm。这将找到从 VICTORIA 到每个其他站的路径(实际上是最短路径)。至少,每个其他可达的站点。这是一种众所周知,快速且相对容易实现的算法。通常在O(n ^ 2)时间内运行,但可以按摩到O(m + nlogn)中,并且有一些数据结构jimmying。
希望至少让你走上正轨!