2. Algorithm
:
Let S’ be the subsequence and S be the set that we want to check
if S’ is a part of, then the following algorithm will check
whether S’ is in S.
1. function f(S', S):
2.
S'_i = 0
3.
S_i = 0
4.
while S_i < cardinality of S and S'_i < cardinality of S':
5.
if S[S_i] == S'[S'_i]:
6.
S'_i = S'_i + 1
7.
S_i = S_i + 1
8.
return S'_i == cardinality of S'
Complexity analysis
:
We look at the while loop and notice that S_i
increments by one on every iteration and that it is
one of the induction variables in the loop condition of S_i < S. Since the precondition of the
function ensures that S’ < S, the worst case number of iterations is S, hence the while loop
terminates at worse after S steps, each of which consists of a finite number of idealistically
constant time operations, so the worst case runtime complexity of f is O(n) where n is the
cardinality of S.
Proof
:
a.
Termination
:
Since S_i increments on each iteration, and the loop terminates once S_i is no longer < S,
then the maximum number of iterations is S, after which it returns and terminates.
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
This is the end of the preview.
Sign up
to
access the rest of the document.
 Spring '08
 KLEINBERG
 Algorithms, Computational complexity theory, Natural number, S_i

Click to edit the document details