数学吧 关注:876,426贴子:8,691,476

关于一个排序问题求助

只看楼主收藏回复

假定现在有64支队伍,需要通过比赛确定他们的名次
已知队伍之间不存在类似石头剪刀布这样的克制关系,即若a>b,b>c,那么a一定大于c
请问至少需要多少场比赛才能把他们的名次一一确定?怎么安排赛程?


IP属地:江西来自Android客户端1楼2024-07-22 21:06回复
    按照这样逻辑,如果A队赢了B队,B对赢C队,但是A队输了C队,A、B、C三队要如何排列呢?


    IP属地:广东来自Android客户端2楼2024-07-22 21:22
    收起回复
      猜你想搜:快速排序


      IP属地:美国来自Android客户端3楼2024-07-22 21:40
      收起回复
        只能想到暴力解法,随便取一队比63场,最差情况取32胜31负,32胜队里取一队比31场,同理31负队里比30场,依此类推,场数加起来就行63 31 30 15 14 14 14 7 6 6 6 6 6 6 6 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1


        IP属地:山东5楼2024-07-23 11:19
        收起回复
          归并排序 堆排序 貌似是在最差情况下保证O(NlogN)的鉴于实际意义,可以不考虑空间复杂度


          IP属地:上海来自Android客户端7楼2024-07-23 12:24
          收起回复
            n=4,最坏情况比较了5次。
            我没学过算法,具体的名词不是很懂,但大概就是归并排序吧


            IP属地:上海来自Android客户端8楼2024-07-23 13:00
            收起回复
              归并排序呗


              IP属地:湖北来自Android客户端9楼2024-07-23 13:07
              回复
                有个复杂度是nlogn排序被称作内省排序,先用快排,快排处理到一个固定次数后使用堆排序,好像是目前C++库函数sort的实现方式


                IP属地:山东来自Android客户端10楼2024-07-23 23:27
                回复
                  理论至少63场,第一场明确2队信息,之后每场明确1队信息
                  直接两个一比,每次筛一半,刚好63场


                  IP属地:湖北11楼2024-07-24 08:49
                  回复
                    f(m*2^{n+1})=m*2^n +2f(m*2^n)。于是f(m*2^n)=(f(m)+n)*2^{n-1}。f(64)=(f(1)+6)*2^5=192。


                    IP属地:陕西来自Android客户端12楼2024-07-24 11:51
                    回复
                      至少63,因为有63个小符号,少一个也不行


                      IP属地:日本来自iPhone客户端13楼2024-07-24 12:08
                      回复
                        这么多说63的,怕是题都没读懂哦
                        3个队就需要3场
                        4个队需要5场
                        64个队怎么也不可能少于64


                        IP属地:贵州来自Android客户端14楼2024-07-25 08:42
                        收起回复
                          先排2个再用二分法排第三个,再用二分法排第四个
                          总共要排n个人,每个人最多试log n次,nlogn的算法就有了


                          IP属地:上海来自Android客户端15楼2024-07-25 20:45
                          回复
                            2的n次方减一种。只有1个队,不用比,2个队比一场,四个队1和2比,三和四比,然后2再和3比是三场。八个队,12,34,56,78,23,45,67,七次。同理。因为是要至少,求最小次数,理想状态状态就是实力挨着的先提,共计队伍数的一半场次,然后用输队赢挨着的下个胜队。


                            IP属地:北京来自Android客户端16楼2024-07-26 01:27
                            回复
                              脑子抽了,至少就是求最大场次。以1为最强,64为最弱,64需要踢六十三次证明自己最弱,63需要踢六十二次证明自己倒数第二。也就是1+2+3一直到63,首项加末项乘以项数除以二,也就是64*63/2=2016


                              IP属地:北京来自Android客户端17楼2024-07-26 01:33
                              收起回复