赛车拼图

时间:2010-11-02 06:08:46

标签: algorithm puzzle

你能不能帮我解决这个难题,我无法找到一个好的答案!!

有49辆车以独特的速度比赛。还有一条赛道,最多可以有7辆赛车参赛。我们需要找到该组中第25快的汽车。我们没有秒表来衡量时间(所以我们只能测量每辆车的相对速度,而不是在比赛中的其他6辆车)。什么是最少的比赛数量?

6 个答案:

答案 0 :(得分:10)

遵循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辆车重复这个过程。

答案 1 :(得分:10)

我的解决方案只需要17场比赛。

首先,让我解释一个需要32场比赛的简单解决方案。将赛车分为7组7人,每组比赛(7场比赛)。重复25次:从每组中挑选剩余最快的车并将其输入比赛,并将获胜者(25场比赛)放在一边。 25场比赛中的第一场确定了最快的整体赛车(#1),第二场比赛决定了#2,依此类推。

现在只有17场比赛的解决方案:

我们的策略是首先确定24辆最快的汽车(让我们称这些汽车“快速”)。然后我们会发现其余的最快(#25)。

随机将赛车放置在7x7网格上,每场比赛(7场比赛)。 然后,从每场比赛(第8场比赛)中争夺第3名选手,并按第3名选手的速度对比赛进行排序。

所以,经过8场比赛,我们有了这个:

enter image description here

每个网格单元代表一辆汽车。箭头指向更快的汽车。请注意,箭头是可传递的。

我们已经确定了8辆“快速”汽车:

enter image description here

我们怎么知道他们很快?看看蓝色的'x'。只有23辆车可能比它快(那些不在右下方的5x5)。所以,它肯定是“快速的”。您可以为其他x验证这一点。

我们已经确定了24辆“快速”汽车中的8辆。让我们从未来的考虑中删除这8个。我们现在正在寻找剩余车辆中最快的16辆。我们的七个小组的大小分别为4,4,5,7,7,7和7.(对于图表,每当我们移除一辆汽车时,让我们将剩余的汽车向左滑动。)

让我们比赛每组剩下第二快的赛车,并相应排序(第9场比赛)。和以前一样,我们可以确定4辆车当然是最快的16辆(即“快速”):

enter image description here

我在被移走的汽车所在的牢房中着色,但这还没有效果 我们已经确定了12辆“快速”汽车。删除“快速”汽车,我们寻找剩余汽车中最快的12辆。我们的团体规模在2到7之间。 让我们比赛每组剩下第二快的赛车,并相应排序(第10场比赛)。我们确定了12辆车中最快的12辆(即“快速”):

enter image description here (剩下10辆“快速”汽车。)

我们可以再重复上一步(第11和第12场比赛)。每次我们再删除2辆车。但是,请注意,行/组中可能包含0或1个汽车。如果它有一辆车,我们比赛那辆车而不是“剩下的第二快车”。如果那辆车获胜,我们知道它是“快速”的,以及下一个最快的第二名车。无论如何,我们确定了2辆“快速”的汽车。 (剩下6辆“快速”汽车。)

经过12场比赛,我们确定并拆除了18辆“快速”赛车。我们需要确定剩余的6辆“快速”汽车。

现在让我们简单地比赛每组中最快剩余的赛车(第13场比赛),并相应地对行进行排序。获胜者是“快速”。 5离开。

在最后一场比赛之后,只有2辆车可能是剩下最快的车。蓝色的:

enter image description here

此外,剩余的第二快车辆是蓝色'o'或绿色'o'。让我们参加这5辆赛车比赛(第14场比赛),前两名选手肯定是“快速”。 3离开。

让我们重复最后两步/比赛来确定最后3辆快速赛车(第15和第16场比赛)。

所以,我们确定了24辆“快速”汽车。剩余最快的汽车必须是第25快的。我们可以通过简单地在每排/每组(第17场比赛)赛车中找到这辆车。

答案 2 :(得分:7)

答案 3 :(得分:6)

http://www.sureinterview.com/shwqst/1062001

第一轮

  1. (7场比赛)将赛车分成7组并在每组内获得订单。
  2. (1场比赛)拿下7位中位数并获得订单。找出中位数的中位数(表示为o)。在下面的示例中,它是34。
  3. (3场比赛)找出中位数的中位数。从左下角(25~33)和右上角(13~21)取6个元素并与o(34)比赛。在3轮之后,我们知道整个集合中的中位数中位数。最好的情况是o是全球中位数(第25快)。最糟糕的情况是o是第16或第34快。
  4. 这个例子显示了一个可能的最坏情况。

    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
    

    第二轮

    我们希望以二分搜索方式找到其他中位数的等级。

    1. (3场比赛)选择小于34的中位数,即12.对着左下角和右上角的赛车进行比赛。经过3场比赛,我们知道它的排名是12。
    2. 现在,这两个中位数之间的差距最多为21,如本例所示。

      第三轮

      如下重新排列21辆汽车(&gt; 12和&lt; 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
      

      每行仍然是排序的。

      1. (1比赛)再次找出中位数的中位数,即23。
      2. (1比赛)查找其排名。在这一步之后,我们知道上一步中的汽车肯定排在第23位。
      3. (1 race)类似于二元搜索,检查另一个中位数的等级,29。
      4. (1场比赛)将所有赛车分类在23~29之间(独家)。找到了第25辆最快的汽车。
      5. 因此,最多需要18场比赛才能获得第25快的赛车。

答案 4 :(得分:0)

你不能通过确定汽车的确切位置来迭代划分游泳池吗?

随机挑选一辆车来转动 穿过其他48辆汽车中的每一辆,以6人为一组对着枢轴车进行比赛 你现在知道了枢轴车的确切位置。

现在在您知道的部分中包含位置25的部分上运行相同的过程。如果剩余分区中的元素少于7个,则很容易确定。

最坏情况下的表现真的很可怕,但可以通过半智能的方式选择连续的枢轴来缓解。

答案 5 :(得分:0)

你总能在8场比赛中解决它...... 让我们把一辆Pivot Car称为Car1并在8场比赛中与其他所有赛车比赛,并将其他赛车的相对速度与Car1相提并论。 让我们说结果如下:读车#(相对车速为Car1)


比赛1:Car1-(0),Car2 - (+ 10),Car3(+5),Car4(+7),Car5(-3),Car6(-4),Car7(+1)

比赛2:Car1-(0),Car8 - (+ 10),Car9(+5),Car10(+7),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(-11),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)

由于Car1是枢轴车,并且每辆赛车的速度在所有比赛中都是一致的,我们可以将所有结果分组以收集。

如果你对相对速度(wrt car1)进行排序,你可以找到第25快的车。