最長單調遞增子序列的求法

來源:互聯網
上載者:User
package algorithm.apps;/** * 最長單調遞增子序列的求法 LIS *  * @author Toy */public class LIS {/** * 動態規劃(n^2),記表備查 b[0,n-1]記錄以a[i]結尾的最長遞增子序列長度 *  * @param a * @return */public int lis_01(int[] a) {int n = a.length;if (n <= 0) {return 0;}int max = 0;int[] b = new int[n];b[0] = 1;for (int i = 1; i < n; i++) {int ki = 0;for (int j = 0; j < i; j++) {if (a[i] >= a[j] && ki < b[j]) {ki = b[j];}}b[i] = ki + 1;}for (int i = 0; i < n; i++) {if (b[i] > max) {max = b[i];}}return max;}/** * 動態規劃(n*log n),記表備查 k是序列a[0:i]的最長遞增子序列的長度 b[k]是a[0:i]中所有長度為 k * 的單調遞增子序列中的最小結尾元素值 則可知b是單調遞增的 *  * @param a * @return */public int lis_02(int[] a) {int n = a.length;if (n <= 0) {return 0;}int[] b = new int[n];b[1] = a[0];int k = 1;for (int i = 1; i < n; i++) {if (a[i] >= b[k]) {b[++k] = a[i];} else {b[binary(a, i, b, k)] = a[i];}}return k;}/** * 在數組b[0:k]中找到a[i]的存放位置,滿足 b[j-1]<=a[i]<b[j]; *  * @param a * @param i * @param b * @param k * @return */private int binary(int[] a, int i, int[] b, int k) {if (a[i] < b[1]) {return 1;}int m = 1;int n = k;while (m != n - 1) {int mid = (m + n) / 2;if (b[mid] <= a[i]) {m = mid;} else {n = k;}}return n;}/** * 第一種思路在狀態轉移時的複雜度為o(n),即在找a[k]前面滿足a[j]<a[k]的最大b[j]時採用的是順序尋找的方法,複雜度為o(n). * 設想如果能把順序尋找改為折半尋找,則狀態轉移時的複雜度為o(lg(n)),於是產生方法二的思想 *  * @param args */public static void main(String[] args) {int[] a = new int[] { 5, 2, 3, 1, 4, 6, 6, 7 };LIS s = new LIS();int max_01 = s.lis_01(a);System.out.println("method 01: " + max_01);int max_02 = s.lis_02(a);System.out.println("method 02: " + max_02);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.