賽馬問題 算法


  • 64匹馬,8個跑道,問最少比賽多少場,可以選出跑得最快的4匹馬
  • Assumptions:每場比賽每個跑道只允許一匹馬,且不存在並列情形

 

問題分析

  • step1:需8場比賽
    • 首先把64匹馬隨機分為8組並標記組別,遍歷組別,比賽8次,並記錄每組賽馬名次(eg:A1>A2>...>A7>A8
    • 首先可直接剔除各組后四名賽馬,剩余64-4*8=32匹賽馬待定

 

  • step2:需1場比賽
    • 選出每組排名第一的賽馬進行一次比賽,記錄結果,不失一般性地,記為:A1>B1>C1>D1>E1>F1>G1>H1
    • 根據這輪比賽結果,首先可以剔除E、F、G、H這四組所有賽馬(因為本組第一都未進入前4),剩余16匹馬

    • 其次可以確定A1就是全場MVP,屬全場N01,剩余15匹馬待定
    • 還可以進一步細化
      • D組2-4名賽馬:D2>D3>D4,不可能是Top4,可剔除這3匹,剩余15-3=12匹賽馬待定
    • C組3-4名賽馬:C3>C4,不可能是Top4,可剔除這2匹,剩余12-2=10匹賽馬待定
      • B組第4名賽馬:B4,也不可能是Top4,可剔除這1匹,剩余10-1=9匹賽馬待定

 

  • step3:需1場or2場比賽
    • 當前剩余待定9匹賽馬:A2>A3>A4,B1>B2>B3,C1>C2,D1
    • 因為可以確定B1>C1>D1,因此挑選:A2>A3>A4,B1>B2>B3,C1>C2( 或者 A2>A3>A4,B1>B2>B3,C1>D1)等8匹馬進行一場比賽,剩余一匹賽馬D1或者C2待定,重點關注C1名次
    • 僅需1場比賽情形
      • 當C1排名第3及以后,則選出本場前3名賽馬,外加大佬A1,即為所求的Top4匹馬
    • 需2場比賽情形
      • 因為已知B1>C1,所以C1本場名次區間為[2,8]
      • 當C1排名第2時,可推知B1排名本場第一,因此A1>B1>C1即為全場Top3匹馬,此時可剔除B1,C1兩匹馬,剩余9-2=7匹馬待定(如下)
        • 本輪上場剩余6匹:A2>A3>A4,B2>B3,C2
        • 未上場1匹:D1
      • 將本場剩余7匹賽馬再進行一場比賽,一決高低,記錄名次,選出本場排名第一的賽馬,加上A1>B1>C1,即為全場Top4匹馬。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM