解决复发关系的时间复杂性?

时间:2017-02-01 03:20:54

标签: algorithm time-complexity complexity-theory

我正在编写一个家庭作业问题,需要我比较nlogn和下面的重复。正如nlogn是由下面的时间复杂性决定的 | 5 n = 1 --| 2T(n/2) + n n > 1 是低,高还是紧。

cell.layer.transform = CATransform3DMakeScale(0.1, 0.1, 1)
    UIView.animate(withDuration: 0.3, animations: {
        cell.layer.transform = CATransform3DMakeScale(1.05, 1.05, 1)
    },completion: { finished in
        UIView.animate(withDuration: 0.1, animations: {
            cell.layer.transform = CATransform3DMakeScale(1, 1, 1)
        })
    })

我认为2T(n / 2)+ n减少到nlogn,但我不确定如何解决递归关系..

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

简答 - 您可以(并且应该)使用“主定理”来找到此复发的O符号。

Master Theorem是一个解决重现的方便工具,它应该是你的第一个选择,因为你可以快速得到结果。您可以使用此exercise

进行动手操作

答案 1 :(得分:0)

解决复发问题(我希望我做对了):

2T(n/2) + n
2[2T(n/4) + n/2] + n
2^2*T(n/2^2) + 2n
you find the pattern if you keep on substituting new n
2^k*T(n/(2^k)) + kn
at this point you solve for closed form using the base case then n = 1
so for n/n = 1, we set 2^k = n, so k = logn
sub in k
2^(logn) * T(1) + (logn) * n

note that 2^logn = n with base 2 and T(1) = 5 for the base case
so we obtain 5n + nlogn
5n + nlogn is just O(nlogn)

由于我们都有 O(nlogn),因此它是一个紧密的或大的Theta。

或者,您也可以使用主定理来轻松地推导出复杂性。如果你已经学会了。

a = 2
b = 2
c = 1
上面

满足案例2,即Θ(nlogn),请参考wiki https://en.wikipedia.org/wiki/Master_theorem