数据结构与算法(六) 贪心算法
这篇文章来讲贪心算法(Greedy Algorithm),这是一种特殊的动态规划算法
1、本质
我们在之前的文章中讲过,动态规划可以解决一类具有最优子结构和重叠子问题特征的问题
贪心算法本质上是一种特殊的动态规划算法,因此在看这篇文章前,建议先看之前动态规划的文章
回到正题,先来简单回顾下动态规划,动态规划的核心就是状态转移方程
无论是自上而下利用递归的解题思路,还是自下而上利用递推的解题思路,都可以用状态转移方程串联起来
状态转移方程的关键就是怎么根据较小规模的问题推导出较大规模的问题
在每一步推导的过程中,其实就是在做一件事情,即在当前状态下,尝试所有选择,到达新的状态
然后不断重复这个过程,从已知状态开始直至待求状态结束
跳跃游戏 II | leetcode45
给定一个非负整数数组,初始位于数组的第一个下标,数组中的元素代表所在位置可以跳跃的最大长度
假设一定可以到达数组最后一个位置,问最少需要跳多少次才能到达
为了更好地理解这一过程,这里以跳跃游戏为例,假设给定数组 [2, 3, 1, 1, 4]
,画出递归树如下:
注意到这个问题是满足最优子结构和重叠子问题的,因此必定可以用动态规划来解
这里以自上而下的解题思路为例给出代码
class Solution {
public:vector<int> memo;// 动态规划int dp(vector<int>& nums, int pos) {int n = nums.size();// 边界条件if (pos >= n - 1) {return 0;}// 查备忘录if (memo[pos] != n) {return memo[pos];}// 尝试所有选择,优化点// 写备忘录for (int i = 1; i <= nums[pos]; i++) {memo[pos] = min( memo[pos], dp(nums, pos + i) + 1 );}// 返回return memo[pos];}int jump(vector<int>& nums) {int n = nums.size();memo = vector<int>(n, n); // 初始化备忘录return dp(nums, 0);}
};
动态规划在每一步的推导过程中,都要尝试所有选择,这是因为在某些问题中无法判断哪个选择是最优选择
但是贪心算法无需尝试所有选择,而是可以通过推导得出当前最优解,并且局部最优解可以到达全局最优解
假设现在站在索引 0 的位置上,其可跳长度为 2,那么可能的选择有:跳到索引 1 的位置上、跳到索引 2 的位置上。动态规划的思路是,我不知道这两种做法哪种好,所以我就两种都试一下。而贪心算法建立在更强的约束上,在面临多个选择时,能判断出当前最优解是什么。回到上述例子,索引 1 位置的可跳长度是 3,如果当前选择跳到索引 1,那么下一步最远可以跳到索引 4;同理,索引 2 位置的可跳长度是 1,如果当前选择跳到索引 2,那么下一步最远可以跳到索引 3。明显当前跳到索引 1 是优于跳到索引 2 的,因为下一步可跳位置的选择更多,因此贪心算法就会直接选择跳到索引 1,而不会再去尝试跳到索引 2
class Solution {
public:// 无需递归int jump(vector<int>& nums) {int n = nums.size();int pos = 0; // 当前位置int ans = 0; // 当前步数// 进主流程while (pos < n - 1) {int nxtPos = 0; // 下一位置int maxPos = 0; // 最远位置// 直接判断最优位置// 无需尝试所有选择for (int i = 0; i <= nums[pos]; i++) {if (pos + i >= n - 1) {nxtPos = pos + i;break;}if (maxPos < pos + i + nums[pos + i]) {maxPos = pos + i + nums[pos + i];nxtPos = pos + i;}}pos = nxtPos;ans = ans + 1;}// 返回return ans;}
};
2、核心
贪心算法是一种特殊的动态规划算法,它的约束更强,适用场景更少,但一般来说具有更高的效率
这是因为动态规划需要尝试所有选择,而贪心算法则可以通过推导直接选择当前最优解
贪心算法所解决的问题除了要满足最优子结构外,更重要的是要满足贪心选择性质
所谓的贪心选择性质就是说每次选择仅依赖于之前的选择,而不依赖于后续的选择
理解这个性质很关键,这是贪心算法的核心
在每一步推导过程中,贪心算法在当前状态下做局部最优解以到达下一状态,直至到达待求的问题
对于一个具体的问题,使用贪心算法前必须要证明每一步推导所做的局部最优解能到达全局最优解
凑零钱问题 | leetcode322
给定一个整数数组
coins
表示不同面额的硬币,以及一个整数amount
表示总金额假设每种硬币的数量是无限的,问凑成总金额所需的最少的硬币个数,若无法凑成,则返回
-1
注意,如果盲目使用贪心算法,可能取不到全局最优解,这里以凑零钱问题为例说明这种情况
对于上述问题,使用贪心算法的一个直观思路是:每次选择面额最大的硬币,直至凑满总金额
这对于普通的面额分布确实是可行的,例如 coins = [1, 5, 10], amount = 13
但对于特殊的面额分布就会出现问题,例如 coins = [1, 4, 5 ], amount = 13
如果使用贪心算法,那么选择的硬币依次是 5、5、1、1、1
,但最优选择方式却是 5、4、4
3、框架
贪心算法的框架很简单,总结起来就是一句话:在推导过程中,每次都选择当前最优解
只不过在使用贪心算法时需要特别注意,局部最优解必须能到达全局最优解
4、例题
(1)无重叠区间 | leetcode435
给定一个区间集合,返回移除区间的最小数量,使得剩余的区间互不重叠
基本思路
题目要求移除最少数量的区间使得剩余的区间互不重叠
可转换为选择最多数量的区间使得选择的区间互不重叠
根据贪心算法的思路,每次选择右端点最小且不与先前区间重叠的区间即可
这是因为同样是增加一个区间,如果选择右端点较小的区间,那么以后选择的可能性更多
class Solution {
public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {// 特判int n = intervals.size();if (n <= 0) {return 0;}// 预处理,为了提高效率// 按右端点从小到大排序sort(intervals.begin(), intervals.end(), [](const auto& u, const auto& v) {return u[1] < v[1];});// 每次选择右端点最小且不与先前区间重叠的区间int ans = 1;int end = intervals[0][1];for (int i = 1; i < n; i++) {// 因为数组已提前排序,所以按顺序遍历就能选择右端点最小的区间// 然后只需保证当前区间与先前区间无重叠,也即当前区间的左端点大于等于先前区间的右端点if (intervals[i][0] >= end) {ans = ans + 1;end = intervals[i][1];}}// 返回结果return n - ans;}
};
(2)单调递增的数字 | leetcode738
给定一个整数,返回小于等于这个数字的最大数字,使得返回的数字是单调递增的
基本思路
从折线图的角度来看,从左往后找第一个谷顶,将这个数字减去一,将后面数字改为九
如:13542 -> 13499
若第一个谷顶是平的,则找谷顶最左边的位置,将这个数字减去一,将后面数字改为九
如:15542 -> 14999
class Solution {
public:int monotoneIncreasingDigits(int n) {if (n < 10) {return n;}string s = std::to_string(n);int m = s.size();int i = 0;while (i < m - 1 && s[i] <= s[i + 1]) {i++;}if (i == m - 1) {return n;}while (i > 0 && s[i] == s[i - 1]) {i--;}s[i] = s[i] - 1;i++;while (i < m) {s[i] = '9';i++;}return stoi(s);}
};
相关文章:
C123【模板】扩展域并查集 P1892 [BOI2003] 团伙
视频链接: P1892 [BOI2003] 团伙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 扩展域并查集 #include <iostream> #include <cstring> #include <algorithm> using namespace std;int n,m,a,b,s; int p[2005];int find(int x){return p[x]==x?x:p[…...
Math
Math.random() //随机生成[0,1)的数 Math.round() //四舍五入取整 Math.floor() //向下取整 Math.ceil() //向上取整 生成 [ n, m ) 范围内的随机整数(大于等于n,小于m):Math.floor(Math.random()*(m-n)+n) 生成 [n,m]范围内的随机整数:Math.round(Math.random…...
侯捷C++上期笔记
1.头文件和类、构造函数 c++和c最大的不同在于C++会把数据以及处理数据的函数放到一个对象objects(class)里,不同类之间不可见,类似C中结构体struct 防止头文件重复声明 ifndef complex //当之前没有声明过这个头文件时,才进行后续的声明 define complex (2)补充定义 (…...
Markdown基础语法2024测试
标题一 标题二 标题三 标题四 标题五 标题六 hr 加粗字体 b 斜体字体 i 引用内容 code 超链接 a blockquoteol > li 有序列表ul > li 无须列表pre 代码块p表格标题 内容居中 内容居右col 3 is right-aligned $1600col 2 is centered $12zebra stripes are neat $1p p 源…...
抽象类、多态、绑定(classmethod)和非绑定方法(staticmethod)、反射的四种具体使用、魔法方法
【一】抽象类 【1】什么是抽象与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化【2】抽象类方法所有继承父类的子类必须重写父类的某些方法,这个父类就叫抽象类# 一切皆文件 # 利用abc模块实现抽…...
一个页面从输入URL到加载显示完成,这个过程发生了什么?
目录一、解析URL1、流程2、URL格式:3、示例二、浏览器封装HTTP请求报文1、流程2、HTTP请求报文例子3、封装三、DNS解析1、缓存判断1.1、浏览器缓存1.2、操作系统缓存1.3、路由器缓存2、递归查询至ISP DNS服务器3、迭代查询过程4、保存结果至各级缓存四、建立TCP连接(三次握手…...
数据结构与算法(六) 贪心算法
这篇文章来讲贪心算法(Greedy Algorithm),这是一种特殊的动态规划算法 1、本质 我们在之前的文章中讲过,动态规划可以解决一类具有最优子结构和重叠子问题特征的问题 贪心算法本质上是一种特殊的动态规划算法,因此在…...
LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】
LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】题目描述:解题思路一:转化为0-1背包求解。一:因为每种配料最多可以用两次,所以直接把每种辅料变成两个。二࿱…...
Python封装机制及实现方法
大部分语言都具备 3 个典型特征,即封装、继承和多态。 简单的理解封装(Encapsulation),即在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,将无法直接以“类对象.属性名”&…...
Flet 教程大全合集
Flet是什么 Flet 是一个框架,使您能够轻松地以您喜欢的语言构建实时 Web、移动和桌面应用程序,并与您的团队安全地共享它们。无需前端经验。 Flet有什么优势 Flet有什么特点 在几分钟内从想法到应用程序 用于您的团队、周末项目、数据输入表单、信息亭应用程序或高保真原型…...
mongodb整合springbootQ
SpringBoot整合MongoDB_一个冬天的童话的博客-CSDN博客_mongodb的依赖SpringBoot整合MongoDB的过程https://blog.csdn.net/m0_53563908/article/details/1268980981,环境配置 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId&g…...
【吴恩达机器学习笔记】十一、聚类
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。 📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记&…...
BUUCTF Misc 黑客帝国 [MRCTF2020]你能看懂音符吗 [HBNIS2018]caesar [HBNIS2018]低个头
黑客帝国 下载文件 一长串16进制,复制到在线16进制转文本 很明显是一个RAR文件,使用脚本将16进制转换成文件 import binasciihex_data这里填十六进制数据 outopen(res.rar,wb) out.write(binascii.unhexlify(hex_data)) out.close() 需要密码ÿ…...
基于多目标灰狼算法的冷热电联供型微网低碳经济调度(Matlab代码实现)
👨🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…...
Linux系统启动过程总结
Linux系统启动过程总结 1、Linux 中 rc.local、init.d、rc.x、init 这几个文件(夹)各有什么作用?启动执行的脚本应该均放在 rc.local 中吗? - 知乎 2、/etc/inittab文件详解_muxi01lingyi的博客-CSDN博客_/etc/inittab /etc/inittab文件详解 - 莘莘学子 - 博客园 3、Li…...
防火墙ssh详解讲解
♥️作者:小刘在C站\ ♥️每天分享云计算网络运维课堂笔记,一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放。 目录 一.防火墙配置对外的默认 二.防火墙配置内部ospf 三.防火墙远程管理 四.远程管理…...
Java【String】【StringBuilder】【StringBuffer】你都会用吗
文章目录前言一、常用的方法1、字符串构造2、字符串比较3、字符串查找4、字符串转化5、字符串替换6、字符串分割7、字符串截取二、字符串的不可变性三、StringBuilder、StringBuffer总结前言 在校招和笔试过程中,字符串是相当频繁被问到的话题,在之前的…...
Himall商城Xml帮助类 XML序列化 OSS策略
#region XML序列化 OSS策略 /// <summary> /// XML序列化 /// </summary> /// <param name="obj">序列对象</param> /// <param name="filePath">XML文件路径</param> /// …...
【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】
⛄一、简介 本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理、图像分割以及序列号识别等过程。 1 图像预处理 人民币图像总体上来说灰度偏高, 灰度值基本上都大于150 (对8位25…...
html静态网站基于动漫网站网页设计与实现共计4个页面
HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐…...
Himall商城Zip帮助类压缩文件(Zip)
public class ZipInfo { /// <summary> /// 解/压缩成功状态 /// </summary> public bool Success { get; set; } /// <summary> /// 解/压缩结果信息 /// <…...
MyBatis-Plus条件构造器[常用的模糊查询、排序查询、逻辑查询和指定字段查询案例]
系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#x…...
cubeIDE开发, 如何结合FreeRTOS开发STM32程序
一、STM32CubeIDE使用内置的FreeRTOS 不同于STM32CubeIDE使用像RTThread这些第三方物联网系统,STM32CubeIDE在安装时就已经在MiddleWare中间件一栏直接支持了FreeRTOS操作系统。 既然STM32CubeIDE已经把FreeRTOS深度整合到了自家的系统中,所以移植及使用…...
写给儿子的一封信
最近听闻你成绩有点不理想,爸爸想跟你讲几个想法。 之前学羽毛球的时候,我往往带有期望,希望你能学成像林丹一样。每次你去上课,我也在旁边盯着,后来我发现效果不好,你好像很害怕我说你,学的也不…...
eclipse导入svn项目,项目有红色的感叹号/叉号
eclipse导入svn项目,项目左下角有红色的感叹号/叉号 1.首先调出Problems ( window -> show view-> Problems ) 查看报错信息 其次,看看Project是否开启了项目自动构建(Build Automatically) 2.根据报错信息逐一解决 3.…...
基于 Serverless 架构的 CI/CD 框架:Serverless-cd
近日,Serverless 开发者平台 Serverless Devs 重磅发布基于 Serverless 架构的轻量级 CI/CD 框架 ——Serverless-cd。Serverless-cd 是一款运行在 Serverless 架构上的功能强大而灵活,安全,低成本的 CI/CD 开源框架。该框架基于 Serverless …...
Vue Class与Style绑定
Vue Class与Style绑定1 Class绑定1.1 字符串写法1.2 数组写法1.3 对象写法2 Style绑定2.1 对象写法2.2 数组写法1 Class绑定 在Vue中,如果要为某个元素动态添加某个类,并不会使用document.getElementById等选择器将该元素获得,而是使用v-bin…...
制作一个谷歌浏览器插件,实现网页数据爬虫
一、什么是浏览器插件 浏览器插件,基于浏览器的原有功能,另外增加新功能的工具,是可定制浏览体验的小型软件程序,让用户可以根据个人需要或偏好来定制浏览器。 如拦截网页中的广告、划词翻译、倍速视频等等。 Chrome、edge等浏…...
Java实验七
文章目录前言一、判断E盘指定目录下是否有后缀名为.jpg的文件,如果有就输出此文件名称。二、分别使用字节流和字节缓冲流的两种读取方式实现对图片文件的复制操作并比较两种方式在复制时间上的效率。三、编写一个程序,分别使用转换流、字符流和缓冲字符流…...
Linux文件系统——文件系统、挂载点、目录结构
目录 一、目录结构 1.1 基本介绍 1.2 详细说明目录作用 二、挂载点 一、目录结构 1.1 基本介绍 Linux是一切皆文件,将所用的东西当做文件处理 目录结构就是一个单一的树状结构 整个的目录树只有一个树根:/ 根目录 文件夹分门别类的放到根目录…...
Linux——匿名管道、命名管道及进程池概念和实现原理
目录 一.什么是匿名管道 二.如何使用匿名管道 (一).pipe原理 (二).pipe使用 三.命名管道概念及区别 (一).什么是命名管道 (二).与匿名管道的联系和区别 四.命名管道的使用 &…...
[附源码]计算机毕业设计基于SpringBoot的高校课程知识库
项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...
[网络工程师]-应用层协议-SNMP
简单网络管理协议(Simple Network Management Protocol,SNMP)是在应用层上进行网络设备间通信的管理协议,可以用于网络状态监视、网络参数设定、网络流量统计与分析、发现网络故障等。SNMP基于UDP协议,由SNMP协议、管理…...
BERT 相关资源整理
文章 NLP文档挖宝(3)——能够快速设计参数的TrainingArguments类 使用 PyTorch 进行知识蒸馏 调节学习率 Huggingface简介及BERT代码浅析 使用huggingface的Transformers预训练自己的bert模型FineTuning BERT 预训练 预训练模型:从BERT到XLNet、RoBERTa、ALBERT B…...
tinymce富文本编辑器的使用
tinymce富文本编辑器的使用 1、基本介绍 tinymce富文本官网:https://www.tiny.cloud/ 中文文档:http://tinymce.ax-z.cn/ tinymce-npm地址:https://www.npmjs.com/package/tinymce tinymce英文文档-示例地址:https://www.tin…...
【大数据趋势】12月3日纳指大概率反弹到黄金分割附近,然后下跌,之后进入趋势选择期,恒指会跟随。感觉或许有什么大事情要发生,瞎猜中。
行情核心源头分析: 纳斯达克指数 是否会符合大数据规则,走黄金分割线规则 回顾一下上周大数据预测的趋势,虽有波折但最终趋势预测准确 上周11.20日大数据模拟出一个趋势图,大趋势上需要继续上涨尾期,制造一个背离出现,…...
vue中打印插件vue-print-nb(二)-实例之两种方法——安包之设置一个id和绑定一个对象 下载print.js之ref设置锚点
vue中打印插件vue-print-nb(二)-实例之两种方法——安包之设置一个id和绑定一个对象 & 下载print.js之ref设置锚点 第一种方法 方式1、设置一个id ① 给要打印的部分设置一个 id ② 在打印按钮中添加 v-print"#id名" 1、安装vue-print-nb插件 npm install v…...
[ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(八)暴力破解相关面试题
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
ssm项目整合,简单的用户管理系统
ssm项目整合,简单的用户管理系统项目概述项目搭建创建项目1.创建maven项目2.导入项目依赖及maven资源过滤设置3.添加web支持4.配置tomcat5.配置web发布依赖jar包6.数据库的表创建7.实体类创建7.1 lombok常用注解:dao层1.daoMapper接口创建2.Mapper.xml配置文件3.myb…...
2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校饭堂管理系统8gmjo
这个选题的话其实有很多的,就看你自己能接受怎么样的,比如可以做网站类、系统类、小程序类、安卓app、大数据类等等,这个也要看你个人能力和技术问题,如果技术小白或者有一点点基础的话建议选择网站类和系统类的,如果有…...
Kettle BIGNUMBER TIMESTAMP 类型格式处理
一、问题描述 Kettle默认的格式化处理对BIGNUMBER列 ,把0 会强行写成0.0;对TIMESTAMP列强行写成如2021/12/31 16:51:55.000000000格式。从而引起不必要错误。 二、解决方案 最新的Kettle下载地址:https://udomain.dl.sourceforge.net/project/pentaho/Pentaho-9.3/client…...
Qt实现编辑框失去焦点隐藏功能
今天来为大家分享一个小功能,首先看实现的效果吧~ 功能讲解: QLineEdit控件进行文本编辑,点击保存按钮后,隐藏编辑框和保存按钮,仅展示编辑内容,当鼠标点击空白处时,同样隐藏编辑框、隐藏保存按…...
人工智能内容生成元年—AI绘画原理解析
AIGC体验生成一、背景 2022年AIGC(AI生成内容)焕发出了勃勃生机,大有元年之势,技术与应用迭代都扎堆呈现。在各种新闻媒体处可以看到诸多关于学术前沿研究,以及相应落地的商用案例。可谓出现了现象级的学术-商业共振。…...
基于STM32单片机的温度报警器(数码管)(Proteus仿真+程序)
编号:26 基于STM32单片机的温度报警器(数码管) 功能描述: 本设计由STM32F103单片机最小系统DS18B20温度传感器数码管显示模块声光报警模块独立按键组成。 1、主控制器是STM32F103单片机 2、DS18B20温度传感器测量温度 3、数码管显示温度值&…...
Ubuntu18.04安装ROS、Gazebo、Mavros、PX4、QGC教程
修改国内源 修改apt sudo cp /etc/apt/source.list /etc/apt/source.list.old sudo gedit /etc/apt/source.list输入如下进行保存 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic m…...
Java项目:SSM学生会管理系统
作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员、学生两种角色, 管理员角色包含以下功能: 管理员登陆,管理学生,管理机构,活动信息发布,部门管理,职位…...
资源管理的部分
估算资源的活动的资源目录概述需求:设计思路实现思路分析1.估算的资源的资源的分解结构:获取资源2.虚拟团队3.CPO模型4.团队的5.资源日历建设团队团队一般成长规律形成 指导型管理风格认可奖励培训指标管理团队关于授权情商,领导力等控制资源…...
Docker Swarm 集群
Swarm 是 Docker 公司推出的用来管理docker集群的平台,Swarm 是 Docker 官方容器编排项目,可以在多个服务器或主机上创建容器集群服务,Swarm 自己不运行容器,它只是接受 Docker 客户端发来的请求,调度适合的节点来运行…...
期末复习-软件体系结构
软件体系结构一、软件重用与构件技术软件重用的定义重用驱动的软件的开发过程构件的三种描述模型三种构件分类方法的组织方式,检索方式,刻面分类法二、软件体系结构概述软件体系结构 构件 连接件 约束软件体系结构的四个发展阶段三、软件体系结构风格…...
操作系统—死锁
一、死锁概念 死锁多个进程在运⾏过程中因争夺资源⽽造成的⼀种僵局,占有自身资源并请求对⽅资源。 死锁的产生会导致程序卡死,不解锁程序将永远无法进行下去。 二、死锁原因 ▪ 资源分配不当,系统资源不⾜ ▪ 程序推进的顺序不合适 ▪…...
shell编程(一)
shell 简介 Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。 Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系 统所能理解的指令) 第一个shell脚本 创建…...
Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)
在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互。 因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件。碰撞体是物理组件的一类,它与刚体一起促使碰撞发生。 碰撞体是简单形状,如方块、球形或者胶囊形&…...
随笔荟萃 | sincerity
我们在第一学期中,有一堂经济政治与社会课上,老师给我们讲到共建社会主义和谐社会时,我们现在的社会需要更多的人参与,我又想起班主任陆坚老师对我们全班同学所说的话就是:“我们先做人后做事。”我们如何做人、做人的…...
Windows环境-Redis数据库部署
Windows 10 企业版 Redis redis-6.0.16.tar.gz redis-6.0.16能完全安装成功,试过更高版本的6.2.7和7.0.4安装过程中都有报错。 [Makefile:376: debug.o] Error 1 [Makefile:9: install] Error 2 从网上的资料来看,都说redis6.2和7.0版本问题ÿ…...
优雅的springboot参数校验
前言 在后端的接口开发过程,实际上每一个接口都或多或少有不同规则的参数校验,有一些是基础校验,如非空校验、长度校验、大小校验、格式校验;也有一些校验是业务校验,如学号不能重重复、手机号不能重复注册等ÿ…...
HTML+CSS大作业【传统文化艺术耍牙15页】学生个人网页设计作品
🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…...
菲律宾多艘船只在我黄岩岛邻近海域非法聚集,中国海警加强监视取证,进行现场管制
本文转自【CGTN记者团】;5月16日,菲律宾多艘船只在我黄岩岛邻近海域非法聚集,开展与正常渔业生产作业无关的活动,中国海警加强现场监视取证。菲律宾民间组织多艘船只在我黄岩岛以东海域60海里左右处非法聚集,进行拍照摄像,菲公务船为其伴航并充当“保镖”。菲方在现场通过…...
iOS 数据库升级
使用FMDB结合FMDBMigrationManager(一个三方库)的方式 1、首先自定义一个sql语句的类 #import#import"FMDBMigrationManager.h" interfaceMigration:NSObject (instancetype)initWithName:(NSString*)name andVersion:(uint64_t)version a…...
工厂自动化升级改造(3)-Modbus与MQTT的转换
什么是MQTT,Modbus,见下面文章 工厂自动化升级改造参考(01)--设备通信协议详解及选型-CSDN博客文章浏览阅读608次,点赞9次,收藏6次。>>特点:基于标准的以太网技术,使用TCP/IP协议栈,支持高速数据传输和局域网内的设备通信。>>>特点:跨平台的通信协议,…...
【JavaScript】尺寸和位置
DOM对象相关的尺寸和位置属性 用于获取和修改元素在页面中的尺寸和位置。 只读属性: clientWidth和clientHeight:获取元素可视区域的宽度和高度(padding content),不包括边框和滚动条。 offsetWidth和offsetHeight…...
前端面试题日常练-day04 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 下列哪个 CSS 单位可以根据用户的首选字体大小进行调整? A) pxB) emC) remD) vw2. HTML5 中的<video>元素用于什么? A) 播放音频文件B) 嵌入外部网页内容C) 显示图…...
使用Docker创建verdaccio私服
verdaccio官网 1.Docker安装 这边以Ubuntu安装为例Ubuntu 安装Docker,具体安装方式请根据自己电脑自行搜索。 2.下载verdaccio docker pull verdaccio/verdaccio3.运行verdaccio 运行容器: docker run -it -d --name verdaccio -p 4873:4873 ver…...
如何对接 CommBank 的 EMV 3D Secure (3DS) 流程
如何对接 CommBank 的 EMV 3D Secure (3DS) 流程 在现代电子商务中,确保支付过程的安全性和合规性至关重要。本文将详细介绍如何对接 CommBank 的 EMV 3D Secure (3DS) 流程,以提升交易的安全性并确保符合 PCI 标准。 步骤 1:创建支付表单 …...
汇凯金业:贵金属投资如何操作
投资贵金属虽然可能看起来令人生畏,但只要你知道如何操作,就可能会变得实际可行。以下是操作贵金属投资的基本步骤: 1. 了解市场 第一步是学习贵金属投资的基础知识,了解市场的运作方式,类型的区别(如黄金、白银、铂…...
Maximo Automation Script之间调用
接前面几篇 Automation Script 文章,今天看看 Automation Script 之间怎么互相调用。 这里创建两个 Automation Script,第一个使用 Automation Script 查询数据库获取 workorder 列表,同时使用两个参数pageNum和pageSize来实现翻页ÿ…...
Ubuntu 安装 eclipse 的详细过程及工程创建和编译配置
目录 一、安装环境二、下载依赖 java jdk三、下载 eclipse四、安装4.1 java 环境4.2 eclipse 安装4.3 打开 eclipse 五、配置 eclipse5.1 新建 C 工程5.2 工具链 配置5.3 头文件路径5.4 链接库5.5 编译 一、安装环境 Ubuntu 版本:22.04.3 位数:64-bit 二…...
AI作画算法详解:原理、应用与未来发展
随着人工智能技术的不断发展,AI作画逐渐成为了一个热门话题。AI作画,即利用人工智能算法生成绘画作品,不仅仅是技术的展示,更是艺术与科技结合的创新体现。本文将深入探讨AI作画的核心算法原理,并通过实例帮助读者更好…...
【找到所有数组中消失的数字】leetcode,python
很菜的写法: class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:nlen(nums)#存1-Nnum_1[i for i in range(1,n1)]#预存数num_2[]nums.sort()for i in nums:num_1[i-1]0for i in num_1:if i!0:num_2.append(i)return num_2能过但是…...