演算法 跑馬場

2021-08-29 22:58:33 字數 2717 閱讀 8163

**

題目一:對於25匹馬,有乙個賽場,賽場有5個跑道,不使用計時器(也就是每次比賽僅僅得到本次的比賽的順序)。試問最少比多少場才幹選出最快的三匹馬

思路:0)前5場:這個題相對照較簡單,25匹馬至少要所有參加比賽,所以把25匹馬分成5組進行比賽。這樣我們就能夠得到比賽結果例如以下:

1)選總體第1名:如今我們要選總體第一名,可能成為總體第1名的馬匹為:{a1、b2、b3、b4、b5},那麼第6場比賽為[a1。b1。c1,d1。e1]

比賽結果:第6場得到總體第1名

2)選總體第2、3名:依據矩陣關係。可知可能成為總體第2名的馬匹為:{a2、b1},可能成為總體第3名的馬匹為{a2、a3、b1、b2、c1},所以第7場比賽為[a2,b1,a3。b2、c1]

比賽結果:第7場得到總體第2、3名

可能你對上面紅色字型不是特別理解,換種思路來說:

總體前1名可能出現範圍:a1

總體前2名可能出現範圍:a2、b1

總體前4名可能出現範圍:a1、a2、b1

總體前7名可能出現範圍:a1、a2、a3、b1、b2、c1

自己畫一下就能夠知道裡面的規律

題目二:對於25匹馬,有乙個賽場,賽場有5個跑道。不使用計時器(也就是每次比賽僅僅得到本次的比賽的順序),試問最少比多少場才幹選出最快的五匹馬?(第一題是選前三名)

思路一:(簡單的,競標賽排序)

0)和題目一思路一樣,我們須要5場比賽來得到25匹馬的基本順序。

1)開始選馬

第6場:選總體第1名-->參賽馬為[a1,b1,c1,d1,e1]-->如果選出的總體第1名為a1

第7場:第選總體第2名-->參加在為[a2,b1,c1。d1。e1]-->如果選出的總體第1名為b1

第8場:選總體第3名-->參加在為[a2。b2,c1,d1。e1]-->如果選出的總體第1名為a2

第9場:選總體第4名-->參加在為[a3,b2。c1。d1,e1]-->如果選出的總體第1名為c1

第10場:選總體第5名-->參加在為[a3。b2,c2,d1,e1]-->如果選出的總體第1名為c2

第25場:選總體第20、21、22、23、24、25

所以使用競標賽排序思想(替換策略)。選出前5名須要10場比賽

思路二:

再反覆一句:所謂簡單,一般都有些蠻力的味道。

那麼優化後的選馬方案為:

0)前5場仍然是比賽得到5組馬匹的基本序列

1)第6場:參賽馬為[a1。b1,c1,d1,e1](比賽後如果a1>b1>c1>d1>e1)

比賽結果:第6場得到總體第1名a1

2)第7場:我們繼續分析可能為總體第2名的馬為。可能為總體第3名的馬為。

此時我們能夠知道事實上僅僅須要比較[a2。a3,b1,b2,c1]就能夠得到第2、3名了(回憶一下剛才使用簡單替換思想,第6場比賽[a2,b1。c1,d1,e1]。當中d1、e1根本不可能是總體第2名的)

比賽結果:第7場得到總體第2、3名

3)問題來了。第7場得到2、3名。可是不能確定是哪兩匹馬。

所以我門要列舉一下第2、3名可能的情況(一共5種):

a2,a3

a2。b1

b1。a2

b1,b2

b1,b3

3.1) 對於第一種情況:a2,a3

那麼總體第4名可能為:{a4、b1}

假設第4名為a4,總體第5名可能為{a5、b1}

假設第4名為b1。總體第5名可能為{b2、c1}

非常明顯,我們僅僅須要一場比賽(第8場)就能夠確定總體第3,4名,參賽馬為:[a4,b1,a5,b2,c1]

3.2)對於另外一種情況:a2、b1

那麼總體第4名可能為a3、b2、c1

假設總體第4名為a3。總體第5名可能為{a4、b2、c1}

假設總體第4名為b2。總體第5名可能為{a3、b3、c1}

假設總體第4名為c1,總體第5名可能為{a3、b2、c2、d1}

那麼我們要向得到總體第4、5名的馬匹,就須要比較[a3。a4,b2,b3,c1。c2。d1],非常明顯須要2場比賽(第8、9場)才幹分出勝負

剩下的3種情況類似,選出前5匹馬,至少8場,最多9場