| | |
Finding worst-case running time of Max Subsequence Sum Algorithm
Please support our Computer Science advertiser: Learn about neural networks and artificial intelligence.
![]() |
•
•
Join Date: Nov 2007
Posts: 22
Reputation:
Solved Threads: 0
I need help with finding a function T(n) that describes the upper bound for the worst case running time of this algorithm:
This is what I’ve got so far (This is all new stuff to me and I have no idea whether I’m doing it right or not):
I started counting the cost of basic operations in the body of the inner-most for loop, which are: 2 ops. for incrementing k and 2 ops. for S+ = A[k], making a total of 4. Since the loop body is executed (j-i+1) times, this gives me 4(j-i+1). In addition, the test condition is executed (j-i+2) times and k is initially assigned to 0, thus:
T0(n) = (j-i+2) + 4(j-i+1) + 1
= j-i+2+4j-4i+4+1
= 5(j-i)+7
= 5n+7
I substituted (j-i) with n since that’s the worst-case number of steps that can be executed by the algorithm.
Then I moved on to the middle loop, where I've calculated its running time to be:
T1(n) = (j+2) + i= ∑(from i=0 to j) (T0(n)+5) + 1
where the number of iterations of this loop is at most j times. Since the worst-case is for the loop body to execute n times, can I replace ∑(from i=0 to j) with ∑(from i=0 to n-1) instead?
1. maxS = 0 2. n = A.length 3. for j from 0 to n − 1 do 4. for i from 0 to j do 5. S = 0 6. for k from i to j do 7. S+ = A[k] 8. end for 9. if S > maxS then 10. maxS = S 11. end if 12. end for 13. end for
This is what I’ve got so far (This is all new stuff to me and I have no idea whether I’m doing it right or not):
I started counting the cost of basic operations in the body of the inner-most for loop, which are: 2 ops. for incrementing k and 2 ops. for S+ = A[k], making a total of 4. Since the loop body is executed (j-i+1) times, this gives me 4(j-i+1). In addition, the test condition is executed (j-i+2) times and k is initially assigned to 0, thus:
T0(n) = (j-i+2) + 4(j-i+1) + 1
= j-i+2+4j-4i+4+1
= 5(j-i)+7
= 5n+7
I substituted (j-i) with n since that’s the worst-case number of steps that can be executed by the algorithm.
Then I moved on to the middle loop, where I've calculated its running time to be:
T1(n) = (j+2) + i= ∑(from i=0 to j) (T0(n)+5) + 1
where the number of iterations of this loop is at most j times. Since the worst-case is for the loop body to execute n times, can I replace ∑(from i=0 to j) with ∑(from i=0 to n-1) instead?
You can always do a replacement that produces a bigger value, when finding a big O bound. For example, consider:
We can note that the running time of print j is 1. The for loop runs i times, which means it takes i steps. Then i = i * 2 takes some constant number of steps, so we have i + 1 steps inside the while loop. We know that i < n, so we can substitute a larger value, n+1, for the number of steps inside the loop. Then, the loop runs log_2 (n) times, which means we have (n+1)*log_2(n) performance, i.e. our algorithm is O(n*log n).
And this is true. The algorithm I showed is O(n*log n). It's also O(n*n) and O(n*n*n).
If we wanted to know the tightest upper bound, we couldn't indiscriminately replace "i+1" with a larger number of steps, though. The running time of the algorithm above is O(n).
So regarding your question about whether you can perform that replacement: Yes, you can perform the replacement.
I don't think it's the place you'd want to perform the replacement, though. You can evaluate that expression easily: The expression inside the sum doesn't reference the iteration variable at all, so Sum(from i = 0 to j)(T0(n)+5) = (j+1)*(T0(n)+5) = (j+1)*(5n+12).
Then you can say T1(n) <= (n+1)*(5n+12); T1(n) is O(n^2).
I really wish you'd use <= when you mean an inequality, or else you'll be thinking in terms of substitutions and how to plug and chug a solution, rather than the facts you are writing on paper.
i = 1
while i < n {
for j in (0..i) {
print j
}
i = i * 2
}We can note that the running time of print j is 1. The for loop runs i times, which means it takes i steps. Then i = i * 2 takes some constant number of steps, so we have i + 1 steps inside the while loop. We know that i < n, so we can substitute a larger value, n+1, for the number of steps inside the loop. Then, the loop runs log_2 (n) times, which means we have (n+1)*log_2(n) performance, i.e. our algorithm is O(n*log n).
And this is true. The algorithm I showed is O(n*log n). It's also O(n*n) and O(n*n*n).
If we wanted to know the tightest upper bound, we couldn't indiscriminately replace "i+1" with a larger number of steps, though. The running time of the algorithm above is O(n).
So regarding your question about whether you can perform that replacement: Yes, you can perform the replacement.
I don't think it's the place you'd want to perform the replacement, though. You can evaluate that expression easily: The expression inside the sum doesn't reference the iteration variable at all, so Sum(from i = 0 to j)(T0(n)+5) = (j+1)*(T0(n)+5) = (j+1)*(5n+12).
Then you can say T1(n) <= (n+1)*(5n+12); T1(n) is O(n^2).
•
•
•
•
= 5(j-i)+7
= 5n+7
•
•
Join Date: Nov 2007
Posts: 22
Reputation:
Solved Threads: 0
The honest truth is, I don't know when an inequality sign or when an equal sign should be used. I'm struggling to understand algorithm analysis. I more or less understand the examples in my text book but I'm pretty much lost when it comes it doing it on my own since I don't know when a substitution should be used or how to deal with loops and summations.
Nobody knows when a substitution should be used. Problem solving works by guessing what steps to do and seeing where it leads, and you can only get better at guessing with experience.
You should use inequality operators when using "=" would be untrue.
You should use inequality operators when using "=" would be untrue.
Last edited by sarehu; Oct 5th, 2008 at 2:47 am.
![]() |
Other Threads in the Computer Science Forum
- Previous Thread: Silly stuff for a Friday
- Next Thread: Big theta notation
| Thread Tools | Search this Thread |
ai algorithm algorithms amazon assignment assignmenthelp assignments automata battery bigbrother binary bittorrent bizarre bletchleypark bomb business cern codebreaker compiler computer computers computerscience computertrackingsoftware connect conversion csc data dataanalysis dataintepretation development dissertation dissertations dissertationthesis dissertationtopic ebook employment energy extensions floatingpoint foreclosure foreclosuresoftware fuel geeks givemetehcodez government graphics hardware history homeworkassignment homeworkhelp humor ibm idea ideas internet iphone ipod itcontracts jobs kindle laser laws linkbait lsmeans mainframes marketing mining mobileapplication nano netbeans networking news os p2p piracy piratebay principles programming research sam-being-cute sas science security sex simulation software spying sql stephenfry study supercomputing sweden technology textfield turing turingtest two'scompliment uk virus warehouse





