Data structures 递归排序函数分析

Data structures 递归排序函数分析,data-structures,time-complexity,pseudocode,Data Structures,Time Complexity,Pseudocode,关于数据结构课程中的问题,需要一些帮助: 我得到了mergesort的递归函数(伪代码): 合并排序1/3(A、p、r) 如果p

关于数据结构课程中的问题,需要一些帮助: 我得到了mergesort的递归函数(伪代码):

合并排序1/3(A、p、r) 如果p 以下是问题:

  • 设T(n)为Mergesort _1/3的最坏运行时间。编写T(n)的递归函数。给一个简短的解释
  • 证明T(n)=Ω(nlogn)

  • 经典mergesort的要点是以下递归:

    • 将无序列表一分为二。 它足以计算部分列表的极限偏移量
    • 将合并排序应用于每个部分列表。
      在此步骤之后,将对部分列表进行排序
    • 通过按各自的顺序检查两个列表的元素,从列表中键入并在列表中与较小的元素一起前进,合并已排序的部分列表
    TC(n)
    成为经典合并排序的时间复杂性。上述步骤分别采取
    O(1)
    (*)、
    2*O(TC(ceil(n/2)))
    O(n)
    。这就产生了递归
    TC(n)=cc_0+cc_1*n+2*TC(cel(n/2))

    考虑一下广义的mergesort,其中列表被不均匀地分割,尽管总是具有相同的比率。拆分和合并的复杂度保持不变,这使得广义合并排序的递归
    TG(n)=ca_0+ca_1*n+TG(1/a*n+1)+TG((a-1)/a*n+1))
    (使用
    TG(x+1)
    而不是
    TG(ceil(x))
    ca_0
    ca_1
    是隐藏在
    O(
    中的常量notation;
    a=3
    用于
    mergesort\u 1/3

    可以使用以下方法解决此重复问题。 为此,需要将重复性编写为

    TG(x) = g(x) + \sum_i=1..k ( a_i * TG(b_i * x + h_i(x) ) ; x >= x_0.
    

    a_i, b_i const.
    a_i > 0
    0 < b_i < 1
    |g(x)| = O(x^c); c const.
    |h(x)| = O(x / (log(x))^2)
    
    Akra-Bazzi定理要求在
    \sum_i=1..k(a_i*(b_i)^p)=1
    中找到指数
    p
    。那么,以下观点成立:

    TG(x) = Θ ( x^p \integral_(1, x) ( g(u) / (u^(p+1)) du ) )
    
    具体来说,

        a_1 * b_1^p + a_2 * b_2^p = 1
     => (1/a)^p + ((a-1)/a)^p     = 1
    <=> p = 1
    

    (*)严格来说,这是不正确的,因为二进制表示和内存访问的基本算法是
    O(logn)
    。然而,这对复杂性没有影响。

    经典合并排序的要点是以下递归:

    • 将无序列表一分为二。 它足以计算部分列表的极限偏移量
    • 将合并排序应用于每个部分列表。
      在此步骤之后,将对部分列表进行排序
    • 通过按各自的顺序检查两个列表的元素,从列表中键入并在列表中与较小的元素一起前进,合并已排序的部分列表
    TC(n)
    成为经典合并排序的时间复杂性。上述步骤分别采取
    O(1)
    (*)、
    2*O(TC(ceil(n/2)))
    O(n)
    。这就产生了递归
    TC(n)=cc_0+cc_1*n+2*TC(cel(n/2))

    考虑一下广义的mergesort,其中列表被不均匀地分割,尽管总是具有相同的比率。拆分和合并的复杂度保持不变,这使得广义合并排序的递归
    TG(n)=ca_0+ca_1*n+TG(1/a*n+1)+TG((a-1)/a*n+1))
    (使用
    TG(x+1)
    而不是
    TG(ceil(x))
    ca_0
    ca_1
    是隐藏在
    O(
    中的常量notation;
    a=3
    用于
    mergesort\u 1/3

    可以使用以下方法解决此重复问题。 为此,需要将重复性编写为

    TG(x) = g(x) + \sum_i=1..k ( a_i * TG(b_i * x + h_i(x) ) ; x >= x_0.
    

    a_i, b_i const.
    a_i > 0
    0 < b_i < 1
    |g(x)| = O(x^c); c const.
    |h(x)| = O(x / (log(x))^2)
    
    Akra-Bazzi定理要求在
    \sum_i=1..k(a_i*(b_i)^p)=1
    中找到指数
    p
    。那么,以下观点成立:

    TG(x) = Θ ( x^p \integral_(1, x) ( g(u) / (u^(p+1)) du ) )
    
    具体来说,

        a_1 * b_1^p + a_2 * b_2^p = 1
     => (1/a)^p + ((a-1)/a)^p     = 1
    <=> p = 1
    

    (*)严格来说,这是不正确的,因为二进制表示和内存访问的基本算法是
    O(logn)
    。但是,这对
    Θ(n log n)
    复杂性没有影响。

    这种合并排序将数据分成三个大小相等的块,而不是两个块。因此,您将一个大小为n的问题减少为三个大小为n/3的问题。此外,在合并时,您必须遍历所有三个n/3大小的排序块,这将导致遍历总共n个元素。因此,重现期可以写成:

    • T(n)=3t(n/3)+O(n)
    :这里a=3,b=3,c=1。Logba=Log33=1=c


    因此,在第二种情况下,递归将下降,T(n)=Θ(nc*Log(n))=Θ(n*Log(n))。

    此合并排序将数据划分为三个大小相等的块。因此,您将一个大小为n的问题减少为三个大小为n/3的问题。此外,在合并时,您必须遍历所有三个n/3大小的排序块,这将导致遍历总共n个元素。因此,重现期可以写成:

    • T(n)=3t(n/3)+O(n)
    :这里a=3,b=3,c=1。Logba=Log33=1=c

    因此,在第二种情况下,递归将下降,T(n)=Θ(nc*Log(n))=Θ(n*Log(n))