Maximum Alternating Sum Subsequence

We are given a sequence of positive integers, say [x_1, x_2, ..., x_n].

We need to find a subsequence of maximum alternating sum.  S = [x_{i1}, x_{i2}, ..., x_{ik}] is said to be a subsequence if i1 < i2 < ... < ik. Alternating sum of subsequence, S is simply x_{i1} - x_{i2} + x_{i3} - x_{i4} + ... +/- x_{ik}. .

So, our task is to find a subsequence, say S^* which maximizes the above sum. (Note that there may be more than one such optimal subsequence, S^* .)


Sequence, X = [10, 2, 3, 8, 9, 1, 10] ——->  S^* = [10, 2, 9, 1, 10]  (Alternating sum = 10 – 2 + 9 – 1 + 10 = 26.)

Sequence, X = [1, 1, 4, 10, 3, 1, 10, 20] ——-> S^* = [10, 1, 20] (Alternating sum = 29.) (Another possible optimal subsequence is [1, 1, 10, 1, 20].)


1. The length of the optimal subsequence will be odd. (It is quite clear why this is so. If we have an even subsequence, the last term of the subsequence is subtracted in the alternating sum. So, by removing one element from this sequence, we get a sequence of higher alternating sum. [This is true since all elements of the sequence are positive.]. So, for any even subsequence, we can always find an odd subsequence of higher alternating sum.)

Development of the algorithm:

1. Now, how do we get an Odd Subsequence? Simple, by adding one element to an even subsequence. Again, how do we get an Even Subsequence? And again, by adding one element to an Odd Subsequence.

Suppose we want to find an Odd Subsequence of Maximum Alternating Sum (MAS) having its last element as x_k . How do we get that?

Answer: The element prior to x_k in this required Odd Subsequence is an element having index \leq k-1. If it is x_{k-3} then we would find an Even Subsequence of MAS ending at x_{k-3} and add x_k to that.

How do we decide which would be the index of the element preceding x_k ?

Simple. Consider an Even Subsequence of MAS ending at x_k-1 , and add x_k to that. This is one possibility. What is the Alternating Sum of this Odd Subsequence? Answer: MAS(Even Subsequence ending at x_{k-1}) + x_k.

We have to maximize the Alternating Sum of the Odd Subsequence. Therefore, the Odd Subsequence of MAS ending at x_k is precisely one that maximizes: MAS(Even Subsequence ending at x_j ) + x_k over all indices ‘j’ ranging from ‘0’ to ‘k-1’. (Since, x_k is added to each of these sums, we can select an optimal one by taking the one that maximizes MAS(Even Subsequence ending at x_j ). )


Let OPT_Odd (j) denote MAS of Odd Subsequence ending at x_j . Analogously, let OPT_Even (j) denote MAS of Even Subsequence ending at x_j .

(The solution to the problem is given by: max_{j: '1' \space to 'n'} OPT_Odd (j). )


Based on the above discussion, we get the following recursion:

OPT_Odd (j) = max_{i: '0' \space to 'j-1'} OPT_Even (i) + x_j .

and, OPT_Even (j) = max_{i: '1' \space to 'j-1'} OPT_Odd (i) + x_j .

Base case values:

OPT_Odd (0) = 0; OPT_Odd (1) = x_1

OPT_Even (0) = 0; OPT_Even (1) = 0.


How the algorithm computes OPT_Odd and OPT_Even values:

It computes OPT_Odd (2) using base values of OPT_Even (0) and OPT_Even (1). Similarly, it computes OPT_Even (2) using base values of OPT_Odd (0) and OPT_Odd (1).
Then, we compute OPT_Odd (3) using OPT_Even values for 0, 1 and 2. Similar is the case with OPT_Even.

We proceed this way until we compute OPT_Odd (n).


As pointed above, the value of the Odd Subsequence of MAS is given by:

max_{i: '1' \space to 'n'} OPT_Odd (i).


Points to ponder:

1. You can try writing the pseudocode for the algorithm, indicating the way it computes the OPT_Odd and OPT_Even values.

2. What is the running time of the implementation of the algorithm given by your pseudocode? Is it O(n^2)?

3. The above algorithm computes the Value of the optimal solution. How do we get an Optimal Subsequence itself? You might have to modify the algorithm to keep track of the index of the Even Subsequence that maximizes a particular Odd Subsequence, and also do the same for Even Subsequences. Are there other ways to find an optimal subsequence? (Computing Optimal Solutions (as opposed to optimal value) would be given in any standard textbook on algorithm design. Eg. Kleinberg/Tardos Chap. 6)

(There might be errors in the above algorithm/anlysis. I apologize for them. It would be great if you point out such errors.)

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: