Time complexity 递归查找最大值的时间复杂度是多少

Time complexity 递归查找最大值的时间复杂度是多少,time-complexity,Time Complexity,我只是想确定我走的方向是正确的。我想通过递归拆分数组来找到它的最大值,并找到每个单独数组的最大值。因为我要拆分它,它将是2*T(n/2)。因为我必须在最后对这两个数组进行比较,所以我有T(1)。 那么我的循环关系是这样的: T={2*T(n/2)+1,当n>=2时;T(1),当n=1时 因此我的复杂性是θ(nlgn)?不,不……每个递归都需要O(1)个时间 有多少人 有N片叶子,所以你知道它至少是O(N) 你需要比较多少才能找到绝对最大值?那就是O(log(N)) 将它们相加,不要相乘。O(N+

我只是想确定我走的方向是正确的。我想通过递归拆分数组来找到它的最大值,并找到每个单独数组的最大值。因为我要拆分它,它将是2*T(n/2)。因为我必须在最后对这两个数组进行比较,所以我有T(1)。 那么我的循环关系是这样的:

T={2*T(n/2)+1,当n>=2时;T(1),当n=1时

因此我的复杂性是θ(nlgn)?

不,不……每个递归都需要O(1)个时间

有多少人

有N片叶子,所以你知道它至少是O(N)

你需要比较多少才能找到绝对最大值?那就是O(log(N))


将它们相加,不要相乘。O(N+log(N))是您的时间复杂性。

您编写的公式似乎是正确的,但您的分析并不完美

T = 2*T(n/2) + 1 = 2*(2*T(n/4) + 1) + 1 = ...
对于第i次迭代,您将获得:

Ti(n) = 2^i*T(n/2^i) + i
现在你想知道的是,对于哪个i,n/2^i等于1(或者是任何常数,如果你愿意的话),那么你达到了n=1的结束条件。 这就是n/2^I=1->I=Log2(n)的解。把它放在Ti的方程中,你会得到:

TI(n) = 2^log2(n)*T(n/2^log2(n)) + log2(n) = n*1+log2(n) = n + log2(n)

得到T(n)=O(n+log2(n)(就像@bdares说的)=O(n)(就像@bdares说的)

哦,我明白了。我有点困惑,因为它看起来类似于合并排序。递归关系也是对的还是错的?呃……我对此很模糊,但它看起来是对的。每个级别将添加1,然后2,然后4,然后8,依此类推……所以我错了。每个步骤需要1+2+4+8+…+2^log(n)时间,因此需要O(2*n)时间,也就是O(n)时间。顺便说一句,和O(n+log(n))一样,O(n+log(n))也是O(n),但第一个解释是错误的。写O(n+log(n))正常吗?似乎在任何情况下,O(n)都足够了。事实上,为什么要这样做呢?我觉得写O(n+log(n)),虽然没有错,但很愚蠢。我们不写O(n^2+n)对于Bubblesort。我遗漏了什么吗?如果你只是为了说明的目的而使用它,好吧;我想这对我来说有点奇怪,没有看到最后一步被执行……所以如果是这样的话,就把这当作是对风格的批评,而不是对内容的批评。@b战神你是对的。我应该添加最后一步。我避免跳过(n+log(n))为了避免混淆,我在解释这一点时会添加第三部分,但我也应该确保添加最后一部分。