机票搜索过程:按照请求的条件,取得对应的运价、规则、座位,三者匹配并计算出票价,排序选择优先价格并展示。主要代价花在其中的匹配步骤,也是本篇介绍的重点。匹配和计算都位于计算层。
一、国内机票单程
1、三层循环做运价*规则*座位的笛卡尔积来实现匹配,并计算代理商机票销售价
2、时间复杂度
选取B2C运价(此外还有渠道运价、B2B运价)的计算节点为例
指定出发、到达下的计算次数 ∝ 运价数*规则数*座位数
运价数 ∝ 代理商总数
规则放大的倍数 ∝ 规则基于机场、航班的细分(不同返点、留钱)程度
座位放大的倍数 ∝ 航班数
二、国内机票往返
1、基于两个单程结果拼接
时间复杂度:拼接步骤所消耗时间占比可忽略不计(由于合并后的结果数量级远低于合并前),等于单程。
2、基于往返打包运价计算
往返打包运价*往返规则*去程航班*返程航班的笛卡尔积来实现匹配,并计算代理商机票销售价
时间复杂度:当打包运价数远低于单程运价数时,时间占比可忽略;否则为单程复杂度*单个航司下的平均航班数。
3、两类结果合并后为最终结果
两类结果可以并行计算,合并消耗时间占比很小
总时间复杂度:与单程相当,或大一个数量级。