关于12306火车票销售的简单思考
昨天,大家在群里討論了下12306的售票系統的算法問題,@北京-一葦渡江11同學和我提了要最小粒度鎖,我給了一個相對簡單的數據模型,不曉得可行性如何,歡迎大家拍磚。
我們假定有一趟列車K200,途徑10個站點,我們分別用數字1,2...10來表示每個站點,這趟車我們假定只有10個座位,用A,B,C字母代替,其中規定,A座位只能在1號站點賣,但是終點隨意,且到達終點被釋放后可以給后面任意一個站點銷售,B只能給2好站點賣,到終點后的策略和A座一個道理!以此類推!
模型如下:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| A | B | C | D | E | F | G | H | I | J |
這個時候我們找個數據模型來表示余票信息,
模型需要標記的是車次,座位,起始站點,終點站,買賣標記,站內票(就是分配給該站,不得在其它站點賣),那么鐵道部開始放票的初始化余票信息為:
| 車次 | 座位 | 起點站 | 終點站 | 買賣標記 | 站內票 |
| K200 | A | 1 | 11 | 未賣 | 是 |
| K200 | B | 2 | 11 | 未賣 | 是 |
| K200 | C | 3 | 11 | 未賣 | 是 |
| K200 | D | 4 | 11 | 未賣 | 是 |
| K200 | E | 5 | 11 | 未賣 | 是 |
| K200 | F | 6 | 11 | 未賣 | 是 |
| K200 | G | 7 | 11 | 未賣 | 是 |
| K200 | H | 8 | 11 | 未賣 | 是 |
| K200 | I | 9 | 11 | 未賣 | 是 |
| K200 | J | 10 | 11 | 未賣 | 是 |
現在我們假定有個人買一張從1站點到4站點的人,現在1號站點沒票,四號站點有了兩張票,其中下車的人的票用字母A1表示,但是因為后面的5,6,7,8,9,10號站點都可以賣票A1,所以實際上現在4以后的站點都變成了有兩張票,我們的表格數據變成如下:
| 車次 | 座位 | 起點站 | 終點站 | 買賣標記 | 站內票 |
| K200 | A | 1 | 4 | 已賣 | 是 |
| K200 | A | 4 | 11 | 未賣 | 否 |
| K200 | B | 2 | 11 | 未賣 | 是 |
| K200 | C | 3 | 11 | 未賣 | 是 |
| K200 | D | 4 | 11 | 未賣 | 是 |
| K200 | E | 5 | 11 | 未賣 | 是 |
| K200 | F | 6 | 11 | 未賣 | 是 |
| K200 | G | 7 | 11 | 未賣 | 是 |
| K200 | H | 8 | 11 | 未賣 | 是 |
| K200 | I | 9 | 11 | 未賣 | 是 |
| K200 | J | 10 | 11 | 未賣 | 是 |
那現在從上面的表格看出,1號站點已經沒有票了,一個站點的余票信息是,如果非站內票,那么起始站點只要小于等于本站就行,如果站內票,則起始站點必須等于本站!所以可以看到2,3是還有一張票,4-10有兩張票!
如果現在有個用戶購買了6-8的票,一般是站內票優先,因為只能在該站賣,所以F票賣出,在8下車后變成了F1,這個時候8和9和10都有三張票。那要是再來一個用戶需要買6-8的票,這個時候只能出A1的票,這樣A座位就變成在4-6可以賣,8-10也可以賣!數據變成了如下:
| 車次 | 座位 | 起點站 | 終點站 | 買賣標記 | 站內票 |
| K200 | A | 1 | 4 | 已賣 | 是 |
| K200 | A | 4 | 6 | 未賣 | 否 |
| K200 | A | 6 | 8 | 已賣 | 否 |
| K200 | A | 8 | 11 | 未賣 | 否 |
| K200 | B | 2 | 11 | 未賣 | 是 |
| K200 | C | 3 | 11 | 未賣 | 是 |
| K200 | D | 4 | 11 | 未賣 | 是 |
| K200 | E | 5 | 11 | 未賣 | 是 |
| K200 | F | 6 | 8 | 已賣 | 是 |
| K200 | F | 8 | 11 | 未賣 | 是 |
| K200 | G | 7 | 11 | 未賣 | 是 |
| K200 | H | 8 | 11 | 未賣 | 是 |
| K200 | I | 9 | 11 | 未賣 | 是 |
| K200 | J | 10 | 11 | 未賣 | 是 |
當然還有一部分票可以賣,就是各個起點站之前的這部分票,可以看做短途票。下面的這部分票務購買和上面的邏輯一樣!
| 車次 | 座位 | 起點站 | 終點站 | 買賣標記 | 站內票 |
| K200 | B | 1 | 2 | 未賣 | 否 |
| K200 | C | 1 | 3 | 未賣 | 否 |
| K200 | D | 1 | 4 | 未賣 | 否 |
| K200 | E | 1 | 5 | 未賣 | 否 |
| K200 | F | 1 | 6 | 未賣 | 否 |
| K200 | G | 1 | 7 | 未賣 | 否 |
| K200 | H | 1 | 8 | 未賣 | 否 |
| K200 | I | 1 | 9 | 未賣 | 否 |
| K200 | J | 1 | 10 | 未賣 | 否 |
以上就是個人的粗略想法,歡迎大家拍磚!
轉載于:https://blog.51cto.com/ginkuing/1384547
總結
以上是生活随笔為你收集整理的关于12306火车票销售的简单思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像处理 matlab实现
- 下一篇: PyVISA使用——用python控制T