用于分类总线路由选项的逻辑/算法

时间:2015-07-01 17:28:54

标签: java algorithm

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

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

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

  1. 首先在首选航空公司上显示从A到B的直达巴士。 (每组内按最早到达时间排序)
  2. 在首选航空公司上将公交车从A连接到B.
  3. 来自A站的优选载波上的总线连接到来自中间站的非优选载波。
  4. 非首选航空公司的直达巴士
  5. 从A中连接非首选,然后从中间站连接首选载体。
  6. 将非首选承运人连接到路线
  7. 示例例:达拉斯到灰狗的芝加哥

    ORG         DEST        CARRIER     DEPART  ARRIVAL     
    

    1。达拉斯芝加哥灵缇犬上午6点至晚上11点

    1. 达拉斯芝加哥灵缇上午7点11分下午11点45分
    2. 达拉斯 - 堪萨斯Greyhound上午6点1点

      堪萨斯城 - 芝加哥灰狗下午2点10点

    3. 达拉斯 - 堪萨斯Greyhound上午6点1点

      堪萨斯城 - 芝加哥MEGABUS下午2点10点

    4. 达拉斯芝加哥Megabus早上6点11分
    5. 达拉斯 - 堪萨斯Megabus早上6点1分

      堪萨斯城 - 芝加哥灰狗下午2点10点

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

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

    7. 我最初想过为每个组使用一个Set,因此有六个设置对象。 将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。

      这是正确和最佳的方法吗?请告知您是否考虑更好的分类逻辑

1 个答案:

答案 0 :(得分:0)

如果至少有一个载波不是首选,则不能将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 ...