最长递归子序列
成都创新互联公司自2013年创立以来,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元北镇做网站,已为上家服务,为北镇各地企业和个人服务,联系电话:18980820575
设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。
1.时间复杂度为O(n2),空间复杂度O(n)的算法
//O(n2) int LIS1(const int arr[], const int size) { vector<int> h; h.push_back(1); int index = 1; int max = 1; while (index < size) { int longest_sub_size = 0; for (int j = 0; j < index; ++j) { if (arr[j] < arr[index] && longest_sub_size < h[j]) { longest_sub_size = h[j]; if (max < longest_sub_size+1) { max = longest_sub_size + 1; } } } h.push_back(longest_sub_size + 1); ++index; } return max; }
2.时间复杂度O(n*log n),空间复杂度O(n)的算法
int BinSearch(int key, int* d, int low, int high) { while(low<=high) { int mid = (low+high)>>1; if(key>d[mid] && key<=d[mid+1]) return mid; else if(key>d[mid]) low = mid+1; else high = mid-1; } return 0; } int LIS(int* a, int n, int* d) { int i,j; d[1] = a[1]; int len = 1; //递增子序列长度 for(i = 2; i <= n; i++) { if(d[len]<a[i]) j = ++len; else j = BinSearch(a[i],d,1,len) + 1; d[j] = a[i]; } return len; }
网页名称:动态规划——最长递增子序列
标题路径:https://www.cdcxhl.com/article42/gsegec.html
成都网站建设公司_创新互联,为您提供全网营销推广、动态网站、手机网站建设、云服务器、品牌网站设计、网站设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联