Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 找到最佳的往返机票组合 问题_Algorithm_Sorting_Optimization_Linear Programming - Fatal编程技术网

Algorithm 找到最佳的往返机票组合 问题

Algorithm 找到最佳的往返机票组合 问题,algorithm,sorting,optimization,linear-programming,Algorithm,Sorting,Optimization,Linear Programming,用户希望在灵活的时间窗口之间找到最便宜的向外和向内航班组合 我有给定的用户变量: Dd=开始行程的最早出发日 Rd=结束行程的最晚可能返程日 Min=出发和返回之间的最小天数 Max=出发和返回之间的最大天数 对于入境和出境,我每天都有单独的行程列表(从Dd到Rd)。每一天的清单都包含该特定日期的所有合适和可能的行程 结果应显示为按价格排序的列表 我的方法 我只能想到一种非常简单的方法,将每天的列表解析为当天最便宜的旅程(因为时间不相关),然后构建两个二叉树(向内和向外),以日期为节点,以价

用户希望在灵活的时间窗口之间找到最便宜的向外和向内航班组合

我有给定的用户变量:

  • Dd
    =开始行程的最早出发日
  • Rd
    =结束行程的最晚可能返程日
  • Min
    =出发和返回之间的最小天数
  • Max
    =出发和返回之间的最大天数
对于入境和出境,我每天都有单独的行程列表(从
Dd
Rd
)。每一天的清单都包含该特定日期的所有合适和可能的行程

结果应显示为按价格排序的列表

我的方法 我只能想到一种非常简单的方法,将每天的列表解析为当天最便宜的旅程(因为时间不相关),然后构建两个二叉树(向内和向外),以日期为节点,以价格为值。然后遍历外向树并查找内向行程(以
Min
Max
作为偏移量),并将每个组合放入排序列表中

如何优化?
我很确定我的解决方案为优化提供了空间。我做了一些研究,使我对线性规划,但我有问题,制定这个问题。。。也许还有其他算法或方法适合这个问题?

您可以找到符合条件的所有旅程,并在类似以下伪python的内容中按成本进行排序:

for out in (all departures between Dd and Rd):
    for ret in (all returns betweem out and Rd):
        possibles.add((out, ret))
time_pruned = [journey for journey in possibles 
               if stay_between(Min, Max, journey)]
order_by_cost = sorted(time_pruned, key=cost_function)