首页 > 其他分享 >LIS问题的优化

LIS问题的优化

时间:2024-01-17 21:45:36浏览次数:20  
标签:离散 len 问题 LIS 优化 我们 贪心

普通的LIS问题的时间复杂度是\(O(n^2)\),瓶颈主要是在方程\(f[i]=1+max(f[j])\),其中\(1≤j<i\)且\(a[j]<a[i]\)中寻找\(j\)上

我们尝试用贪心优化,这里的\(j\)就是小于\(i\)的比\(a[i]\)小的且\(f[j]\)最大的\(j\)

根据贪心原则,假设当前循环到了\(i\)(还没有开始处理),我们用\(h[k]\)表示\(f[j]\)为\(k\)且\(a[j]\)最小的\(a[j]\)(\(1≤j<i\))

假设当前循环到了\(i\),此前的最优长度为\(len\)

那么如果\(a[i]>h[len]\),那么就可以\(len\)++,\(h[len]=a[i]\)

否则的话,我们可以发现\(h\)是单调的(为什么见下),于是我们二分,找到一个位置\(l\),满足\(l\)是最大的且\(h[l]<a[i]\),然后就有\(f[i]=l+1\),再考虑修改,肯定就是\(h[l+1]=min(h[l+1],a[i])\),此时修改后\(h\)仍然是单调的,所以\(h\)一直都是单调的

当然上述方法有一定思维含量,我们可以利用数据结构来减少思维含量

我们将\(a\)离散化,设\(h[k]\)表示值为\(k\)(离散化后)的最大的\(f\),我们查找区间\([1,a[i]-1]\)的最大值就好了

标签:离散,len,问题,LIS,优化,我们,贪心
From: https://www.cnblogs.com/dingxingdi/p/17971236

相关文章

  • 设计模式 经典问题
    目录策略模式和简单工厂模式的区别策略模式的类图为什么采用聚合简单工厂模式的类图为什么采用关联表示策略模式和简单工厂模式的区别策略模式和简单工厂模式是两种不同的设计模式,它们在用途和实现上有所不同。简单工厂模式是一种创建型模式,用于创建特定类型的对象。它通过一......
  • 3254:约瑟夫问题No.2C
    做个循环列表就行了。逻辑上想想还是很简单的。然而在实践的时候需要考虑许多边界情况。每次循环的时候要考虑头节点的问题。#include<stdio.h>#include<stdlib.h>structnode{intdata;structnode*next;};typedefstructnodeqlist;intmain(){qlist......
  • Chat GPT解决工作问题
    要使用Python提取一个文件夹下所有.ogg文件的文件名,并将这些文件名输出到一个文本文件中,你可以使用以下代码: importos#设置文件夹路径directory='/path/to/your/directory'#设置输出文件的路径output_file='/path/to/your/output.txt'#创建一个空列表来存储文......
  • Doubly linked list【1月17日学习笔记】
    点击查看代码//Doublylinkedlist#include<iostream>usingnamespacestd;structnode{ intdata; node*next; node*prev;};//定义双向链表结构体node*A;node*getnewnode(intx){ node*temp=newnode; temp->data=x; temp->prev=NULL; temp->nex......
  • 3254:约瑟夫问题No.2C++
    \这题思路还是挺多的。如果用数学的角度考虑。知道了n,p,m自然就知道下一个要出队的人的编号。然后一个个输出就行了。还可以用循环链表做。还可以用队列。出队在入队。#include<iostream>#include<queue>usingnamespacestd;intmain(){intn,p,m;while(......
  • springMvc如何解决请求中文乱码问题
    方式一:解决get请求中文乱码问题  每次请求前用encode对url进行编码方式二:在应用服务器上配置URL编码格式,在tomcat配置文件server.xml增加encodeURL编码格式,然后重启解决post请求方式一:使用spring提供的编码过器 在web.xml文件配置编码过lu器,增加一下配置: <web-ap......
  • vue+tsc+noEmit导致打包报TS类型错误问题及解决方法
    当我们新建vue3项目,package.json文件会自动给我添加一些配置选项,这写选项基本没有问题,但是在实际操作过程中,当项目越来越复杂就会出现问题。本文列举一个目前我遇到的一个问题:打包后报了一堆TS类型错误,怎么消除这些错误?项目环境:Vue3+Vite+TS当项目进行打包时候,突然发现终端......
  • RTSP/Onvif安防视频云平台EasyNVR迁移盘符后启动异常的问题排查与解决
    EasyNVR安防视频云平台可支持设备通过RTSP/Onvif协议接入,并进行视频流的处理及分发,在视频监控场景中可实现视频实时监控直播、云端录像、云存储、录像检索与回看、告警、级联等,平台能将拉取过来的音视频流转化成适合全平台播放的RTMP、RTSP、hTTP-FLV、Websocket-FLV、HLS、WebRTC......
  • vue-element-admin/litemall后端,超过两级嵌套路由无法缓存的问题
    本文主要针对的是litemall后端,vue-element-admin只需稍作修改应该也可以适用。路由扁平的思路主要来源于https://blog.csdn.net/weixin_40119256/article/details/111475571,另外解决面包屑显示问题,此文章作记录以供有需要的同行参考。keep-alive用于缓存不活跃的组件实例,避免重......
  • 解决Python虚拟环境安装模块失败的问题
    Python虚拟环境的出现为我们创建和管理项目提供了很大的方便。通过虚拟环境,我们可以隔离不同项目的依赖包,避免版本冲突和混乱。然而,有时候在虚拟环境中安装模块时会遇到各种问题,例如找不到模块、安装超时等。下面将介绍几种常见的情况和相应的解决方法,以帮助您顺利安装模块。1.网络......