本文主要是介绍跑马问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)跑马问题
(1.1)问题
有25匹马和一个5个赛道的马场,每场比赛可以决出5匹马的排名,假设每匹马发挥稳定,且不会出现名次相同的情况。问:如果要知道25匹马中跑得最快的马,需要几场比赛?如果需要知道跑得第二快的马,需要几场比赛?第三快的呢?
(1.2)分析
-
递增矩阵解法
首先将25匹马分5组比赛5次,可以得到各组内的排名。将5个第一名再赛一次,就可以知道25匹马中最快的马。将最快的马那组的第二名替换掉第一名,再赛一次,就可以知道第二快的马是谁。
根据赛马的各组名次,可以构建出赛马的递增矩阵,其中每一列代表一个分组,从上至下为从快到慢。
根据该矩阵可以使用贪心算法的思想,很快的选出最快的3匹马。
-
第一快的马
首先可以对第一行的马进行比赛,选出最快的马,就为所有马中最快的马。这里我们假设为左上角的a1。对于第一行的马的比赛,我们假设比赛结果为a1>b1>c1>d1>e1
-
第二快的马
由第一次比赛的结果,可知,第二快的马会在b1和a2中选出,因为b1此时是以其为左上角元素的矩阵的最大值,而a2是其所在列的最大值,因此选两者进行比赛,可以得到结果。
-
第三快的马
-
第二快的马为b1
此时根据步骤二的思路,分别选取此时各行各列的最大值。对于第一列此时可选的最大值为a2,对于第二列,此时可选的最大值为b2,对于第三列及以后,因为c1此时为其中的最大值,所以为c1。
因此此时对a2、b2、c1进行比较可以得到第三快的马。
-
第二快的马为a2
此时可选的最大值为第一列的a3,以及后四列的最大值b1,所以只要比较a3与b1就可以得到第三快的马。
-
-
总结
第一快需要6场、第二快需要7场、第三块需要8场
------------------------------------------
(2)跑马测试
- 1)程序启动的时候拉取“api.dianping.com”对应的所有的IP列表;
- 2)对所有IP进行跑马测试,找到速度最快的IP(后续所有的HTTPS请求都将域名更换为跑马最快的IP即可)。
IP直连方案有下面几大优势:
- 1)摒弃了系统DNS,减少外界干扰,摆脱DNS劫持困扰;
- 2)自建DNS更新时机可以控制;
- 3)IP列表更换方便。
这篇关于跑马问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!