博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nlog(n)解动态规划--最长上升子序列(Longest increasing subsequence)
阅读量:6949 次
发布时间:2019-06-27

本文共 960 字,大约阅读时间需要 3 分钟。

    最长上升子序列LIS问题属于动态规划的初级问题,用纯动态规划的方法来求解的时间复杂度是O(n^2)。但是如果加上二叉搜索的方法,那么时间复杂度可以降到nlog(n)。

  具体分析参考:

  代码:

#include 
using namespace std;int LIS_nlogn(int *arr, int len){ int *LIS = new int[len]; //LIS[i]存储的是每个最长长度i的最小结尾,即在arr里的最小结尾 for (int i = 0; i < len; i++) { LIS[i] = -1; } int maxLen = 1; //记录最长上升子串的最大长度 LIS[0] = arr[0]; for (int i = 0; i < len; ++i) { int low = 0, high = maxLen, mid; while (low <= high) { mid = (low + high)/2; if (LIS[mid] < arr[i]) { low = mid + 1; } else { high = mid - 1; } } LIS[low] = arr[i]; //插入元素到相应的位置 if (low > maxLen) { maxLen++; } } delete LIS; return maxLen;}int main(){ int arr[] = {
2,1,5,3,6,4,8,9,7}; int len = 9; int ret; ret = LIS_nlogn(arr, len); cout<
<

 

转载地址:http://ghkil.baihongyu.com/

你可能感兴趣的文章
Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
查看>>
尝试写作:第一天
查看>>
python集成包地址 Anaconda 一键安装拥有所有包
查看>>
SEO—搜索引擎优化初探
查看>>
使用宝塔控制面板建站时出现网页出现404错误怎么办?
查看>>
Confluence 6 附件存储配置
查看>>
Confluence 6 附件存储提取文本文件
查看>>
两种方式设置单元格的下划线
查看>>
解析:百度快照与站点权重的关系!
查看>>
实验吧 隐写
查看>>
redis_学习_02_redis 可视化工具 Redis Desktop Manager
查看>>
mongo去重统计
查看>>
学好机器学习,这里有你想要的一切
查看>>
Docker中使用MySQL
查看>>
RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
查看>>
nodejs与javascript中的aes加密
查看>>
内存溢出真实案例分析
查看>>
Jboot v2.0-rc.12 发布,优化细节问题
查看>>
3.JUC线程高级-同步容器 ConcurrentHashMap
查看>>
区块链开发公司解析区块链在银行应用的优势
查看>>