導(dǎo)讀相信大家應(yīng)該都有搶火車票的經(jīng)驗,每年年底,這都是一場盛宴。然而你有沒有想過搶火車票這個算法是怎么實(shí)現(xiàn)的呢?其實(shí)并沒有你想的那么難。
12306搶票算法詳解我們以北京到西安這趟高鐵為例,比如我的路線就是從北京到西安,車上如果只剩最后一張票了,那么如果有其他人,在北京到西安這條路線之間買任何一站,那么我都是買不了票的,換句話說,對于單個座位來說,必須是起點(diǎn)到終點(diǎn)之間的所有站都沒有人買的話,那么才能被算是有票狀態(tài)。
所以我們可以嘗試用redis的bitmap結(jié)合上位操作來實(shí)現(xiàn)這種場景,以上述北京到西安為例,我們把問題簡化:
比如一個火車上只有4個座位;
北京到西安,一共是4站,其實(shí)是三個區(qū)間的,分別為北京-》石家莊,石家莊-》鄭州,鄭州-》西安。
首先我們給每個區(qū)間構(gòu)建一個空位圖(0為有票,1為無票)。接下來,比如有人買了一張從北京到西安的票。買票這個動作,比如被分配到的座位是編號為1的座位,那么我們直接把北京到西安的所有站,1號座位全部設(shè)置為1
接下來又有人買了一張從石家莊到西安的票。比如這次分配的是座位2,那么我們把石家莊到西安的所有票全部設(shè)置為1就行了
如何知道還剩幾張票?其實(shí)解決這個問題很簡單,我們直接把上述位圖做一個或操作就可以了,因為或操作是必須全部都為0,才為0。
或操作結(jié)果有幾個0,則說明還剩幾張票。
總結(jié)其實(shí)解決這個問題主要在于位圖的構(gòu)建,因為火車票對于某一個座位來說,只要起點(diǎn)到終點(diǎn)中間某一個區(qū)間被占用了(置為1),那么整個座位都是無效的這個特點(diǎn),很容易想到用或操作的結(jié)果來判斷買票結(jié)果,我們這里只用了4位是為了方便說明問題,實(shí)際中應(yīng)該是火車上有多少座位,位圖的長度就應(yīng)該是多少。
好了,關(guān)于搶票算法我們就介紹到這里,你有沒有g(shù)et到呢?或者你有沒有更好的實(shí)現(xiàn)方法呢?
責(zé)任編輯:haq
-
算法
+關(guān)注
關(guān)注
23文章
4708瀏覽量
95255
原文標(biāo)題:12306 搶票算法被曝光了,居然這么簡單!
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于FPGA的壓縮算法加速實(shí)現(xiàn)

火車車號識別系統(tǒng)的基本原理是什么?
火車車號自動識別系統(tǒng)如何應(yīng)對夜間識別難題?

FOC 算法實(shí)現(xiàn)永磁同步電機(jī)調(diào)整指南
PID控制算法的C語言實(shí)現(xiàn):PID算法原理
請問ads1292算法支持實(shí)現(xiàn)疲勞監(jiān)測嗎?
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗】+內(nèi)容簡介
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗】+介紹基礎(chǔ)硬件算法模塊
【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗】+一本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書
Pure path studio內(nèi)能否自己創(chuàng)建一個component,來實(shí)現(xiàn)特定的算法,例如LMS算法?
位移傳感器在火車軌道上的應(yīng)用
名單公布!【書籍評測活動NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)
C加密算法的實(shí)現(xiàn)

激光跟蹤儀在火車軌道檢測中的應(yīng)用

評論