你能幫我解決這個難題,我無法找到一個很好的答案!賽車拼圖
有49輛車以獨特的速度競賽。另外還有一個賽道,最多可以有7輛賽車一起參賽。我們需要找到組中第25快的賽車。我們沒有秒錶來衡量時間(所以我們只能測量每輛賽車與其他6輛賽車的相對速度)。什麼是最少的比賽將需要?
你能幫我解決這個難題,我無法找到一個很好的答案!賽車拼圖
有49輛車以獨特的速度競賽。另外還有一個賽道,最多可以有7輛賽車一起參賽。我們需要找到組中第25快的賽車。我們沒有秒錶來衡量時間(所以我們只能測量每輛賽車與其他6輛賽車的相對速度)。什麼是最少的比賽將需要?
我無法找到這個算法的應用程序到我的問題;因爲我的輸入集並非全部49輛車同時運行(但我只能在同一時間只能跑7輛車並知道它們的相對位置);如果你能詳細說明,這將會有所幫助。 – Santhosh 2010-11-02 09:44:07
找到「中位數算符」算法,並將數字5替換爲文本中的數字7。 – Dialecticus 2010-11-02 10:17:04
中位數中位數不適用於第25輛最快的賽車不是7車組中第4快的情況。 – 2010-11-04 10:03:32
繼Dialecticus一的靈感。分成7個隨機組,然後比賽每組,然後比賽這些組的中位數。這輛車成爲樞軸,我們已經直接或間接地知道它與其他30輛汽車的關係(這是中位數的一個屬性)。所以把它放在resp。其他18場比賽我們需要參加3場比賽,包括主場比賽。在轉動之後,我們最多需要緩行33輛車。繼續。我結束了29場比賽。即使你認爲需要完整的排序,但不是,在17場比賽中有一個下限(真正的下限會更低),這比29小得多。所以我懷疑這不是正確的答案,但由於這一直缺乏任何解決方案,這裏是一個次優的。如果你看看分揀網絡的研究(這個問題一次只限於兩輛車),尋找最佳網絡是困難的,只有非常小的尺寸才能知道最佳網絡,絕對不超過49個。我不知道任何有關7路比較器網絡的研究。
也許一個例子可以提供幫助。比方說,從最慢到最快的車號,並以7x7矩陣排列(任意,因爲我們不知道速度,直到我們比賽)。
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 34 25 45 43 26 21 13
[2,] 11 24 2 40 14 30 32
[3,] 27 19 29 42 4 17 46
[4,] 15 10 39 33 1 9 5
[5,] 28 18 41 8 23 20 6
[6,] 16 3 38 7 12 22 36
[7,] 31 44 48 35 49 37 47
然後讓你追我趕列並進行排序根據比賽的結果:根據結果
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 11 3 2 7 1 9 5
[2,] 15 10 29 8 4 17 6
[3,] 16 18 38 33 12 20 13
[4,] 27 19 39 35 14 21 32
[5,] 28 24 41 40 23 22 36
[6,] 31 25 45 42 26 30 46
[7,] 34 44 48 43 49 37 47
現在,讓我們的比賽列#4(中位數),並重新排列列
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 3 9 11 5 7 2
[2,] 4 10 17 15 6 8 29
[3,] 12 18 20 16 13 33 38
[4,] 14 19 21 27 32 35 39
[5,] 23 24 22 28 36 40 41
[6,] 26 25 30 31 46 42 45
[7,] 49 44 37 34 47 43 48
現在觀察到,中位數的中值(元素[4,4])比上述任何車比低於任何汽車和右(這是中位數的中值的一個屬性)更快和左,慢。對於其他車型(左下角和右上角),我們不知道,所以我們需要一次對抗[4,4]和6號賽車(3場比賽)。現在我們觀察到26輛車比[4,4]慢,因此中位數必須是其中的一輛。無需進一步比賽任何其他人。現在用這26輛車重複這個過程。
這個解決方案的問題在於,即使經過8次比較,您仍然不知道中位數在集合中位置的中位數......因爲您可以安全丟棄的唯一象限是右下角的那個 – 2011-03-06 17:41:00
http://www.sureinterview.com/shwqst/1062001
回合一個
該示例顯示了一種可能的最壞情況。
1 2 3 4 13 14 15 <- group 1
5 6 7 8 16 17 18
9 10 11 12 19 20 21 ...
22 23 24 34 35 36 37
25 26 27 38 39 40 41 <- group 5
28 29 30 42 43 44 45 <- group 6
31 32 33 46 47 48 49 <- group 7
第二輪
我們要找到其他位數的排名在一個二進制搜索。
現在,這兩個中間值之間的差距最多爲21,如本例所示。
第三輪
重新排列21輛(> 12和< 34)如下。
13 14 15 <- group 1
16 17 18
19 20 21 ...
22 23 24
25 26 27 <- group 5
28 29 30 <- group 6
31 32 33 <- group 7
每行仍然排序。
所以最多需要18場比賽才能拿到第25輛最快的賽車。
+1這是正確的。 – mcyalcin 2011-03-07 12:57:38
好方法!雖然,在確定'o'是34後,你會發現中位數'高於'是28位(而不是12位)。你還能在18場比賽中找到25位嗎?沒有更多的邏輯,我認爲你實際上需要21場比賽。 在第2輪中,您提到「我們希望以二進制搜索的方式找到其他中位數的排名」,但是您會發現12個而不是8個。 此外,此算法非常好,但可能不是最佳。這是一個非常有趣的問題! – 2011-03-07 18:41:02
嗯,這種方法的最壞情況其實就像 '1 2 3 21 22 23 24 < - group 1' '4 5 6 26 27 28 29' '7 8 9 30 31 32 33 ...' '10 11 12 34 35 36 37' '13 14 15 38 39 40 41 < - 組5' '16 17 18 42 43 44 45 < - 組6' '19 20 25 46 47 48 49 < - 組7' 請注意,在第一輪(找到34個)後,左下角和右上角也按列逐列排序。這些信息可以幫助減少種族數量。 – SureInterview 2011-03-08 04:27:58
難道你不能通過確定汽車的確切位置來反覆劃分池嗎?
隨機挑選一輛汽車,轉動 跑過其他48輛賽車,以6輛賽車組成的賽車對陣中軸車 您現在知道了轉向車的確切位置。
現在在你知道包含位置25的部分上運行相同的過程。如果剩餘分區中的元素少於7個,則很容易確定。
這種情況的最壞情況是非常可怕的,但可以通過以某種半智能方式選擇連續的樞軸來緩解。
我有一個解決方案,只需要17場比賽。
首先,讓我解釋一個簡單的解決方案,需要32場比賽。將汽車分成7組,每組7人,每組參加比賽(7場比賽)。重複25次:從每組中選出最快的剩餘賽車,並將其輸入比賽,並將優勝者放在一邊(25場比賽)。 25場比賽中的第一場決定最快的整車(#1),第二場比賽決定#2,依此類推。
現在只有17場比賽的解決方案:
我們的策略是首先確定24輛最快的汽車(讓我們稱這些車「迅速」)。然後我們會發現其餘的最快(#25)。
隨機放置在一個7x7格子的汽車,並比賽每一排(7場比賽)。 然後,從每場比賽(第8場比賽)中選出第3名參加比賽的選手,並按第3名選手的速度排序。
於是,經過8場比賽,我們有這樣的:
每個網格代表的汽車。箭頭指向速度更快的汽車。請注意,箭頭是傳遞的。
我們已經能夠識別8 「迅速」 汽車:
我們怎麼知道他們是迅速?看看藍色的'x'。只有23輛車可能比它快(不在右下角的5x5)。所以,這當然是「快速」。您可以驗證其他x的。
我們已經確定了24輛「快速」轎車中的8輛。從未來的考慮中刪除這8個。我們現在正在尋找其餘車中最快的16輛。我們七組的尺寸分別爲4,4,5,7,7,7和7.(對於圖表,每當我們拆下一輛車時,讓我們將剩餘的汽車向左滑動。)
讓我們比賽每組的第二快的剩餘賽車,並相應地排序(第9場比賽)。和以前一樣,我們可以找出4輛汽車這當然是16個最快(即「快速」)中:
我的電池,其中,除去汽車可能是彩色的,但這並沒有影響呢。
我們已經確定了12輛「快速」轎車。除去「快速」汽車,我們尋找其餘汽車中最快的12輛。我們的團隊規模在2到7之間。 讓我們參加每組的第二快的剩餘賽車,並相應地對行進行排序(第10場比賽)。我們確定了2輛它們中的12個發展最快(即「快速」):(10「迅速」汽車保持)
我們可以重複前面的步驟兩次(第11和12場比賽) 。每次我們移除2輛車。但是請注意,行/組可能有0或1輛汽車。如果它有1輛車,我們會比賽,而不是「剩下的第二快」。如果這輛車贏了,我們知道它是「快速」,以及下一個最快的第二名車。無論如何,我們確定2輛「快速」轎車。 (仍然有6輛「快速」汽車。)
在12場比賽之後,我們確定並移除了18輛「快速」賽車。我們需要確定剩餘的6輛「快速」轎車。
現在,讓我們簡單地比賽每組中最快的剩餘賽車(第13場比賽),並相應地對行進行排序。獲勝者是「快速」。還剩5個。
最後一場比賽之後,只有2輛車可能是最快的剩餘賽車。藍色O公司:
此外,第二剩餘最快的車或者是一個藍色的「O」或綠色的「O」。讓我們參加這5輛賽車(第14場比賽),前兩名車手肯定是「快速」。還剩3個。
讓我們重複最後兩步/場比賽,以確定最後的3輛快速汽車(15日和16日的比賽)。
因此,我們已經確定24 「快捷」 的汽車。剩下最快的車必須是第25快。我們可以通過簡單地在每排/組(第17場比賽)中競速最快的賽車來找到這款車。
我非常喜歡它!儘管我無法確定它在任何情況下都能正常工作。有幾個問題:最後7場比賽中,如果頂部排沒有足夠的賽車,你會做什麼?例如,如果一行是空的,或者賽車14和16的賽車數量少於適當的數量?此外,你是如何得到這個解決方案的?從某種意義上來說,這似乎是最理想的,你不會一起比賽兩輛兩輛車,而且你得不到比你需要的更多的信息。但是有沒有證據證明17是下界? – Dunaril 2011-03-10 00:44:01
如果一行是空的,只需從網格中刪除它。在比賽14和16中,如果有些隊員失蹤,只需在比賽中省略。速度最快的兩個仍然會在現在的o中。在找到32場比賽的「簡單解決方案」之後,很明顯我可以做得更好!如果17是最佳的,我會感到震驚。我的三場比賽只識別一輛車。 – 2011-03-10 01:02:08
這看起來很有希望......我不是數學家,但這個問題一直在困擾着我。現在,我將不得不嘗試和腳本,看看它是否工作,以及當:) – Benjol 2011-03-10 06:16:58
你總是可以在8場比賽中解決這個問題...... 讓我們拿一個樞軸車說Car1,然後在8場比賽中與所有其他賽車比賽,並將其他車的相對速度與Car1進行比較。 可以說下面給出結果:讀汽車#(相對速度分享幫助)
賽事1:Car1-(0),CAR2 - (+ 10),的Car3(5),CAR4(+ (0),Car8 - (+ 10),Car9(+5),Car10(+7),Car5(-3),Car6(-4),Car7(+1)
第2場:Car1- ),Car11(-3),Car12(-4),Car13(+1)
第3場:Car1-(0),Car14-(+11),Car15(+4),Car16(+6) ,Car17(-4),Car18(-10),Car19(+2)
第4場:Car1-(0),Car20(+9),Car21(+3),Car22(+5),Car23 (-5),Car24(-1 1),Car25(+3)
第5場:Car1-(0),Car26-(+8),Car27(+2),Car28(+6),Car29(-6),Car30(-12) ),Car31(+4)
第6場:Car1-(0),Car32-(+7),Car33(+1),Car34(+3),Car35(-7),Car36(-13) ,Car37(+5)
第7場:Car1-(0),Car38-(+ 6),Car39(-1),Car40(+2),Car41(-8),Car42(-14), Car43(+6)
第8場:Car1-(0),Car44-(+5),Car45(-2),Car46(+1),Car47(-9),Car48(-15),Car49 (7)
仙ce Car1是轉向車,每輛賽車的速度在所有比賽中都是一致的,我們可以將所有的結果集中在一起。
如果排序的相對速度(WRT CAR1),你可以找出25最快的車。
「我們沒有一個秒錶測量時間」 – 2011-03-28 20:56:38
它不是時候......它的相對速度,你可以樞軸汽車(分享幫助)和其他汽車之間進行測量。這就是爲什麼Car1的相對速度始終爲0,因爲它本身的測量。 – Viv 2011-03-29 17:50:26
的比賽會告訴你每節車廂是否比樞軸車更快或更慢,而不是多少。 (你沒有得到任何數字後面每場比賽後 - 7臺車只是排名) – 2011-03-29 22:33:21
您是要求我們這樣做還是您需要幫助嗎? – BoltClock 2010-11-02 06:10:29
尋求幫助:-) – Santhosh 2010-11-02 06:34:37
您的標籤有誤導性 - 算法,數據結構和您的問題中,您正在要求解答難題。你想要什麼? – pavanred 2010-11-02 06:38:47