演算法導論 最長遞增子串行

2021-07-10 00:13:59 字數 1148 閱讀 4376

華電北風吹

日期:2016/2/20

問題描述:

例如陣列arr=[1,5,8,2,3,4]的最長遞增子串行是1,2,3,4

動態規劃求解。對於陣列中的每個元素,從前往後計算每個元素的狀態——到這個元素為止所構成的最長遞增子串行。時間複雜度θ(

n2)

#include 

#include

using

namespace

std;

#define maxlength 10

int longestincreasingsubsequence(int arr, int n, int state, int line)

state[0] = 1;

for (int i = 1; i < n; ++i)}}

int max = 0;

int end = -1;

for (int i = 0; i < n; ++i)

}int i = 1;

line[0] = arr[end];

while (path[end] != end)

return max;

}int main()

int max = longestincreasingsubsequence(x, n, c, line);

cout

<< "longest increasing subsequence's length: "

<< max << endl;

for (int i = max - 1; i >= 0; --i)

cout

<< endl;

}}

網上見了乙個比較巧妙的演算法,**如下(這裡讓我想到了快排的那種與這個特別像的實現方式)。目前下面的演算法複雜度仍舊是θ(

n2) ,但是對於內層迴圈的查詢進行二分優化,可以使得複雜度降低為θ(

nlogn)

#include 

#include

char

str[10001];

int main()

}if (j == ans)

}printf("%d\n", ans);

}return

0;}

演算法導論之最長遞增子串行

習題15.4 5,15.4 6 長度為n的陣列,尋找最長遞增子串行。要求 1 時間複雜度o n 2 2 時間複雜度o n lg n 解 可以利用公共子串行來解,將陣列a排序得到a 則a與a 的最大公共子串行即為所求,o n n 下面的兩種方法都是直接基於動態規劃。設輸入序列為a 1 n 以a i 作...

演算法導論15 4 6 最長單調遞增子串行

參考資料 程式設計之美 2.16 題目 給出乙個o nlogn 的演算法,使之能夠找出乙個n個數的序列中最長的單調遞增子串行。o n2 的比較好理解,沒有仔細研究,研究了下o nlogn 的解答和好多大神的分析才明白一些,發現玄妙無限呀 對於序列sn,考慮其長度為i的單調子列 1 i m 我們選取這...

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...