64匹馬,8條賽道,找出前4名,最少多少場?
好了,邏輯算法問題,考驗邏輯思維能力的時候到了!!
情況分析1:計時賽
根據題目,我們很快發現,這個題目其實是“發散”的,沒有壹堆“條條框框”。
好吧,那我們就“聰明”壹點,假設是“計時賽”!
很好,64匹馬,8條賽道,所以按照時間最快的4匹馬只需要8場比賽~
很明顯,騰訊的大廠不可能這麽沙雕吧?!所以在不排除這種情況的前提下,壹定要考慮“不計時審判”的解決邏輯,這樣更符合“大廠氣質”~
情況分析1:非計時賽
如果不是計時賽,那顯然很復雜,但是越復雜我們越能變聰明,對吧?!
首先,我們利用算法中常用的“分而治之”的思想,將64匹好馬駒分成8組,就A、B、C、D、E、F、G、h。
每組8匹,依次編號:A1,A2,A3,以此類推~
然後,準備工作完成,我們開始放馬跑。
64匹馬,8組,8條賽道。
第壹步(* * *跑8次):8組各跑壹次,保留每組前4(黃色區域),然後淘汰每組後4(藍色區域)。
問題:
妳為什麽在八個組中都淘汰了最後四名?
答:
註意題目,我們只需要跑得最快的前四名,所以每組淘汰後四名,因為前四名絕對不會出現在藍色區域的馬身上!
第二步(* * *跑了1次):取每組的1進行壹場比賽,然後淘汰最後4組的所有馬。
問題:
為什麽每組第1名跑者跑了壹次,第4名跑者淘汰後在組裏?
答:
正如我們所知,在賽馬的第壹步之後,我們已經得到了八個小組的排名。
但是8組,哪組更厲害?
我們不知道,所以需要每組的1跑壹次,得到8組的組外排名!
假設八組第1名跑者跑完,前四名跑者分別是A1、B1、C1、D1。所以按照要求找到最快的四匹馬,而且必須在A、B、C、D,絕對不可能出現在E,因為E、F、G、H中最快的馬,E1、F1、G1、H1,都不在前4,剩下的更不可能!
第三步(邏輯分析,不用跑):經過前兩步比賽,A1可以晉級!因為它已經是64匹馬裏最快的了!!
我們只需要找到剩下的三匹最快的馬!我們挑了馬A1(藍色),沒理它。
灰色地帶的六匹馬可以直接淘汰!!!
為什麽?
仔細聽我說!
懷疑:
為什麽直接淘汰灰色地帶的六匹馬?他們做錯了什麽?
答:
記住,題目要求我們找到最快的四匹馬。經過前兩步(* * *跑了九次),我們知道A1、B1、C1、D1是八組“組外排名”的前四名。同時,A65438,!
但是,64匹馬裏最快的2、3、4暫時找不到了!
分析壹個波:
最快的第二名可能在哪個範圍?
很明顯,只有在A2,或者B1!!!
為什麽不是A3或者B2或者C1?
妳很好!
因為組內最快排名(前四)是A1,A2,A3,A4,組外最快排名(前四)是A1,B1,C1,D1!
所以最快的第二名只能從A2和B1中選!沒有別的選擇了!!
按照這個邏輯,我們可以繼續分析第二名和第四名,可以知道最快的前四名不可能分布在灰色地帶,所以我們淘汰了灰色地帶的六匹馬!
第四步(分類討論):因為A1是最快的第壹名,所以我們挑出來算了!接下來的問題是在A2、A3、A4、B1、B2、B3、C1、C2和D1中找出最快的三匹馬。
重點是:因為只有8條跑道,而我們有9匹馬!
* *所以,我們保留九匹馬中的任何壹匹!**
註意:我們留下的馬可以分為兩類處理:
壹種:馬有明顯比它慢的馬!
第二類:這匹馬沒有明顯慢的馬!
情況壹:離開“頭等”馬!
假設我們離開B1!(C1,B2明顯比它慢)
剩下的八匹馬去跑步!
場景1(運行壹次):
剩下的8匹馬跑完之後,我們發現B2或者C1跑進了前3!在這壹點上,左邊的B1絕對是最快的top 3!因為B1比B2和C1快!!
於是,我們成功地找到了64匹馬中跑得最快的4匹。
場景2(運行兩次):
剩下的8匹馬跑完之後,我們發現B2或者C1沒有跑進前3!
此時只能讓B1,A2,A3,A4再跑壹次,取前三!!
疑惑:為什麽B1,A2,A3,A4又跑了?不是別的?
答:
所以B1用A2,A3,A4運行(註意,為什麽不用C1運行,因為B1比C1快,所以不需要運行!)
而且B1比B2和B3快,不用跑,所以B1用A2,A3,A4跑!
情況壹:離開“二等”馬!
假設我們離開A4!沒有壹匹馬明顯比它慢。
剩下的8匹馬跑壹次,得到壹個名次,然後挑第壹名,剩下的用A4跑。
這樣我們才能拿到最快的前四!!
分析
由此可見,如果我們留下壹種馬,可能會有壹個“最優”的結果,即只需要跑壹次就可以得到結果。
而如果離開第二種馬,就要兩次才能得到結果!!
結果
通過上面的分析,我們再來看題目的要求,我們需要得到“最少多少場?”
第壹步8次。
第二步:1次
第三步是0次
第四步:1或2次
那麽至少8+1+1 = 10次。
壹個看似簡單的問題,背後卻隱藏著如此復雜的邏輯,“大廠風格”毋庸置疑~
聰明的朋友有更好的解決方法嗎?
歡迎分享~ ~!