求陣列的最大子陣列值和最長公共子序列問題
1樓:司馬刀劍
a) 最長公共子序列的結構。
易證最長公共子序列問題也有最優子結構性質。
設序列x=和y=的乙個最長公共子序列z=,則:
i. 若xm=yn,則zk=xm=yn且zk-1是xm-1和yn-1的最長公共子序列;
ii. 若xm≠yn且zk≠xm ,則z是xm-1和y的最長公共子序列;
iii. 若xm≠yn且zk≠yn ,則z是x和yn-1的最長公共子序列。
其中xm-1=,yn-1=,zk-1=。
最長公共子序列問題具有最優子結構性質。
如何求乙個(正數)無序陣列中最長有序子陣列的長度?
2樓:浪跡天涯的流星
據題目的要求,求一維陣列中的最長遞增子序列,也就是找乙個標號的序列b[0],b[1],…b[m](0 <=b[0] -1。因此,最長的遞增序列為(1,2),(1,2),長度為2。在這裡,2前面是1還是-1對求出後面的遞增序列沒有直接影響。
但是在其它情況下可能有影響)
依此類推之後,我們得出如州森下的結論。
假設在目標陣列array的前i個元素中,最長遞增子序列的長度為lis[i]。那麼,lis[i+1]=max, array[i+1]>array[k], for any k <=i
即如果array[i+1]大於array[k],那麼第i+1個元素可以接在lis[k]長的子序列後面構成乙個更長的子序列。於此同時array[i+1]本身至少可以構成乙個長度為1的子序列。
根據上面的分析,就可以得到**清單:
c++**:
**如下:int max(int *a, int n)
int max = a[0];
for(int i = 1; i < n; i++)
if(max < a[i])
max = a[i];
return max;
int lis(vector&array)
int *a = new int[
for(int i = 0; i < i++)
a[i] =1;//初始化預設的長度。
for(int j = 0; j < i; j++)前面最長的序列。
if(array [i] >array [j] &a[j] +1 > a[i]) 當前數字比第j個大,且標記陣列需要更新。
a[i] =a[j] +1;
return max(a,這種方法的時間複雜度為o(n2 + n) =o(n2)
輸入陣列,求陣列中的元素的平均值和最大,最小值 怎麼用C
private void button2 click object sender,eventargs e label1.text min is arr 0 tostring label1.text max is arr arr.count 1 tostring 靜態陣列,用lambda表示式 lin...
c 輸出陣列中最大的數和最小的數
先不說你取最大最小的演算法是否有問題 main函式裡,你f 和c 的呼叫就有問題啊 a k 和a o 是2個int型的數,你f 和c 都是需要3個引數,且有2個int型和一個int陣列型。再說你的k和o都沒賦初值。還有這句 if a i a i 1 這個if還可以寫為以下1句,我給注了,你可以看一下...
如何用c 的分治法求陣列最大最小值
演算法思想 先相鄰兩個兩個比較,較大的放入陣列max,較小的放入陣列min,然後從max陣列求出最大,min陣列求出最小即可。可以證明這是效率最高的演算法,不能進一步改進。include define n 11 define m n 1 2 using namespace std void main...