最长的交替子序列

时间:2015-05-21 13:20:04

标签: algorithm dynamic-programming recurrence

序列x1,x2,x3,...,xn,如果

,则为zig-zag

1

如果X = 3, 4, 8, 5, 6, 2则最长的之字形子序列的长度为5(对应3, 8, 5, 6, 24, 8, 5, 6, 2)。

我们将Z(i,0)定义为用xi结束的最长之字形子序列的偶数长度。

我们将Z(i,1)定义为最长之字形子序列的ODD长度,并以xi结束。

这是解决方案的重复发生:

1

现在我的问题是,是否有另一种方法可以使用仅具有参数i的变量Z并在函数内部合并0 and 1来构建重复。 如果我们将Z[i]定义为用xi结束的最长之字形子序列(奇数或偶数)的长度,那么如果z [i]是奇数或偶数,我们可以用什么方式表达信息? 这种复发会是什么?

编辑:我对复发工作了一点点,我想出了这个解决方案。我认为这是正确的。其他人可以确认吗? 让c [i]定义为用xi结束的前缀Xi的最长的Z字形子序列(奇数或偶数)。 如果序列中只有一个元素,则c [1] = 1 为i计算c [i]>首先,我们计算(i-1)个元素(奇数和偶数)的最长锯齿形子序列。我们选择两者中的最大值并添加1.我们使用c[j] mod 2 == 0控件来仅选择偶数长度。

2 http://imageshack.com/a/img537/402/egyXmk.jpg

1 个答案:

答案 0 :(得分:0)

那是不可能的。子序列的长度是偶数还是奇数是信息的重要组成部分,没有这些信息,公式就不会起作用。它不能来自i