T(n) = T(n/10) + T(an) + n, how to solve this?

混江龙づ霸主 提交于 2021-01-20 11:21:06

问题


Update: I'm still looking for a solution without using something from outside sources.

Given: T(n) = T(n/10) + T(an) + n for some a, and that: T(n) = 1 if n < 10, I want to check if the following is possible (for some a values, and I want to find the smallest possible a):

For every c > 0 there is n0 > 0 such that for every n > n0, T(n) >= c * n

I tried to open the function declaration step by step but it got really complicated and I got stuck since I see no advancement at all.

Here is what I did: (Sorry for adding an image, that's because I wrote a lot on word and I cant paste it as text)

Any help please?

enter image description here


回答1:


Invoking Akra–Bazzi, g(n) = n¹, so the critical exponent is p = 1, so we want (1/10)¹ + a¹ = 1, hence a = 9/10.

Intuitively, this is like the mergesort recurrence: with linear overhead at each call, if we don't reduce the total size of the subproblems, we'll end up with an extra log in the running time (which will overtake any constant c).




回答2:


Requirement:

For every c > 0 there is n0 > 0 such that for every n > n0, T(n) >= c*n

By substituting the recurrence in the inequality and solving for a, you will get:

T(n) >= c*n

(c*n/10) + (c*a*n) + n >= c*n 

a >= 0.9 - (1/c)

Since our desired outcome is for all c (treat c as infinity), we get a >= 0.9. Therefore, smallest value of a is 0.9 which will satisfy T(n) >= c*n for all c.




回答3:


Another perspective: draw a recursion tree and count the work done per level. The work done in each layer of the tree will be (1/10 + a) as much as the work of the level above it. (Do you see why?)

If (1/10 + a) < 1, this means the work per level is decaying geometrically, so the total work done will sum to some constant multiple of n (whose leading coefficient depends on a). If (1 / 10 + a) ≥ 1, then the work done per level stays the same or grows from one level to the next, so the total work done now depends (at least) on the number of layers in the tree, which is Θ(log n) because the subproblems sizes are dropping by a constant from one layer to the next and that can’t happen more than Θ(log n) times. So once (1 / 10 + a) = 1 your runtime suddenly is Ω(n log n) = ω(n).

(This is basically the reasoning behind the Master Theorem, just applied to non-uniform subproblems sizes, which is where the Akra-Bazzi theorem comes from.)



来源:https://stackoverflow.com/questions/64695098/tn-tn-10-tan-n-how-to-solve-this

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!