吾本轻狂|全网首发:12306抢票算法大曝光?(十张图搞定)( 二 )


好了 , 一分钟时间已到 , 让我们继续 。
首先 , 让我们回顾下G67这趟列车的信息:一共18个站 , 一共200个座位 。
为了方便讲解和画图 , 我们假设它只有北京、信阳、武汉、岳阳、长沙、广州6个站 , 一共有8个座位 。
针对这样的信息 , 我们可以这样来实现抢票策略:
一、创建5个位图 , 每个位图的大小为8位 , 初始时 , 每个位的值都是0 。 为什么是5个位图呢?因为到站就下车了 , 而广州站是终点站 , 到站全部人都得下车 。 比如 , 一个人从北京到武汉 , 他到武汉就下车了 , 所以 , 它不会占用武汉的位置 。
三、假设第一个人的请求过来了 , 他要抢从北京到武汉的票 , 此时 , 我们只需要把北京和信阳两个位图做“或”运算 , 结果中 , 所有0的位置都表示可抢的位置 , 在这些位置中随机返回一个即可 , 并把此位置在北京和信阳这两个位图中标记为1 , 表示此位置在北京和信阳有人占用了 。 (武汉为什么不参与运算了 , 前面讲过了 , 这个人到武汉就下车了 。 )
好了 , 关于抢票算法我们就介绍到这里 , 你有没有Get到呢?或者你有没有更好的实现方法呢?
后记本节 , 我们一起重温了位运算的操作 , 并学习了如何使用位图实现12306的抢票算法 , 关于位图 , 其实还有很多用途 , 比如 , 各种统计、限流、权限控制等 。


推荐阅读