【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
嘿,各位编程爱好者们!今天带来的 LIS 算法简直太赞啦 无论你是刚入门的小白,还是经验丰富的大神,都能从这里找到算法的奇妙之处哦!这里不仅有清晰易懂的 C++ 代码实现,还有超详细的算法讲解,让你轻松掌握 LIS 算法的三种解法:暴力、动态规划、贪心加二分查找,彻底搞懂它在数据处理、资源分配和文本处理中的强大应用呢 看完保证让你收获满满,记得点赞,收藏三连,关注我,后续还有更多精彩的算法干货分享哦 让我们一起开启算法的奇妙之旅,提升编程技能,征服代码世界吧!
欢迎拜访:羑悻的小杀马特.-CSDN博客本篇主题:
剖析所谓的LIS算法(C++版)制作日期:2025.01.03
隶属专栏:美妙的算法世界
目录
编辑
本篇简介:
一·LIS算法:
1.1算法定义及目的:
1.2实现方法:
1.2.1简单的暴力解法:
1.2.2动态规划解法:
1.2.3贪心算法 + 二分查找解法:
2·算法应用场景:
2.1数据分析与挖掘:
2.2资源分配优化:
2.3文本处理:
二·LIS算法例题:
三·本篇小结:
本篇简介:
本篇以LIS算法展开细致介绍,不同方法的实现如动态规划,贪心二分实现等;并配合实际例题进行应用;望对读者学习LIS算法有帮助。
一·LIS算法:
1.1算法定义及目的:
LIS(Longest Increasing Subsequence)算法,即最长递增子序列算法。
它的目标是在一个给定的序列(可以是数字序列、字符序列等)中,找到一个子序列,这个子序列中的元素是按照递增顺序排列的,并且在所有符合递增条件的子序列中,长度是最长的。
例如,在序列 [1, 3, 2, 4, 5] 中,最长递增子序列是 [1, 2, 4, 5],长度为 4。这个算法在很多领域都有应用,比如数据挖掘中分析数据的趋势,或者在文本处理中分析文本的某种递增模式。
1.2实现方法:
1.2.1简单的暴力解法:
又称枚举法;下面说一下它的思路:
这种方法是最直观的。它会枚举所有可能的子序列,然后检查每个子序列是否是递增的,并记录下最长的递增子序列。
具体来说,对于一个长度为 n 的序列,它有 2^n 个子序列,需要逐个检查这些子序列是否满足递增条件。
但是它有个致命的缺点:
时间复杂度非常高,达到了指数级别 O (2^n)。在实际应用中,当序列长度稍微变大时,计算量会变得极其庞大,效率极低。例如,当 n = 20 时,2^20 约等于 100 万次运算,这会导致程序运行时间过长。
代码实现:
// 暴力解法
int lis_brute_force(const std::vector<int>& nums) {int n = nums.size();int max_length = 0;// 枚举所有可能的子序列for (int mask = 0; mask < (1 << n); ++mask) {std::vector<int> subseq;for (int i = 0; i < n; ++i) {if (mask & (1 << i)) {subseq.push_back(nums[i]);}}bool is_increasing = true;for (size_t i = 1; i < subseq.size(); ++i) {if (subseq[i] <= subseq[i - 1]) {is_increasing = false;break;}}if (is_increasing) {max_length = std::max(max_length, static_cast<int>(subseq.size()));}}return max_length;
}
代码解释:
使用位运算枚举所有可能的子序列。
mask
从 0 到(1 << n) - 1
,对于每个mask
,将对应位为 1 的元素添加到subseq
向量中。检查
subseq
是否是递增序列,如果是,更新max_length
。时间复杂度为 o(2^n),效率低,适合较短序列。
因此我们极大不推荐这种解法。
1.2.2动态规划解法:
原理:
1.2.2.1从左往右填表:
动态规划的核心思想是将一个复杂的问题分解为一系列相互关联的子问题,并通过记录子问题的解来避免重复计算。
对于 LIS 算法,我们定义一个状态数组 dp,
其中 dp [i] 表示以第 i 个元素结尾的最长递增子序列的长度。
状态转移方程:
dp [i]=max (dp [j]) + 1,其中 j < i 且 nums [j]<nums [i]。
这意味着要找到在 i 之前的元素 j,使得 nums [j] 小于 nums [i],并且 dp [j] 是最大的,然后将 dp [i] 更新为 dp [j]+1。
时间复杂度分析:
时间复杂度为 O (n^2),相比于暴力解法有了很大的提升。
例如,对于长度为 100 的序列,暴力解法可能需要计算 2^100 次左右,而动态规划只需要计算 100^2 = 10000 次左右,大大减少了计算量。
代码实现:
首先,定义完了dp状态,先明确我们的任务:即从这这段数组中(其实是参差不齐),但是我们忽略降序的数,只从升序的那条路看起,找最长的。
比如我们到了i位置,想要得到的是? 以i位置为结尾的最长(包括i位置);因此我们需要在i之前找一条升序最长路L(末尾元素一定要比i小)--->这里正好就是我们的dp[j](j是由0~i-1);因此我们只需要遍历得到以j为结尾的dp的最大值就好;如果是结尾元素值比我们标定i对应值大;那么这个j就不能作为L的结尾元素;直接else跳过。
故,上面所说的我们最后是遍历得到L然后再+1得到dp[i];因此我们让它更加贴近一下dp状态方程的写法-->下面我们只用维护L+1(dp[i])的最大值即可了
int lis_dp(const std::vector<int>& nums) {int n = nums.size();std::vector<int> dp(n, 1);int max_length = 1;for (int i = 1; i < n; ++i) {for (int j = 0; j < i; ++j) {if (nums[i] > nums[j]) {// 状态转移方程 dp[i] = max(dp[i], dp[j] + 1)dp[i] = std::max(dp[i], dp[j] + 1);}}max_length = std::max(max_length, dp[i]);}return max_length;
}
代码解释:
使用
dp
数组存储以每个元素结尾的最长递增子序列的长度。对于每个元素
i
,遍历i
之前的元素j
,若nums[i] > nums[j]
,根据状态转移方程dp[i] = std::max(dp[i], dp[j] + 1)
更新dp[i]
。最终
max_length
存储了最长递增子序列的长度,时间复杂度为 。
1.2.2.2从右向左填表:
这里还可以是dp[i]表示以第i个元素为开始的 最长递增子序列的长度;这里只不过就是和上面的填表顺序颠倒一下。
代码展示:
这里的实现思路其实大差不多;我们只是定义的dp状态不同;只是所谓的推导从前变成了后了;
i为开始元素:因此我们要找的是i的右侧的大于i位置值的升序最长路L;因此从i+1开始看(必须要包含i+1为起点的最大路L)【->故我们是当填充i从i右侧找;因此这个是逆向填表(从右往左填表)】;注:遍历时,这里我们符合的要求(L)首先是j位置的值一定要大于i位置;其次就是找最长;因此遍历到长的L;因此我们为了让它像dp状态方程写法,故每次是求L+1作为dp[i]暂定值,然后求个max。
int LIS(vector<int> d) {int maxn = 1;vector<int> dp(d.size(),1);for (int i = d.size() - 2; i >= 0; i--) {for (int j = i + 1; j < d.size(); j++) {if (d[i] < d[j]) dp[i] = max(dp[i],dp[j] + 1);}maxn = max(dp[i],maxn);}return maxn;
}
这两种定义方法都可以。
1.2.3贪心算法 + 二分查找解法:
贪心思想引入:
贪心算法的策略是在每一步都做出当前看起来最优的选择。对于 LIS 算法,我们维护一个辅助数组 tail,它存储了当前找到的最长递增子序列。当扫描到一个新元素时,我们尽量将它插入到 tail 数组中合适的位置,使得 tail 数组仍然保持递增。
二分查找:
为了高效地将新元素插入到 tail 数组中,我们使用二分查找。每次插入元素时,在 tail 数组中找到第一个大于等于新元素的位置,然后用新元素替换它。这样可以保证 tail 数组始终是递增的,并且长度尽可能长。
时间复杂度:
这种方法的时间复杂度可以达到 O (nlogn),这是一种比较高效的解法。例如,对于长度为 1000 的序列,其计算量比动态规划的 O (n^2) 解法又减少了很多,能够更快地得到结果。
代码实现:
int lis_greedy(const std::vector<int>& nums) {std::vector<int> tail;for (int num : nums) {auto it = std::lower_bound(tail.begin(), tail.end(), num);if (it == tail.end()) {tail.push_back(num);} else {*it = num;}}return tail.size();
}
代码解释:
维护
tail
向量存储当前找到的最长递增子序列。对于每个元素
num
,使用std::lower_bound
找到tail
中第一个大于等于num
的位置。如果
it
等于tail.end()
,说明num
比tail
中所有元素都大,添加到tail
末尾;否则,将tail
中it
位置的元素更新为num
。时间复杂度为 o(nlogn),是最有效的实现方式
这种也是比较推荐的!!!
2·算法应用场景:
2.1数据分析与挖掘:
在分析数据的趋势变化时,LIS 算法可以帮助找到数据中的上升趋势部分,例如股票价格的上涨阶段、气温的上升周期等。
2.2资源分配优化:
在任务调度或者资源分配场景中,如果任务有先后顺序要求或者资源有递增的利用顺序,LIS 算法可以辅助找到最优的分配方案。
2.3文本处理:
在文本编辑软件中,用于分析文本段落中句子的长度递增模式,或者单词的某种语义递增模式,辅助进行文本排版或者语义分析。
二·LIS算法例题:
下面我们就用一道例题,来应用上面所述的LIS算法解答吧:
测试用例:
输入:6 1 4 2 2 5 6
输出:4
题目链接: 蓝桥账户中心
首先我们先看数据范围:
这里我们由题意可以看出:
总结下:就是当选了大的数值后就无法在选择比它小的数值;因此我们可以 选择把它排好升序,但是此时要注意符合刚才说的要求即可,这时就联想到了LIS算法了,但是前两种即暴力,动态规划实现是不合适的(大数据范围),因此后面我们就用贪心+二分来实现。
这里也就是要求我们要是升序,并且不能重复 (去重复:1·利用lower_bound的特性找到相同的会覆盖掉,2·当发现找不到返回的是区间最后+1位置的迭代器也是会覆盖,不记录len(如上图的情况))。
因此直接上手代码:
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+5;int r[N]={0};
int main()
{ //最长递增子序列问题(贴近):lisint n;cin>>n;vector<int>v(n+1);for(int i=1;i<=n;i++) cin>>v[i];int len=0;//r答案数组的长度:确保r数组始终是升序的//(不是一般的sort类的升序,而是确保了在r数组中出现的升序元素相对位置符合原数组的相对位置)for(int i=1;i<=n;i++){if(v[i]>r[len]) r[++len]=v[i];//比它大直接放在后面(多可以个0位置,方便比较)else {//返回大于它的数完成覆盖://找不到也就是r数组存在于当前值第一大的值,放在len后面的位置,之后会覆盖(相当于相等的数据就是无效的)// int pos=lower_bound(r+1,r+len+1,v[i])-r;// r[pos]=v[i];//或者*lower_bound(r+1,r+len+1,v[i])=v[i];}}cout<<len;return 0;
}
这道题也是不n能用o(N^2)复杂度的动态规划局解法;故就用复杂度为o(nlogn)的贪心二分来解决。
最后也是通过了。
三·本篇小结:
本篇介绍了LIS算法;下面介绍一下具体怎么用来小结一下:
当我们发现要求的是最长地址子序列,就可以选择它;具体有三种情况;但是合适的要么就动归,要么就二分;根据数据范围选择即可了。
如果我们只要这个序列的长度:两种都可。
但是,如果是还要它的数据那么就只能选二分来模拟了。
二分的话,就要保证:
在lis数组中出现的升序元素相对位置符合原数组的相对位置。
相关文章:
【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
嘿,各位编程爱好者们!今天带来的 LIS 算法简直太赞啦 无论你是刚入门的小白,还是经验丰富的大神,都能从这里找到算法的奇妙之处哦!这里不仅有清晰易懂的 C 代码实现,还有超详细的算法讲解,让你轻…...
Linux: 关于 mount 的一些细节
文章目录 1. 前言2. mount 的主要细节 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. mount 的主要细节 mount 从系统调用 sys_mount() 发起,如 mount -t tmpfs cgroup /sys/fs/cg…...
CSS3——3. 书写格式二
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写:--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…...
Java-JVM详解
Java-JVM ①JVM概述 ❶基本介绍 JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点: Java 虚拟机基于二进制字节码执行,由一套字节码指…...
docker搭建atlassian-confluence:7.2.0
文章目录 引言I 部署前准备数据库镜像准备自己构建镜像dockerhub第三方镜像II 安装启动容器基础配置(获取服务器ID)授权码获取集群选择设置数据库配置管理员账号引言 准备数据库、镜像启动容器获取服务器ID根据服务器ID等信息,基于atlassian-agent.jar 授权I 部署前准备 数…...
YOLOv8实战人员跌倒检测
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对人员跌倒目标数据集进行训练和优化,该数据集包含丰富人员跌倒图像样…...
瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp)
瑞芯微rk3568平台 openwrt系统适配ffmpeg硬件解码(rkmpp) RK3568及rkmpp介绍编译安装mpp获取源码交叉编译安装 libdrmlibdrm-2.4.89 make 方式编译(cannot find -lcairo, 不推荐)下载源码编译编译错误: multiple definition of `nouveau debug‘错误cannot find -lcairo:…...
自动驾驶控制与规划——Project 6: A* Route Planning
目录 零、任务介绍一、算法原理1.1 A* Algorithm1.2 启发函数 二、代码实现三、结果分析四、效果展示4.1 Dijkstra距离4.2 Manhatten距离4.3 欧几里德距离4.4 对角距离 五、后记 零、任务介绍 carla-ros-bridge/src/ros-bridge/carla_shenlan_projects/carla_shenlan_a_star_p…...
wordpress报错open_basedir restriction in effect
Warning: file_exists(): open_basedir restriction in effect. File(/www/wwwroot/wp-content/plugins/woocommerce/patterns/banner.php) is not within the allowed path(s): 关闭防跨站攻击...
VSCode Live Server 插件安装和使用
VSCode Live Server是一个由Ritwick Dey开发的Visual Studio Code扩展插件,它提供了一个带有实时重载功能的本地开发服务器。在VSCode中安装和使用Live Server插件进行实时预览和调试Web应用程序。这将大大提高前端开发效率,使网页设计和开发变得更为流畅…...
网络安全-XSS跨站脚本攻击(基础篇)
漏洞扫描的原理 1.跨站脚本攻击介绍 xss跨站脚本攻击: xSS 全称(Cross site Scripting )跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻…...
【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析
【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析前言一.红黑树的定义1.1 红黑树的概念1.2红黑树的规则1.3 红黑树对比A…...
Mysql 性能优化:索引条件下推(ICP)
MySQL 索引下推(Index Condition Pushdown,ICP)是一种查询优化技术,旨在提高使用索引的查询效率。它是在 MySQL 5.6 中引入的,通过将部分 WHERE 子句的过滤条件下推到索引扫描阶段来减少不必要的回表操作,从…...
docker如何进入交互模式
目录 使用 docker run -it 使用 docker exec -it 示例: 使用 docker attach 示例: 在写代码的时候对小白来说避免不了本地和docker环境执行结果不一样的情况 这个时候需要进入正在运行的容器进行调试或执行一些命令操作。这时可以使用 Docker 提供的…...
闲谭SpringBoot--ShardingSphere分库分表探究
文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文,我们对日志表,进行了按月的分表,这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢,除了提高硬件性能,还有一…...
在Java中Semaphore的解释及主要用途
目录 定义 使用方法 主要用途 使用场景示例 定义 Semaphore(信号量)是Java并发编程中的一个同步工具类,用于控制对共享资源的访问。它通过维护一个计数器来管理多个线程对资源的并发访问数量。这个计数器表示当前可用的许可数,…...
React Native 项目 Error: EMFILE: too many open files, watch
硬件:MacBook Pro (Retina, 13-inch, Mid 2014) OS版本:MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹,最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web,出现如下错误:…...
四、VSCODE 使用GIT插件
VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git,就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …...
5 分布式ID
这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...
flink的EventTime和Watermark
时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念:ProcessTime、IngestionTime、EventTime。 ProcessTime:是在数据抵达算子产生的时间(Flink默认使用ProcessTime) IngestionT…...
T-SQL语言的函数实现
T-SQL语言的函数实现 在数据库管理系统中,函数是一种非常重要的编程结构。SQL Server支持多种类型的函数,包括标量函数、表值函数和系统函数。本文将详细介绍T-SQL中函数的实现,结合实际应用场景,帮助读者深入理解函数的使用方法…...
SpringBoot 使用 Cache 集成 Redis做缓存保姆教程
1. 项目背景 Spring Cache是Spring框架提供的一个缓存抽象层,它简化了缓存的使用和管理。Spring Cache默认使用服务器内存,并无法控制缓存时长,查找缓存中的数据比较麻烦。 因此Spring Cache支持将缓存数据集成到各种缓存中间件中。本文已常…...
Delphi+SQL Server实现的(GUI)户籍管理系统
1.项目简介 本项目是一个户籍管理系统,用于记录住户身份信息,提供新户登记(增加)、户籍变更(修改)、户籍注销(删除)、户籍查询、曾用名查询、迁户记录查询以及创建备份、删除备份共8…...
Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包
1. 引言 在获取了 Ungoogled Chromium 的源代码之后,我们需要安装所有必要的依赖包。这些依赖包对于成功编译 Chromium 至关重要。本文将指导您完成所有必需软件包的安装。 2. 依赖包安装 2.1 使用 Homebrew 安装基础依赖 # 安装 Ninja 构建系统 brew install n…...
开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法
在计算机视觉领域,目标检测是一项关键技术,旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位,但近年来,开放词汇检测(Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…...
json dump避免转义字符反斜杠
笔者在将json序列化到文件时,发现内容包含了反斜杠: [{"video": "MSRVTT-QA\/video_features\/7010.mp4","id": 170859},... ]解决办法是使用ensure_asciiFalse: json.dump(result_items, f, ensure_asciiFa…...
PL/SQL语言的正则表达式
PL/SQL语言的正则表达式详解 在现代软件开发中,数据处理和文本处理是至关重要的环节之一。尤其是在数据库操作中,使用正则表达式来处理字符串数据能大幅提高效率和灵活性。PL/SQL(Procedural Language/SQL)是Oracle数据库的过程性…...
C/C++中头文件time
在C/C中,<ctime>头文件提供了处理时间和日期的函数,这些函数允许你获取当前时间、计算时间差、格式化时间字符串等。以下是一些<ctime>头文件中常用函数的详细介绍和使用示例: time():获取当前时间。 time_t currentT…...
【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列
一、Kafka介绍 kafka是一种高吞吐量、分布式、可扩展的消息中间件系统,最初由LinkedIn公司开发。随着不断的发展,在最新的版本中它定义为分布式的流处理平台,现在在大数据应用中也是十分广泛。 它可以处理大量的实时数据流,被广…...
图像处理|膨胀操作
在图像处理领域,形态学操作是一种基于图像形状的操作,用于分析和处理图像中对象的几何结构。**膨胀操作(Dilation)**是形态学操作的一种,它能够扩展图像中白色区域(前景)或减少黑色区域…...
kali安装
2024年最新kali Linux安装教程(超详细,图文并茂)_kali安装-CSDN博客 【2024年最新版】Kali安装详细教程-CSDN博客 Kali Linux 安装过程 超详细(图文并茂,通用版)-腾讯云开发者社区-腾讯云...
【Python3】异步操作 redis
aioredis 在高版本已经不支持了, 不要用 代码示例 redis 连接池异步操作redis以及接口 import asyncio from sanic import Sanic from sanic.response import json import redis.asyncio as redis from redis.asyncio import ConnectionPool# 创建 Sanic 应用 app…...
C++ vtordisp的应用场景
文章目录 问题代码1. 基本概念回顾2. 应用场景虚继承与虚函数并存的类层次结构 3. 编译器相关考虑 问题代码 #include <iostream> using namespace std;class base { public:base() {}virtual void show() { cout << "base:: show"<<endl; } priv…...
花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%
花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7% 数据集分割 训练组87% 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…...
递归构建树菜单节点
一、获取所有分类上下级信息 /*** 获取所有分类上下级信息*/ public R<List<ResearchTypeTreeVO>> getTypeTreeList(){//获取所有分类数据List<ResearchTypeVO> list ibResearchTypeService.getSuperList(null);List<ResearchTypeTreeVO> researchTy…...
物联网无线芯片模组方案,设备智能化交互升级,ESP32-C3控制应用
无线交互技术的核心在于实现设备之间的无缝连接和数据传输。在智能家居系统中,各种智能设备如智能灯泡、智能插座、智能门锁等,都通过无线网络相互连接,形成一个互联互通的生态。 用户可以通过语音助手、手机APP或其他智能终端,远…...
【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染
【万人同屏插件】 基于Dots技术,高性能实现3D、2D Spine渲染、海量单位锁敌/碰撞检测。同时通过自定义BRG渲染器绕过对Entities包的依赖,也就是不用写ECS代码即可拥有Entities Graphics的高性能渲染,使用传统开发方式BRG接管Renderer组件。 …...
结合前端的响应式开发深入理解设备像素比
前端响应式开发中设备像素比是一个绕不开的概念,彻底理解这个概念,我们首先要梳理清楚屏幕设备的物理像素(Physical Pixel)、逻辑像素(Logical Pixel)以及css像素(px)之前的区别和联…...
QT c++ 按钮 样式 设置按下和松开的背景颜色
上一篇文章,需要自定义类,本文使用样式设置按下和松开的背景颜色。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h" #include <QVBoxLayout> //#include <QLinearGradient>…...
解决Docker冲突问题
错误:docker-ce-cli conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 错误:docker-ce conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行:…...
C++之闭散列哈希表
目录 unordered_set和unordered_map 哈希概念 哈希表基本结构 哈希冲突 线性探测编辑 二次探测 前几期我们学习了红黑树和红黑树的模拟实现,最终使用红黑树封装了map和set。本期开始我们将学习下一个重要的知识点---哈希表,最终使用哈希表封装u…...
微信小程序map组件所有markers展示在视野范围内
注意:使用include-points属性不生效,要通过createMapContext实现 <template><view class"map-box"><map id"map" class"map" :markers"markers" :enable-traffic"true" :enable-poi&…...
Ubuntu平台虚拟机软件学习笔记
Ubuntu平台上常见虚拟机软件 VirtualBox [Download]KVM/QEMU 1. VirtualBox 1.1 查看安装版本 VBoxManage -V2. KVM/QEMU KVM: Kernel-based Virtual Machine QEMU: Quick EMUlator 通义千问: virt-manager 既不是QEMU也不是KVM,而是用于管理和创建…...
EasyExcel数据的导入导出
1.easyExcel简介 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。 EasyExcel 的主要特点如下: 1、高性能:EasyExcel 采用了异…...
CSS Grid 布局全攻略:从基础到进阶
文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式,它可以同时处理行和列 Grid 和Flex有一些类似,都是由父元素包裹子元素使用…...
C语言的语法
C语言的语法与应用探讨 C语言作为一种高效的程序设计语言,自1970年代问世以来,一直在科学计算、系统编程、嵌入式系统等领域中扮演着重要角色。本文将深入探讨C语言的基本语法、数据结构、控制结构以及其在实际应用中的重要性。 一、C语言基础 1.1 数…...
Go中的context 包使用详解
context 包在 Go 中非常重要,特别是在处理并发和超时的场景下,它能让你在多个 goroutine 之间传递取消信号、超时控制或其他控制信息。context 是 Go 并发模型中的一个重要工具,尤其适用于 HTTP 请求、数据库操作、分布式系统等场景。 1. 基…...
通俗易懂之线性回归时序预测PyTorch实践
线性回归(Linear Regression)是机器学习中最基本且广泛应用的算法之一。它不仅作为入门学习的经典案例,也是许多复杂模型的基础。本文将全面介绍线性回归的原理、应用,并通过一段PyTorch代码进行实践演示,帮助读者深入…...
机器学习模型评估指标
模型的评估指标是衡量一个模型应用于对应任务的契合程度,常见的指标有: 准确率(Accuracy): 正确预测的样本数占总样本数的比例。适用于类别分布均衡的数据集。 精确率(Precision): 在所有被预测为正类的样…...
嵌入式软件C语言面试常见问题及答案解析(三)
嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...