2. 總結
3. 更新
64馬8賽道問題常常以以下形式被描述:
現有64匹馬以及8條賽道,現在需要選出跑的最快的4匹馬。有計時的情況十分簡單。64匹馬分8組測試,對每匹馬分別計時。最後統計用時,按用時從少到多排列,取前4名即可。
step1.將64匹馬分成8組,跑8趟,淘汰每組後4名。
step2.將剩餘的32匹馬分4組,跑4趟,淘汰每組後4名。
step3.將剩餘的16匹馬分2組,跑2趟,淘汰每組後4名。
step4.將最後8匹馬編成1組,跑1趟,取前4名即可。
總結:該方法共需跑15趟。思路比較簡單,比較麻煩,還有優化的空間。
step1.將64匹馬分成8組,跑8趟,淘汰每組後4名 【此時已跑:8趟】
編號規則:xy,x=組號,y=組內名次
step2.將每組第一名的馬編成1組,跑1趟,淘汰最後4名所在的組【此時已跑:9趟】
編號規則:xy,x=組間名次,y=組內名次
step3.此時可以確定11號是跑的最快的馬,取出放置一旁。
編號規則:xy,x=組間名次,y=組內名次
從圖中可以看出,組1中越靠近11越快,4組間越靠近組1越快
step4.取位於藍色陰影部分的馬匹,除去41號外的另外8匹編成1組,跑1趟【此時已跑:10趟】
step5.判斷
如果第10趟中位於第三名的馬匹,y位編號》=3,則可說明前三名,外加之前取到的11號,這4匹馬就64匹馬中跑的最快的4匹【此時結束:總趟數10趟】
如果本趟中位於第三名的馬匹,y位編號<3,則需淘汰第10趟中排名第8的馬匹,將41號編入再跑1趟,即可確定64匹馬中跑的最快的4匹【此時結束:總趟數11趟】
step1.將8條賽道均勻分成8等份,即獲取64條子賽道。
step2.將64匹馬分別分配在各個子賽道,同時起跑,取最先到達子賽道終點的4匹馬即為64匹馬中跑的最快的馬【此時結束:總趟數1趟】
該問題要求盡可能充分的利用已知資訊,在該題目中我們可以獲知的資訊分別是:
第一輪8趟中,我們可以知道馬匹的組內排名
第二輪1趟中,我們可以知道馬匹的組間排名
我們可以獲知的控制條件分別是:
馬匹組內排名
,如果組內無法跑進前4,則必無法進入整體的前四。
馬匹組內排名
,如果本組排名相對靠後的馬位於前4,則本組排名在它之前的馬必在前4
馬匹組間排名
,如果本組最快的馬無法跑進前4,則該組剩餘的馬必如法進入整體的前4。
充分利用這些資訊我們即可在用最少的輪次篩選出最快的馬匹
最少9次,該演算法的基本思想為
挑選標桿馬
與待定陣列
,標桿馬參與下一輪比賽,名次高於標桿的馬記入待定陣列
。
當標桿馬落後時重新選舉標桿馬;並將名次在新標桿馬之前的馬匹記入待定陣列。你是對的,在最好的情況下9輪即可完成比賽最好的情況(以第4名為標桿):比如挑選第一組第4名[馬(1,4)]為標桿馬,第一組前三名記入待定陣列
更換標桿馬的情況:下一組時馬(1,4)落出前四,將馬(2,4)選舉為新標桿參與下一組比賽,以此類推
不更換標桿馬的情況:下一組時馬(1,4)仍在前4,則馬(1,4)繼續參加下一輪,以此類推
64匹馬中隨機抽取8匹,且真top4
在這8匹中。這樣該組的第4名
即為真第四名
,比剩餘所有的馬跑的都快。
剩下的8輪中,它必跑第一,也就印證了第一組的前四是真top4
。這是乙個非常巧妙的方法。
但是,我們可以進行一點簡單的組合運算。這4匹馬被分在一組中的排列組合有多少種呢,應當是
c 604
=487635
c^4_=487635
c604=
4876
35即最好情況出現的概率約為2.05×1
0−42.05\times10^
2.05×1
0−4到此我們先按下不談,再來看看最壞的情況:
最壞的情況莫過於每次都要重新選舉標桿。這樣9輪
後在待定陣列中會存留top27
。top27
再次按照此規則進行比賽,13輪
後,待定陣列內會存留top12
,top12
比賽2輪
後選出真top4
,總過程***
。
基於正態分佈,該演算法最後大約穩定在12輪
後選出真top4
,比文中演算法多1輪
當然在你的演算法中也提出了標桿前移
的優化演算法,但在這種情況下無法得出
9輪的最優解,大約會穩定在10至12輪。與上文演算法基本一致。
就我個人而言,我認為應用於生產環境的演算法應當以穩定為大,即最優與最差的差距不應太大。因此我會選擇我在文中闡述的方法應用於生產。
64匹馬,8個賽道,找出前4名最少比賽多少場
最初的想法是最少9次 第一步 先選8匹馬為第一組比一場 第1次 然後將剩餘的56匹馬分為8組,每組7匹 第二步 將第一組比賽的第4名放入第二組,湊齊8匹馬進行比賽 第2次 如果第一組的第4名在第二組跑第一,繼續放入第三組進行比賽 第三步 假設第一組的第4名,在其餘的8組都跑第一,則總共9次可比出前4...
64匹馬,8個賽道,找出前4名最少比賽多少場
第一步 全部馬分8組,各跑一次,然後淘汰掉每組的後四名 8次 第二步 取每組第一名進行一次比賽,然後淘汰最後四名所在組的所有馬 1次 第三步 其實這時候紅色區域的馬也可以淘汰了,紅色區域的馬不可能進入前4名。a1可以直接晉級,因為他是跑的最快的 在以上的兩次比賽過後可以得出,a1 直接晉級,b1比b...
64匹馬,8個賽道,找出跑得最快的4匹馬
全部馬分為8組,每組8匹,每組各跑一次,然後淘汰掉每組的後四名,如下圖 需要比賽8場 取每組第一名進行一次比賽,然後淘汰最後四名所在組的所有馬,如下圖 需要比賽1場 這個時候總冠軍已經誕生,它就是a1,藍色區域 它不需要比賽了 而其他可能跑得最快的三匹馬隻可能是下圖中的黃色區域了 a2,a3,a4,...