You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slowsort算法时间复杂度求解:递推式T(n)=2T(n/2)+T(n-1)分析

Slowsort算法的时间复杂度分析

首先,你推导的递推式 T(n) = 2T(n/2) + T(n-1) + O(1) 完全正确——对应你提供的Python实现:

def _slowsort(a, i, j):
    """in-place sorts the integers in the array
    spanning indexes [i, j].
    """
    if i >= j:
        return

    m = (i + j) // 2

    _slowsort(a, i, m)
    _slowsort(a, m + 1, j)

    if a[m] > a[j]:
        a[m], a[j] = a[j], a[m]

    _slowsort(a, i, j - 1)


def slowsort(a):
    """in-place sorts the array `a` using Slowsort.
    """
    _slowsort(a, 0, len(a) - 1)

处理长度为n的数组时,算法会递归排序两个长度约为n/2的子数组,交换元素后再递归排序长度为n-1的子数组,常数时间的交换操作对应递推式中的O(1)项。

下面是对该递推式的详细分析:

下界推导

Slowsort的时间复杂度增长远快于多项式,我们可以通过两步推导下界:

  1. 宽松下界:由于T(n)是单调递增函数(规模越大,计算量越大),因此T(n-1) ≥ T(n/2),代入递推式得:
    T(n) ≥ 2T(n/2) + T(n/2) = 3T(n/2)
    
    展开后可得:
    T(n) ≥ 3^log₂n * T(1) = n^log₂3 * T(1) ≈ n^1.58 * T(1)
    
    这只是一个最基础的下界,实际增长速度要快得多。
  2. 精确下界:通过数学归纳法可证明更紧的下界为 Ω(n^log n):
    • 假设对于所有k < n,T(k) ≥ C*k^log k(C为常数)
    • 代入递推式后,可验证当n足够大时,T(n) ≥ C*n^log n成立。

上界推导

同样用数学归纳法证明上界:

  • 假设对于所有k < n,T(k) ≤ C*k^log k(C为常数)
  • 代入递推式:
    T(n) = 2T(n/2) + T(n-1) + O(1)
    ≤ 2*C*(n/2)^log(n/2) + C*(n-1)^log(n-1) + O(1)
    
  • 化简后可见,当n足够大时,右边的项会被Cn^log n主导,因此T(n) ≤ Cn^log n,即上界为 O(n^log n)。

最终结论

结合上下界分析,Slowsort算法的时间复杂度为 Θ(n^log n)(n的对数次方级别)。这种复杂度远高于常见的比较排序算法(如快速排序O(n log n)、冒泡排序O(n²)),是一种故意设计的低效排序算法,也正是它得名"Slowsort"的原因。

内容的提问来源于stack exchange,提问作者Shudhesh Velusamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:07:49