algorithm - 寻找最佳往返机票组合
问题描述
问题
用户希望n
在灵活的时间窗口之间找到最便宜的向外和向内飞行组合。
我有给定的用户变量:
Dd
= 最早可能的出发日开始旅行Rd
= 结束行程的最晚可能返回日Min
= 出发和返回之间的最短天数Max
= 出发和返回之间的最大天数
对于向内和向外,我每天都有单独的旅程列表(从Dd
到Rd
)。每个日期列表都包含该特定日期的所有合适和可能的旅程。
结果应显示为按价格排序的列表。
我的方法
我只能想到一种非常简单的方法,将每一天列表解析为当天最便宜的旅程(因为时间不相关),然后建立两棵二叉树(用于向内和向外),日期为节点,价格为价值。然后遍历向外的树并查找向内的旅程(以Min
toMax
作为偏移量)并将每个组合放入排序列表中。
如何优化?
我很确定我的解决方案提供了优化空间。我做了一些研究,导致我进行线性规划,但我在制定这个问题时遇到了问题……也许其他算法或方法适合这个问题?
解决方案
您可以找到所有符合条件的旅程,并在类似下面的伪 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)
推荐阅读
- javascript - (React Native)设置 AsyncStorage 值但在我检索它时得到垃圾
- java - java/kotlin 中是否有诸如“Work in progress”、“todo”、“implementation not finished”或“draft”之类的注释?
- java - 没有获得全屏背景或字体
- html - 提交表单域重叠
- python - 用前两列之间的差异替换数据帧的几个零
- javascript - Node.js 承诺 .then() 不是序列
- flutter - 基于 StateProvider 更新生成一个临时的 OverlayEntry
- javascript - 在 reactjs 中注销后更改导航栏链接
- python - R:如何自动计算数据框,然后根据多个数据框的结果生成图表?
- mongodb - MongoDB Shell deleteMany() 函数不起作用