我正在编写一个家庭作业问题,需要我比较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,但我不确定如何解决递归关系..
感谢您的帮助。
答案 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