64匹马8个跑道分多少次可以排出速度快的前四匹

  • 如果计时的话,场数最少,即分八组,跑一轮按时间成绩来排那么就是八场
  • 如果不计时且排名没有并列,
  • 假设,有一棵未排序的树T,其根节点下有64个叶子节点其deep为2,现在每次可取8个节点进行排序
  • 第一步:左从往右取下8个叶子节点排序,那么排完后该八个节点组成按从大到小一颗八层的子树,挂到根节点最左边位置,因为剩下的叶子节点和该子树为排序,所以是并列的关系
  • 第二步:继续从左往右取下8个节点,此时取下的是左1节点的为根节点的子树A和7个叶子节点,参与排序的为A树的根节点,排序后,可按此排序的最大节点为根节点的新的子树B,子树A根据其根节点A在B中的位置合并到子树B上。,然后树B挂回根节点左1位置,
  • 重复步骤,直到树T的第一层的节点数为1,那么继续在树的第二层执行以上重复步骤,直达树T的1,2,3,4层节点数都为1,那么则选出了速度前4的四匹马。

  • 由此可看出:当每次生成的子树的0,1,2,3,层都只有一个节点时,那么只要迭代完树T的第一层,即可得出结果,表现在赛场上的是上一轮的第一名在下一次排名前四名以外。然后可算出场数为,(64-8)/7 +1 = 9
  • 排出前四的最慢情况为:每次生成的子树的层数最少,导致重复的层数会增多。即比赛的场次增多。表现在赛场上的是上一轮的第一名在下一次排名中也是排名第一,然后可算出常数为:
      • 树T第一层 9场
      • 树T第二层,9个元素,最少要两场,第一场生成的子树只有一种。应为所有的子树都是相同的。此时共有 10场
        •  比完第一层,树T的第二层只有两个节点,那么可以选树T的第三层 3个节点,还是不够,第四层 4个节点。2 + 3+3 =8个节点。此时共11场
        •  那么则完成了 树的2,3层
        •    按最坏的情况,此时第四层还有,3个节点,再比一次,则决出第四层,此时共12场
  • 按上述步骤:可得出64匹马的每匹马的排序。最快为每棵子树的层最大,即每次的上一次第一名,是下一次的最后一名,共9场
      •     

 
posted @ 2019-08-28 11:23  人生如妄亦真  阅读(2416)  评论(0编辑  收藏  举报