【问题标题】:Time complexity of a recursive function where n size reduces randomlyn 大小随机减小的递归函数的时间复杂度
【发布时间】:2017-02-22 02:03:44
【问题描述】:

我创建了以下伪代码,但我不确定如何计算它的复杂度:

(伪代码)

MyFunction(Q, L)
    if (Q = empty) return

    M = empty queue
    NM = empty queue

    M.Enqueue(Q.Dequeue)

    while (Q is not empty)
        pt = Q.Dequeue()
        if (pt.y > M.peek().y) M.Enqueue(pt)
        else NM.Enqueue(pt)

    L.add(M)
    if (NM is not empty) MyFunction(NM, L)

    return L;

MyFunction 接收一个包含 n 个点的集合 Q 和一个列表 L,我们将在其中保存 Q 的 k 个子集 (1

因此,每次递归调用点数都会减少一个整数 x,直到点数为 0。这个整数 x 可以不同于一个递归调用另一个(它可以是 1 和 n 之间的任何值(n是当前的点数))

那么我的算法的复杂度是多少?

我在想我的递归关系会是这样的:

T(0) = 1

T(n) = T(n-x) + an

这是正确的吗?如果是这样,我该如何解决?

【问题讨论】:

    标签: algorithm time-complexity recurrence


    【解决方案1】:

    没有关于Q中点分布的任何信息,我们无法知道它们将如何被分派到MNM队列。

    但是,很容易计算出算法的最坏情况复杂度。为了计算这一点,我们假设在每次递归调用中,Q 中的所有点都将在NM 中结束,除了在进入循环之前添加到M 中的点。有了这个假设,x 在您的递归关系中变为 1。你最终会得到O(n^2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2020-03-09
      • 2017-11-28
      • 2022-11-19
      • 2021-08-30
      • 2018-05-29
      • 2018-08-18
      相关资源
      最近更新 更多