I was looking at this question:
Prove that 100š+5 ā š(šĀ²) (Which is 100š+5 is upper bounded by šĀ²)
š(š) ā¤ šš(š) for all š ā„ š0
so it becomes 100š+5 ā¤ ššĀ²
The answer was:
š0 ā 25.05 (the number where the šĀ² algorithm intercepts the š algorithm) and š = 4 so that when š increases above 25.05 no matter what it will
still prove that 100š+5āššĀ² is true
My question is: how do you derive that š0 = 25.05 and š = 4? Is it a guess and trial method, or is there a proper way to get that particular answer? Or you just gotta start from 1 and work your way up to see if it works?
A good approach to tackle such kind of problems is to first fix the c
let's take 4 in this example
and then all you have to do is figure out n0 using a simple equality
100n + 5 = 4n^2 <=> 4n^2 - 100n - 5 = 0 <=> n = 25.05 or n = -0.05 and here you can remark that they intersect twice in -0.08 and 25.05 and as you want n0 such that after which 100n +5 is always below 4n^2 -0.05 is not the one as 25.05 > -0.05 and in 25.05 they intersect so n0 = 25.05 .
Before fixing c and trying to figure out n0 you could try big numbers for n0 to have an idea whether it's an upper bound or not.
There are infinitely many choices for n0 and c that can be used to prove this bound holds. We need to find n0 and c such that for n >= n0, f(n) <= c * g(n). In your case, we need 100n + 5 <= cn^2. We can rearrange this as follows using basic algebra:
cn^2 - 100n - 5 >= 0
We can use the quadratic formula to find the roots:
n1, n2 = [100 +- sqrt(10000 + 20c)]/2c
Because c is positive we know the sqrt term will be greater than 100 once evaluated and since we are only interested in n > 0 we can discard the smaller of these solutions and focus on this:
n0 = [100 + sqrt(10000 + 20c)]/2c
We can simplify this a bit:
n0 = [100 + sqrt(10000 + 20c)]/2c
= [100 + 2*sqrt(2500 + 5c)]/2c
= [50 + sqrt(2500 + 5c)]/c
At this point, we can choose either a value for c or a value for n0, and solve for the other one. Your example chooses c = 4 and gets the approximate answer n0 ~ 25.05. If we'd prefer to choose n0 directly (say we want n0 = 10) then we calculate as follows:
10 = [50 + sqrt(2500 + 5c)]/c
10c = 50 + sqrt(2500 + 5c)
(10c - 50) = sqrt(2500 + 5c)
(100c^2 - 1000c + 2500) = (2500 + 5c)
100c^2 - 1005c = 0
c(100c - 1005) = 0
c = 0 or c = 1005/100 ~ 10.05
Because the solution c=0 is obviously no good, the solution c ~ 10.05 appears to work for our choice of n0 = 10. You can choose other n0 or c and find the corresponding constant in this way.
Related
6n^4 ā3n^2 +3 is Ī©(n4)
Hello, I need to determine whether this statement is true or false.
Any help is appreciated.
Thank you
I am leaning towards true due to the n^4, however the omega complexity is making me doubt this.
I believe if it was big O it would be a true statement.
f is Omega(g) if there exist constants c and n0 such that for all n > n0, f(n) >= c * g(n). For us, we need to evaluate whether there are constants n0 and c such that 6n^4 - 3n^2 + 3 > cn^4 for all n > n0. If we choose n = 5 we get...
6n^4 - 3n^2 + 3 > 5n^4
n^4 - 3n^2 + 3 > 0
Using the quadratic formula we can find values for n^2 where the LHS equals zero:
n^2 = [-b +- sqrt(b^2 - 4ac)] / 2a
= [3 +- sqrt(9 - 12] / 2
But the discriminant is negative, which means there are no real values of n^2 where the LHS equals 0. This means that the LHS has no roots and never crosses the X-axis; it is either always positive or always negative. We can see which is the case easily by plugging in 0:
0^4 - 30^2 + 3 = 3 > 0
So, with the choice of c=5, our inequality is true for all n; we are free to choose any n0, e.g., n0 = 1 works.
Because there exists a pair c=5 and n0=1 which gives us f(n) = 6n^4 - 3n^2 + 3 > 5n^4 = cg(n) for all n > n0, we can say that f is Omega(g).
Here is an asymptotic notation problem:
Let g(n) = 27n^2 + 18n and let f(n) = 0.5n^2 ā 100. Find positive constants n0, c1 and c2 such that c1f(n) ā¤ g(n) ā¤ c2f(n) for all n ā„ n0.
Is this solving for theta? Do I prove 27n^2 + 18n = Ī©(0.5n^2 ā 100) and then prove (27n^2 + 18n) = O(0.5n^2 ā 100)?
In that case wouldn't c1 and c2 be 1 and 56 respectively, and n0 would be the higher of the two n0 that I find?
There are infinitely many solutions. We just need to fiddle with algebra to find one.
The first thing to note is that both g and f are positive for all nā„15. In particular, g(15) = 6345, f(15) = 12.5. (All smaller values of n make f<0.) This implies n0=15 might work fine as well as any larger value.
Next note g'(n) = 54n + 18 and f'(n) = n.
Since f(15) < g(15) and f'(n) < g'(n) for all n >= 15, choose c1 = 1.
Proof that this is a good choice:
0.5n^2 ā 100 ā¤ 27n^2 + 18n <=> 26.5n^2 + 18n + 100 ā„ 0
...obviously true for all nā„15.
What about c2? First, we want c2*f(n) to grow at least as fast as g: c2f'(n)ā„g'(n), or c2*n ā„ 54n + 18 for n ā„ 15. So choose c2 ā„ 56, which obviously makes this true.
Unfortunately, c2=56 doesn't quite work with n0 = 15. There's the other criterion to meet: c2*f(15)ā„g(15). For that, 56 isn't big enough: 56*f(15) is only 700; g(15) is much bigger.
It turns out by substitution in the relation above and a bit more algebra that c2 = 508 does the trick.
Proof:
27n^2 + 18n ā¤ 508 * (0.5n^2 ā 100)
<=> 27n^2 + 18n ā¤ 254n^2 ā 50800
<=> 227n^2 - 18n - 50800 ā„ 0
At n=15, this is true by simple substitution. For all bigger values of n, note the lhs derivative 454n - 18 is positive for all nā„15, so the function is also non-decreasing over that domain. That makes the relation true as well.
To summarize, we've shown that n0=15, c1=1, and c2=508 is one solution.
I am trying to prove that a function is in Ī©(š^3), however the constant C is fixed to 3.
The function is:
š(š) = 3š^3 ā 39š^2 + 360š + 20
In order to prove that š is Ī©(š^3), we need constants š, š_0 > 0 such that
|š(š)| ā„ C|š^3|
for every š ā„ š_0.
When plugging in C = 3, you would get the inequality
3š^3 ā 39š^2 + 360š + 20 ā„ 3š^3
which would equal
ā39š^2 + 360š + 20 ā„ 0
I'm stuck here, because I can't find an n_0 that satisfies the equation for every š ā„ š0.
Also, if c = 2.25 fixed, how do I find the smallest integer that satisfies n_0 ?
How to prove it in general
Proving š in Ī©(š^3) with š(š) = 3š^3 ā 39š^2 + 360š + 20 is pretty simple.
The exact definition (from Wikipedia) is:
In words you need to find a constant c such that c * g will always be smaller than f (from a given n_0). You are of course allowed to choose this c small and the n_0 big.
We first drop some unnecessary stuff in order to estimate f:
ā39š^2 is greater than -n^3 for all n >= 39
360š is obviously greater than 0
20 is also greater than 0
Okay, putting that together we receive:
f(n) >= 3n^3 - n^3 + 0 + 0
= 2n^3
for n >= 39.
We choose C = 2 (or something smaller), n_0 = 39 (or something greater) and follow that
C * |g(n)| = 2 * |n^3| <= |2 * n^3| <= |f(n)|
<=> C * |g(n)| <= |f(n)|
for all n > n_0. By definition this means š in Ī©(š^3).
Your specific scenario
For C = 3 fixed this is obviously not possible since 3 * n^3 is always greater than 3š^3 ā 39š^2 + 360š + 20 (for some n_0). This is due to the second summand ā39š^2.
Take a look at the plot:
You see that 3n^3 grows beyond f, for all n >= n_0 with n_0 at about 9.286. The exact value is:
n >= (2 / 39) * (90 + 8295^(0.5))
Here is the query at Wolfram Alpha.
But it is possible for a fixed C = 2.25 as you can see at this query. It is true for all n >= 40.
I'm trying to explain to my friend why 7n - 2 = O(N). I want to do so based on the definition of big O.
Based on the definition of big O, f(n) = O(g(n)) if:
We can find a real value C and integer value n0 >= 1 such that:
f(n)<= C . g(n) for all values of n >= n0.
In this case, is the following explanation correct?
7n - 2 <= C . n
-2 <= C . n - 7n
-2 <= n (C - 7)
-2 / (C - 7) <= n
if we consider C = 7, mathematically, -2 / (C - 7) is equal to negative infinity, so
n >= (negative infinity)
It means that for all values of n >= (negative infinity) the following holds:
7n - 2 <= 7n
Now we have to pick n0 such that for all n >= n0 and n0 >= 1 the following holds:
7n - 2 <= 7n
Since for all values of n >= (negative infinity) the inequality holds, we can simply take n0 = 1.
You're on the right track here. Fundamentally, though, the logic you're using doesn't work. If you are trying to prove that there exist an n0 and c such that f(n) ā¤ cg(n) for all n ā„ n0, then you can't start off by assuming that f(n) ā¤ cg(n) because that's ultimately what you're trying to prove!
Instead, see if you can start with the initial expression (7n - 2) and massage it into something upper-bounded by cn. Here's one way to do this: since 7n - 2 ā¤ 7n, we can (by inspection) just pick n0 = 0 and c = 7 to see that 7n - 2 ā¤ cn for all n ā„ n0.
For a more interesting case, let's try this with 7n + 2:
7n + 2
ā¤ 7n + 2n (for all n ā„ 1)
= 9n
So by inspection we can pick c = 9 and n0 = 1 and we have that 7n + 2 ā¤ cn for all n ā„ n0, so 7n + 2 = O(n).
Notice that at no point in this math did we assume the ultimate inequality, which means we never had to risk a divide-by-zero error.
I am reading through Skiena's "Algorithm Design Manual".
The first chapter states a formal definition for Big O notation:
f(n) = O(g(n)) means that c * g(n) is an upper bound on f(n).
i.e. there exists some constant c such that f(n) is always less than or equal to c * g(n) for large enough n. (i.e. n >= n0 for some constant n0)
So that's fine and makes sense.
But then the author goes on to describe the Big O of a particular function: 3n^2 - 100n + 6
He says that O(3n^2 - 100n - 6) is NOT equal to O(n). And his reason is that for any c that I choose, c * n is always < 3n^2 when n>c. Which is true, but what about the (-100n + 6) part?
Let's say I choose c = 1 and n = 2.
3n^2 - 100n + 6 = 12 - 200 + 6 = -182
and c * n is 1*2 which is 2. -182 is definitely less than 2, so why does Skiena ignore those terms?
Note the n >= n0 in the definition.
If you pick some c and n0, it has to be true for each n >= n0, not just n0.
So if you have c = 1 and n0 = 2, it also has to be true for n = 1000 for example, which it isn't.
3n^2 - 100n + 6
=> 3(1000)^2 - 100(1000) + 6 = 3 000 000 - 100 000 + 6 = 2 900 006
c.n
=> 1(1000) = 1 000
It's simplification. 3n^2 is greater than any 100n-6 for every n >= (SQRT(2482)+50)/3 ~= 33.2732249428 - please check - it's simple equation. Thus O(3n^2) > O(100n-6). That's why it's not worth considering that part - it does not add any value.
Please note that according to definition you have to find (at least one) c for which every c*n is always < 3n^2 - 100n + 6 for every n greater or equal than some n0 (at least one). Just pick c = 1000 and n0=1000 and you will see that it is always true for those c and n0. Because I have found such c and n0 than statement O(n) < O(3n^2 - 100n - 6) holds true.
But I agree that this simplification might be misleading.