【问题标题】:Logic/Algorithm for sorting Bus route options排序公交路线选项的逻辑/算法
【发布时间】:2015-07-01 17:28:53
【问题描述】:

我正在尝试实现以下公交路线排序算法。

客户搜索从 A 到 B 的巴士并选择首选运营商。 (例如:灰狗从达拉斯到芝加哥) 假设有一个 Web 服务返回从 A 到 B 的巴士路线选项列表。每个 BusOption 对象都有以 Carrier 作为属性之一的路段列表,以及出发时间、到达时间等

我需要按以下顺序对结果进行排序。

  1. 首先显示首选运营商从 A 到 B 的直达巴士。 (在每个组内按最早到达时间排序)
  2. 在首选运营商上连接从 A 到 B 的巴士。
  3. 从站点 A 出发的首选运营商上的巴士从中间站连接到非首选运营商。
  4. 非首选运营商的直达巴士
  5. 从 A 连接非首选载波,然后从中间站连接首选载波。
  6. 通过路线连接非首选运营商

例如:灰狗从达拉斯到芝加哥

ORG         DEST        CARRIER     DEPART  ARRIVAL     

1。达拉斯芝加哥灰狗 6 AM 11 PM

  1. 达拉斯芝加哥灰狗 7 AM 11.45 PM
  2. 达拉斯 - 堪萨斯灰狗 6 AM 1 PM

    堪萨斯城 - 芝加哥灰狗 2 PM 10PM

  3. 达拉斯 - 堪萨斯灰狗 6 AM 1 PM

    堪萨斯城 - 芝加哥 MEGABUS 2 PM 10PM

  4. 达拉斯芝加哥 Megabus 早上 6 点晚上 11 点
  5. 达拉斯 - 堪萨斯 Megabus 早上 6 点到下午 1 点

    堪萨斯城 - 芝加哥灰狗 2 PM 10PM

  6. 达拉斯 - 堪萨斯 MEGABUS 早上 6 点下午 1 点

    堪萨斯城 - 芝加哥 MEGABUS 2 PM 10PM 我的想法:

我最初想为每个组使用一个集合,因此六个集合对象。 在将 WS 响应映射到包含 Segments 列表和 isPreferredCarrier 标志的 BusOption 类的自定义响应时, 如果至少有一个运营商不是首选,我想将 prefferredCarrier 标志设置为 false。 那么,

If(routeOption.getSegments.size()==1 and routeOption.isPreferredCarrier()){
    Add to Set 1
}else //continue similar logic and add to corresponding Set

按照所需的 1 到 6 的顺序合并所有集合。

这是正确和最佳的方法吗?如果您想到更好的排序逻辑,请告知

【问题讨论】:

  • 你到底想问什么?我在这里没有看到明确的问题,这会阻止很多人回答。

标签: java algorithm


【解决方案1】:

如果至少有一个运营商不是首选,则不能将 isPreferredCarrier 标志设置为 false,因为在这种情况下,您不能设置 3。因此,您应该为每个航段保留该标志:

if (routeOption.getSegments.size()==1 &&
    routeOption.getSegments[0].isPreferredCarrier())
    Add to Set 1;
else if (routeOption.getSegments.size()==2 &&
    routeOption.getSegments[0].isPreferredCarrier() &&
    routeOption.getSegments[1].isPreferredCarrier())
    Add to Set 2;
else if (routeOption.getSegments.size()==2 &&
    routeOption.getSegments[0].isPreferredCarrier())
    Add to set 3;
else ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多