1. 程式人生 > >序列的最長遞增子序列長度 with matlab

序列的最長遞增子序列長度 with matlab

首先生成序列,20個0-100的隨機整數

x=floor(rand(1,20)*100)

x= 83     1    68    37    83    50    70    42    30    18    19    68   30    54    15    69    37    86    85    59

接著計算遞減的元素

p=find(diff(x)<0)
p=1     3     5     7     8     9    12    14    16    18    19

遞減元素的最大間隔就是遞增的最大長度

max_l=max(diff(p))
max_l=3

合起來就是一句話

max_l=max(diff(find(diff(x)<0)))

要顯示出這個子序列的話

p=find(diff(x)<0);
j=diff(p);
max_l=max(j) %最大增長序列長度
n0=p(find(j==max_l))+1 %子序列起始位置
n1=n0+max_l-1 %子序列結束位置
subS=x(n0:n1) %子序列
計算遞減的最大子序列長度
max_l=max(diff(find(diff(x)>0)))

剛才看到有人寫的求最大增長子序列長度的C程式碼,洋洋灑灑一代堆,忍不住用Matlab算了一下,僅供參考