算法 ST表
目录
前言
一,暴力法
二,打表法
三,ST表
四,ST表的代码实现
总结
前言
ST表的主要作用是在一个区间里面寻找最大值,具有快速查找的功能,此表有些难,读者可以借助我的文章和网上的课程结合一起来看,多思考,此文章是逐层深入到ST表,为什么会有ST表,不会直接讲ST表
一,暴力法
问题切入:区间问题求最值
n个数字,在一个区间[ L,R ]中寻找MAX值,此过程进行m次查阅
例子:9 3 1 5 6 0 8
0 ~ 5 max为9 4~5 max为6 我们不难看出,这个是通过我们人的眼睛扫描最后比较得出得答案,那我们不难写出这个过程的代码
#include<iostream> #include<algorithm> #include<vector> using namespace std;int main() {vector<int>arr = { 9,3,1,5,6,0,8 };int ans, L, R;cin >> L >> R;for (int i = L;i <= R;i++) {ans = max(ans, arr[i]);}cout << ans << endl;return 0; }
我们想一下我们的人眼睛,我们人眼睛扫描一遍是不是需要用for循环遍历一遍,然后大脑不断地进行比对,最终得出最值,此类方法我们称之为暴力法
暴力法:时间复杂度O(nm)
我们不妨把这个复杂度放入到生活中里面实践一下
假设有100个数,同时进行10^7次查找,最后我们地测评集为10^9
1秒里面地测评集合是10^7~10^8,那么这个肯定不行
二,打表法
我们根据上面不难发现时间复杂度是O(nm),那么我们要优化这个时间复杂度的话,不难看出是n和m相差太大了,我们想把这个m换掉,换成小一点的,那么就有了打表法,也就是动态规划的思想
我们是每次选取两个数字,那么不就是利用二项式不就好了
我们这里就是
每次从n个数字选取两个数字,最后就是上面这个结果
我们可以列出表的打法的方程式子
i是左端点,j是右端点
#include<iostream> #include<algorithm> #include<vector> using namespace std;int main() {vector<int>arr = { 9,3,1,5,6,0,8 };const int n = 7;vector<vector<int>>ans(n, vector<int>(n, 0));for (int i = 0;i < n;i++) {for (int j = i;j < n;j++) {ans[i][j] = max(ans[i][j - 1], arr[j]);}}int L, R;cin >> L >> R;cout << ans[L][R] << endl; }
我们看的出来,这个就是一个打印一个表,这个表都有对应得数据,但是我这个代码有个缺陷,就是你刚刚开始得数组不可以为负数,当我们刚刚开始把数字填进去的时候,是与0进行比较填入的,还好这个是容器,会把没有用的空间排出去,要不然就会导致空间浪费,比如我们打一个4*4的表
然后容器就会解决这个问题,类似于边长数组,我们再来计算一下时间复杂度和空间复杂度
时间复杂度:O(n^2+m)
空间复杂度:O(n^2)
我们可以看到这个表的作用是把操作数字和表的行列的数字分开了,不是相乘而是相加,但是当n很大的时候不仅时间炸,这个空间也会炸,所以即使我们利用了表分开,但是结果还是不怎么好,但是我们该怎么利用这个表的思想来进行进一步的优化呢?
三,ST表
这个东西就有点点难,读者请认真理解
ST表也叫稀疏表,是把上面那个表进行稀疏,有些数据不应该要的就不要,有些数据该要才要按不思想
分析上面那个表的思想:按步思想
然后这个就是每次推断,把每一个可能都写出来
倍增思想
ST表的思想不是这样的,是利用稀疏,也就是倍增思想
不断地取一半取一半就好了,我们拿一个例子把,这样看的更加清晰
我们把这个ST表叫做dp[ i ][ j ]从i开始,长度为2^j的最大值区间
询问操作
[ 0 ][ 5 ]区间找最大值
[ 0 ][ 13 ]区间找最大值
我画了两个不同的图,咋们可以发现什么不,这个其实就是区间的拼凑,拼出一个最大的区间,这个相比较上一个方法其实这个就是类似于一个二分法的方法优化,我下面写的8,4,2其实是想告诉读者这个2^j这个j怎么写,那么不就是[0][3],[8][2],[12][1],可以这么理解,这个i就是左端点的值,这个j就是它的步长
你以为这个是巧合么?其实并不是,这个其实就是二进制
这个就是那个二进制转十进制公式,是不是很神奇,这个就是运用了这个思想,我们把这个长度(也就是十进制数)转化为二进制数字的和(也就是像后面那样的系数*2的几次方)这个系数不是为1就是0
时间复杂度和空间复杂度
我们来计算一下时间复杂度和空间复杂度
时间复杂度:O(m)
空间复杂度:O(n)
你别小看这个log,你自己算算就知道这个可以减很多很多,至于这个怎么计算出这个log,我的文章二叉树里面有讲,感兴趣可以取看看优化
但其实这个是可以优化掉的,我为什么要每次都是不重叠呢?我重叠找出的答案都是一样的,那我们重叠的话,那不就是可以减少很多的事情而且答案还是一样的
这样不是更好么,节省时间复杂度对比0~7和6~13的值就好了,记住这个两个地方的步长都是8,始终记住2^j,这个一定是2的j次方的数字
如何找到那个最长的2的次方的数字呢?我们可以借助log
这个x是这个区间的长度,我们这样就可以获得对应的长度了
我们利用这个思想的话,有两个情况,一,重合 二,相交
思想
我们用一下思想
长度:len=R-L+1
步长:j=(x为区间的长度)
最值:ans=max(dp[L][ j ],dp[R-2^j+1][j])
这个里没有听懂没事,我们可以看下面代码再来看这个,这里说没看懂是这个思想上面这个三行
四,ST表的代码实现
#include <iostream> #include <vector> #include <cmath> #include <algorithm>using namespace std;vector<vector<int>> dp; // dp[i][j] 表示左端点为 i 长度为 2^j 这样的区间,也就是 [i, i+2^j-1]int query(int l, int r) {int j = (int)log2(r - l + 1);return max(dp[l][j], dp[r - (1 << j) + 1][j]); }int main() {vector<int> arr = { 9, 3, 1, 7, 5, 6, 0, 8 };const int n = 8;dp = vector<vector<int>>(n, vector<int>((int)log2(n) + 5, 0));for (int i = 0; i < n; i++) dp[i][0] = arr[i];for (int j = 1; j <= log2(n); j++)for (int i = 0; i + (1 << j) - 1 < n; i++)dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);int l, r;while (cin >> l >> r) {cout << query(l, r) << endl;}return 0; }
这个可能有点难以理解,我们来具体分析一下
容器的定义
dp = vector<vector<int>>(n, vector<int>((int)log2(n) + 5, 0));
这个是构成一个二维的数组利用容器,我这个后面其实不用+5的,这个知识以防万一数组溢出了,所以我就加了个5,然后就是创建一个n*(n+5)的数组,然后初始化为0
为什么是log2(n)呢?
其实我们前面算出了这个空间复杂度,其实他就是按照步长来的,上面也有十进制转二进制的公式
,然后就是我们这个j本就是表示长度,也就是列,所以我们这么写情况一
for (int i = 0; i < n; i++) dp[i][0] = arr[i];
这个是把每一个数字输入到表里面,为了后面的区间的划分建立好基础
情况二
for (int j = 1; j <= log2(n); j++)for (int i = 0; i + (1 << j) - 1 < n; i++)dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
这里就是j就是所说的步长了,为什么这个j再外面,而这个i再里面呢?
我们要知道我们再情况一排版的时候,是同列不同行进行排列的,也就是说我们后面编写这个ST表的时候,我们是需要不断地划分区间,就像上面倍增思想那样,那么我们就要这样
我们是这样取排序的,所以我们就要把这个j放到外面
i表示右端点这个位移大家应该都知道吧,不知道的话我也来讲一讲吧
位移左移操作符
<<
被用来计算2的幂次方。左移操作符将一个数的二进制表示向左移动指定的位数,相当于将该数乘以 2n,其中 n 是移动的位数。例如,
1 << 1
等于2
(十进制的二进制表示是1
,左移一位变成10
,即2
),1 << 2
等于4
(十进制的二进制表示是1
,左移两位变成100
,即4
)为什么这个后面要写成i + (1 << (j - 1))这样子?
其实这个就是我前面所说的i+步长的话,就是找到对对应的数字,然后我们来考虑这个,注意这个是初始化表不是正式区间的最值了,我们这个后面j-1表示对于正在输入列地前面一列,这个i表示步长对对应的值查询
int j = (int)log2(r - l + 1);return max(dp[l][j], dp[r - (1 << j) + 1][j]);
这个j呀在这里就是表示长度啦右端点减去左端点+1,为什么要加1?因为有0这个点,长度是会多一个单位的
返回,怎么确定这个行和列呢?
行
也就是这里的L和R-(1<<j)+1
这里就是表示这个左端点和右端点,然后在这个里面寻找最值
列
这里就是已经确定这个答案在哪一行了,也就是步长
步长决定这个在哪一列找到
行就是我们之前不是细分了很多下区间吗?我们以1,2,3,4,5,6,7,8为例子讲一下
我们把这个1,2,3,4,5,6,7,8制作为ST表是这样的
我们利用上面的思想我们来找一下1~5的最大值,那就是这样的
我们在小区间里面组成大区间
总结
我们通过暴力法 打表法 ST表的优化与不优化来讲的
然后就是ST表的实现,主要是怎么打表和查询
打表:
打表主要是先把值都附在表中,然后根据这个表的初始化情况,利用步长来解决,也就是步长为2,4,8,16逐个进行打表
查询:
这里查询主要是逐个列是我们的最大长度,利用log和长度来解决
行是利用左端点和右端点,左端点不变,右端点-步长+1,这个+1下面可以解释,我们在计算len,就是区间总长度,为什么不是r-len+1,因为我们有j已经把这个这个定位到后面去了,不是1,2,3,4,5,6,7,8这个了,而是4,5,6,7,8这个,所以我们就要减去2^j才可以正确的解出答案,也就是减去对应得找到那个数字
相关文章:
算法 ST表
目录 前言 一,暴力法 二,打表法 三,ST表 四,ST表的代码实现 总结 前言 ST表的主要作用是在一个区间里面寻找最大值,具有快速查找的功能,此表有些难,读者可以借助我的文章和网上的课程结…...
【AI论文】使用滑动磁贴注意力实现快速视频生成
摘要:扩散变换器(DiTs)凭借3D全局注意力机制在视频生成领域达到了最先进水平,但其计算成本高昂——生成一段仅5秒的720P视频时,仅注意力计算就占用了总推理时间的945秒中的800秒。本文引入了滑动磁贴注意力(…...
MAAS | Ollama 搭建本地 AI 大模型 deepseekWeb 界面调用
目录 一、环境准备二、安装 Ollama三、下载并部署 DeepSeek 模型四、简单交互五、通过 Web 界面调用大模型 在当今人工智能快速发展的时代,本地部署大语言模型赋予了用户更高的灵活性和个性化服务体验。本文介绍了如何准备环境、安装Ollama框架、下载并部署DeepSeek…...
Arduino 第十一章:温度传感器
Arduino 第十一章:LM35 温度传感器 一、LM35 简介 LM35 是美国国家半导体公司(现德州仪器)生产的一款精密集成电路温度传感器。与基于热力学原理的传统温度传感器不同,LM35 能直接将温度转换为电压输出,且输出电压与…...
普通用户授权docker使用权限
1、检查docker用户组 sudo cat /etc/group |grep docker 若显示:docker:x:999: # 表示存在否则创建docker用户组: sudo groupadd docker2、查看 /var/run/docker.sock 的属性 ll /var/run/docker.sock 显示: srw-rw---- 1 root root 0 1月…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
Python中是否有类似R语言中rds的功能,可将对象保存为文件?
在数据分析和科学计算领域,R语言和Python都是极为流行的编程语言。它们各自拥有独特的优势和丰富的库资源,使得数据科学家们能够高效地处理和分析数据。在R语言中,RDS(R Data Serialization)格式是一种非常方便的方式&…...
LabVIEW无人机飞行状态监测系统
近年来,无人机在农业植保、电力巡检、应急救灾等多个领域得到了广泛应用。然而,传统的目视操控方式仍然存在以下三大问题: 飞行姿态的感知主要依赖操作者的经验; 飞行中突发的姿态异常难以及时发现; 飞行数据缺乏系统…...
车联网安全入门一:了解CAN总线及环境模拟
准备打工了,工作内容和车联网安全相关,本来想着和app分析有较大关系,但是还涉及到很多关于汽车渗透测试相关的知识,由于之前并没有接触过,就借此机会和大家来学习一下。 ## CAN基础知识 ### CAN(Controller…...
hive spark读取hive hbase外表报错分析和解决
问题现象 使用Spark shell 操作hive关联Hbase的外表导致报错;hive使用tez引擎操作关联Hbase的外表时报错。 问题1:使用tez或spark引擎,在hive查询时只要关联hbase的hive表就会有问题其他表正常。 “org.apache.hadoop.hbase.client.RetriesExhaustedException:Can’t get …...
【MQ】RabbitMQ 高可用延时功能的探究
延迟消息如果使用延时交换机来实现,如果数据量过大,就会很占 CPU 资源,轻则时间误差大,重则 RabbitMQ 宕机 一、针对一个 RabbitMQ 节点 (1)利用队列 ttl,将延迟消息根据 delay 的时间进行分级…...
网络安全讲座之一:网络安全的重要性
第一讲内容主要对于安全的发展以及其重要性作了简明的阐述,并介绍了一些国内外知名的网络安全相关网站,并对于如何建立有效的安全策略给出了很好的建议,并让大家了解几种安全标准。 媒体经常报道一些有关网络安全威胁的令人震惊的事件&am…...
flutter ListView Item复用源码解析
Flutter 的 ListView 的 Item 复用机制是其高性能列表渲染的核心,底层实现依赖于 Flutter 的渲染管线、Element 树和 Widget 树的协调机制。以下是 ListView 复用机制的源码级解析,结合关键类和核心逻辑进行分析。 1. ListView 的底层结构 ListView 的复…...
基于java手机销售网站设计和实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
HTML 左右联动高亮示例
HTML 左右联动高亮示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>左右联动高亮示例</titl…...
如何本地部署DeepSeek
第一步:安装ollama https://ollama.com/download 打开官网,选择对应版本 第二步:选择合适的模型 https://ollama.com/ 模型名称中的 1.5B、7B、8B 等数字代表模型的参数量(Parameters),其中 B 是英文 B…...
虚拟机+Docker配置主机代理和常见配置
完整配置流程如下: 配置虚拟机使用宿主机代理: # 设置环境变量(宿主机IP为192.168.100.1,代理端口7890) export http_proxyhttp://192.168.100.1:7890 export https_proxyhttp://192.168.100.1:7890# 测试代理是否生…...
996引擎-问题处理:盟重传送石问题
996引擎-问题处理:盟重传送石问题 问题解决方案补充:回城卷参考资料问题 今天添加了个新地图,由于这个版本只有盟重传送石没设计回城卷。 所以怎么搞都回不到新地图的回城点。(当时也是懵逼了都忘记它叫 盟重 传送石`) 分析 先看一下道具表的配置。 [@StdModeFuncX] 表示…...
从零到一学习c++(基础篇--筑基期七-vector与迭代器)
从零到一学习C(基础篇) 作者:羡鱼肘子 温馨提示1:本篇是记录我的学习经历,会有不少片面的认知,万分期待您的指正。 温馨提示2:本篇会尽量用更加通俗的语言介绍c的基础,用通俗的语言去…...
PKI及SSL协议分析
PKI的基本组成,完整的PKI系统必须具有权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应用接口(API)等基本构成部分,构建PKI也将围绕着这五大系统来着手构建。 任务一:搭建CA服务器 本任务初步了…...
请解释 JavaScript 中的函数式编程,优缺点是什么?
一、对JavaScript函数式编程的理解 函数式编程(Functional Programming,FP)是一种编程范式,它将计算视为数学函数的求值,并避免改变状态和可变数据。 在JavaScript中,函数式编程具有以下几个关键特性&…...
WPS接入DeepSeek模型
1.wps 下载安装 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 (最好是安装最新的wps) 2.offieceAi工具下载安装 软件下载 | OfficeAI助手 下载后安装下载下来的两个工具。安装路径可以自行修改 3.打开WPS,点击文件-》 选项-》信任中心 勾…...
头条百度批量采集软件说明文档
旧版说明文档《头条号文章批量采集软件4.0版本说明文档!头条/微头条文章批量采集》 头条的采集软件已经更新了好多个版本了,一直没有做详细的介绍文档,最近更新了一些功能进去,一块来写一下说明文档。 1、主界面 2、头条作者采集…...
网络安全架构师怎么考 网络安全 架构
安全通信网络 随着现代技术的不断发展,等级保护对象通常通过网络实现资源共享和数据交互,当大量的设备连成网络后,网络安全成了最为关注的问题。按照“一个中心,三重防御”的纵深防御思想,边界外部通过广域网或城域网…...
Vue 3 30天精进之旅:Day 21 - 项目实践:打造功能完备的Todo应用
前言 经过前20天的学习,我们已经掌握了Vue 3的核心概念、组合式API、路由、状态管理等关键技术。今天将通过一个完整的项目实践——Todo应用,将所学知识融会贯通。我们将为Todo应用添加编辑、删除、过滤等进阶功能,并优化代码结构。 一、项目…...
2025年02月11日Github流行趋势
项目名称:unsloth 项目地址url:https://github.com/unslothai/unsloth项目语言:Python历史star数:27175今日star数:1024项目维护者:danielhanchen, shimmyshimmer, Erland366, Datta0, xyangk项目简介&…...
嵌入式硬件篇---原码、补码、反码
文章目录 前言简介八进制原码、反码、补码1. 原码规则示例问题 2. 反码规则示例问题 3. 补码规则示例优点 4. 补码的运算5. 总结 十六进制原码、反码、补码1. 十六进制的基本概念2. 十六进制的原码规则示例 3. 十六进制的反码规则示例 4. 十六进制的补码规则示例 5. 十六进制补…...
PCM与G711A互转
PCM与G711A互转 工具类(Java)调用方法(Kotlin) 工具类(Java) public class G711Code {private final static int SIGN_BIT 0x80;private final static int QUANT_MASK 0xf;private final static int SEG…...
MapReduce简单应用(三)——高级WordCount
目录 1. 高级WordCount1.1 IntWritable降序排列1.2 输入输出格式1.3 处理流程 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 高级WordCount2.4 结果 参考 本文引用的Apache Hadoop源代码基于Apache许可证 2.0,详情请参阅 Apache许可证2.0。 1. 高级WordCo…...
C# 数据验证Regex
Regular Expression,简称 Regex,是一种用于匹配和处理文本的强大工具。它通过定义特定的模式,可以用来搜索、替换或提取字符串中的特定内容。 先引入命名空间 using System.Text.RegularExpressions; Intege(整数) 必须是正整数 //必须是正整数publi…...
Jenkins+gitee 搭建自动化部署
Jenkinsgitee 搭建自动化部署 环境说明: 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本,不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…...
C/C++混合读入cin与scanf问题
因为C/C在某些时候是如此的融洽,以至于很多时候可能会混用,就比如 scanf与cin或getline(cin, ..)这是一个严肃的问题。因为随意混用,可能导致,在某些特殊时刻,读取混乱。所以本篇的意义就是为了缕清混用机制 一、scan…...
矩阵 NFC 碰一碰发视频源码搭建技术解析,支持OEM
一、引言 在移动互联与物联网飞速发展的当下,NFC(Near Field Communication,近场通信)技术凭借其便捷、快速的数据传输特性,在众多领域得到广泛应用。本文将深入探讨如何搭建矩阵 NFC 碰一碰发视频的源码,…...
Log4j定制JSON格式日志输出
1.前言 log4j是Java中一个强大的日志记录框架,通过简单的配置便可以在程序中进行日志打印与记录。关于log4j博主最近碰到一个需求,需要将程序运行过程中的日志按给定的json模板输出,本文记录一下log4j如何配置json格式的日志打印。 2.日志配…...
Spring依赖注入方式
写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭&#x…...
【C++八股】什么是函数指针,如何定义和使⽤场景
函数指针是指向函数的指针变量,它存储的是一个函数的地址,允许通过指针间接调用函数。使用函数指针可以动态地选择和调用函数,或者将函数作为参数传递给其他函数。 1. 函数指针的定义 函数指针的定义与普通指针稍有不同。它需要声明指向特定…...
DeepSeek 入驻 Cursor —— 表现能否超越 Claude?
DeepSeek 刚刚在 Cursor 平台上线了它的两款模型:DeepSeek V3 和 R1。目前,许多开发者(包括我们在内)主要依赖 Claude 3.5 Sonnet(最新版本 claude-3-5-sonnet-20241022)作为主要语言模型,因此我…...
skynet-src/atomic.h:25:23: 致命错误:stdatomic.h:没有那个文件或目录
skynet-src/atomic.h:25:23: 致命错误:stdatomic.h:没有那个文件或目录 故事背景,又接了一个新项目,要搞开发环境啊。skyent的框架。ubuntu已经跑起来了,但是内网是centos的跑不起来。只能怀疑是环境问题了࿰…...
docker compose部署nexus
整个工具的代码都在Gitee或者Github地址内 gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github:GitHub - ZeroNing/solomon-parent: 这个项目主要是…...
IBM服务器刀箱Blade安装Hyper-V Server 2019 操作系统
案例:刀箱某一blade,例如 blade 5 安装 Hyper-V Server 2019 操作系统(安装进硬盘) 刀箱USB插入安装系统U盘,登录192.168... IBM BlandeCenter Restart Blande 5,如果Restart 没反应,那就 Power Off Blade 然后再 Power On 重启后进入BIOS界面设置usb存储为开机启动项 …...
Python的顺序结构和循环结构
文章目录 一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(c)多分支 if-elif-elif-...-else (3)注意事…...
[python SQLAlchemy数据库操作入门]-30.掌握 SQLAlchemy:优雅应对数据库异常的艺术
哈喽,大家好,我是木头左! 捕获和处理 SQLAlchemy 异常 在实际应用中,需要根据不同的异常类型采取不同的处理策略。下面是一个示例,展示了如何捕获和处理 SQLAlchemy 的异常。 from sqlalchemy import create_engine, Column, Integer, String, exc from sqlalchemy.ext.…...
编译和链接【三】
文章目录 编译和链接【三】前言系列文章入口编译过程词法分析语法分析语义分析生成中间代码汇编链接 编译和链接【三】 前言 在我大一的时候, 我使用VC6.0对C语言程序进行编译链接和运行 , 然后我接触了VS, Qt creator等众多IDE,…...
11苍穹外卖之Apache ECharts(数据可视化图表、后端传数据)
课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现:数据统计 数据统计效果图: 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动&#…...
Grafana-使用Button修改MySQL数据库
背景 众所周知,Grafana是一个用来展示数据的平台,但是有时候还是会有需求说能不能有一个按钮,点击的时候再对数据库进行修改,从而达到更新数据的效果 经过多方查证,终于实现了一个简单的,点击button执行sq…...
C++11语法及库详解
目录 一、c11语法 1. 自动类型推导 (auto) 2. 基于范围的 for 循环 3. Lambda 表达式 4. 智能指针 5. 右值引用和移动语义 6. nullptr 关键字 7. constexpr 关键字 8. 初始化列表 9. std::thread 多线程支持 10. std::function 和 std::bind 11. std::unordered_map…...
数据库,数据表的增删改查操作
一.数据库的基本操作 (1)创建数据库 创建数据库就是在数据库系统中划分一块存储数据的空间,方便数据的分配、放置和管理。在MySQL中使用CREATE DATABASE命令创建数据库,语法格式如下: CREATE DATABASE数据库名称; 注:…...
Python——批量图片转PDF(GUI版本)
目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…...
RocketMQ面试题:原理部分
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
中间件-安装Minio-集成使用(ubantu-docker)
目录 1、安装docer 2、运行以下命令拉取MinIO的Docker镜像 3、检查当前所有Docker下载的镜像 4、创建目录 5、创建Minio容器并运行 6、SDK操作 FileUploader.java 1、安装docer 参考这篇:Linux安装Docker 2、运行以下命令拉取MinIO的Docker镜像 docker pull…...