栈 | 基本数据结构
参考《算法竞赛进阶指南》、AcWing题库
栈
栈是一种 “后进先出” 的线性数据结构。栈只有一端能够进出元素, 我们一般称这一端为栈顶, 另一端为栈底。添加或删除栈中元素时, 我们只能将其插入到栈顶 (进栈), 或者把栈顶元素从栈中取出 (出栈)。
我们可以在 C++中用一个数组和一个变量 (记录栈顶位置) 来实现栈结构。在之前的章节我们也提到过, 栈是机器实现递归 (深度优先搜索) 的基本结构。
41. 包含min函数的栈 - AcWing题库
题目描述
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。
push(x)–将元素x插入栈中
pop()–移除栈顶元素
top()–得到栈顶元素
getMin()–得到栈中最小元素
样例
12345678MinStack minStack = new MinStack();minStack.push(-1);minStack.push(3);minStack.push(-4);minStack.getMin(); --> Returns -4.minStack.pop();minSt ...
数位DP | 动态规划
参考《算法竞赛进阶指南》、AcWing题库
数位DP
数位统计 DP 是与数字相关的一类计数问题。在这类题目中, 一般给定一些限制条件, 求满足限制条件的第 KKK 小的数是多少, 或者求在区间 [L,R][L, R][L,R] 内有多少个满足限制条件的数。解决方法与例题 “A Decorative Fence” 类似, 先用动态规划进行预处理, 再基于拼凑思想, 用 “试填法” 求出最终的答案。
数位DP基本概念
数位:把一个数字按照个、十、百、千等等一位一位地拆开,关注它每一位上的数字。
如果拆的是 十进制数,那么每一位数字都是 000 ~ 999,其他进制可 类比 十进制。
数位 DP:用来解决一类特定问题,这种问题比较好辨认,一般具有这几个特征:
要求统计满足一定条件的数的数量(即,最终目的为计数)
这些条件经过转化后可以使用「数位」的思想去理解和判断
输入会提供一个数字区间(有时也只提供上界)来作为统计的限制
上界很大(比如 10910^9109),暴力枚举验证会超时
数位DP的基本原理:
考虑人类计数的方式,最朴素的计数就是从小到大开始依次加一。但我们发现对于位数比 ...
Linux GCC 使用入门
document.addEventListener("adobe_dc_view_sdk.ready", function(){
var adobeDCView = new AdobeDC.View({clientId: "2d2b696ba4bd4633adaabd5eb859d3c0", divId: "adobe-dc-view"});
adobeDCView.previewFile({
content:{location: {url: "https://blog.zgzheng.top/file/gcc14690.pdf"}},
metaData:{fileName: "gcc.pdf"}
}, {embedMode: "IN_LINE"});
});
什么是gcc
gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。
gcc的特点
gcc是一 ...
NFV 网络功能虚拟化
什么是NFV?
网络功能虚拟化(Network Functions Virtualization,NFV)是一种关于网络架构的概念。我们平时使用的x86服务器由硬件厂商生产,在安装了不同的操作系统以及软件后实现了各种各样的功能。而传统的网络设备并没有采用这种模式,路由器、交换机、防火墙、负载均衡等设备均有自己独立的硬件和软件系统。NFV借鉴了x86服务器的架构,它将路由器、交换机、防火墙、负载均衡这些不同的网络功能封装成独立的模块化软件,通过在硬件设备上运行不同的模块化软件,在单一硬件设备上实现多样化的网络功能。
NFV架构
NFV架构是欧洲电信标准协会(ETSI)提出的用于定义NFV实施标准的一种标准架构。NFV的理念是将标准化的网络功能应用于统一制式的硬件上。不同于传统物理设备中软件与硬件强绑定的关系,在NFV架构中,实现各种网络功能的标准化软件必须能够应用在同一台硬件设备上。这就要求NFV需要有一个统一的标准。NFV架构由基础网络功能虚拟化架构、虚拟网络功能功能、管理自动化及网络编排三个部分组成:
基础网络虚拟化架构(Network Functions Virtualizat ...
SDN 软件定义网络
什么是SDN?
软件定义网络(Software-defined Networking,简称SDN)技术是一种网络管理方法,它支持动态可编程的网络配置,提高了网络性能和管理效率,使网络服务能够像云计算一样提供灵活的定制能力。SDN将网络设备的转发面与控制面解耦,通过控制器负责网络设备的管理、网络业务的编排和业务流量的调度,具有成本低、集中管理、灵活调度等优点。
为什么需要SDN
传统网络的局限
传统网络是一个分布式的网络,在二层网络中,设备通过广播的方式传递设备间的可达信息。在三层网络中,设备间通过标准路由协议传递拓扑信息。这些模式要求每台设备必须使用相同的网络协议,保证各厂商的设备可以实现相互通信。随着业务的飞速发展,用户对网络的需求日新月异,一旦原有的基础网络无法满足新需求,就需要上升到协议制定与修改的层面,这样就会导致网络设备升级十分缓慢。
传统网络为了适应不同的需求和场景,发展也越来越复杂。部署一个传统网络往往需要使用到很多协议,由于标准协议中往往存在一些未明确的地方,导致各厂商的实现有差异。
传统网络以单台设备为单位,以命令行的方式进行管理。网络管理和业务调度时效率低下,运维成 ...
树形DP | 动态规划
参考《算法竞赛进阶指南》、AcWing题库
给定一棵有 NNN 个节点的树 (通常是无根树, 也就是有 N−1N-1N−1 条无向边), 我们可以任选一个节点为根节点, 从而定义出每个节点的深度和每棵子树的根。在树上设计动态规划算法时, 一般就以节点从深到浅 (子树从小到大) 的顺序作为 DP 的 “阶段”。 DP 的状态表示中, 第一维通常是节点编号 (代表以该节点为根的子树)。大多数时候, 我们采用递归的方式实现树形动态规划。对于每个节点 xxx, 先递归在它的每个子节点上进行 DP,在回溯时,从子节点向节点 xxx 进行状态转移。
285. 没有上司的舞会
题目描述
Ural 大学有 NNN 名职员,编号为 1∼N1 \sim N1∼N。
他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。
每个职员有一个快乐指数,用整数 HiH_iHi 给出,其中 1≤i≤N1 \le i \le N1≤i≤N。
现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。
在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个 ...
利用ImgBot自动压缩Github图床,加速访问
简介
ImgBot 是一个为你节省时间优化图片的机器人。优化图片意味着不牺牲图片质量和更小的文件大小。 安装后不久,你会收到一个优化图片的 pull request。合并这个 pull request 就行了!Imgbot 会伴随你的工作,保持图片的优化。 ImgBot 默认使用无损压缩。
安装 ImgBot
首先来到 GitHub Market,点击 Set up a free trial
然后选择 Open Source (也就是免费的那个方案),然后点击 Install it for free
检查一下订单,点击 Complete order and begin installation
确认一下 ImgBot 可以访问的仓库 (默认 All),以及授予给 ImgBot 的权限,点击 Install
看到这个页面就说明 ImgBot 服务已经成功的安装到你的 GitHub 账户上了
使用 ImgBot 压缩图片
将 ImgBot 服务安装到你的 GitHub 账户上后,ImgBot 就会自动递归寻找并压缩 Git 仓库中的图片文件 (如果图片比较多,这一步可能回花费几 ...
区间DP | 动态规划
参考《算法竞赛进阶指南》、AcWing题库
区间DP
到目前为止, 我们介绍的线性 DP一般从初态开始, 沿着阶段的扩张向某个方向递 推, 直至计算出目标状态。区间 DP 也属于线性 DP 中的一种, 它以 “区间长度” 作为 DP 的 “阶段”, 使用两个坐标 (区间的左、右端点) 描述每个维度。在区间 DP 中, 一个状态由若干个比它更小且包含于它的区间所代表的状态转移而来, 因此区间 DP 的 决策往往就是划分区间的方法。区间 DP 的初态一般就由长度为 1 的 “元区间” 构成。 这种向下划分、再向上递推的模式与某些树形结构, 例如第 0×430 \times 430×43 节的线段树, 有很大 的相似之处。我们把区间 DP 作为线性 DP 中一类重要的分支单独进行讲解, 将使读者 更容易理解下一节树形 DP 的内容。同时, 借助区间 DP 这种与树形相关的结构, 我们 也将提及记忆化搜索一其本质是动态规划的递归实现方法。
282. 石子合并
题目描述
设有 NNN 堆石子排成一排,其编号为 1,2,3,…,N1,2,3,…,N1,2,3,…,N。
每堆石子有一定的质量, ...
状态压缩DP | 动态规划
参考《算法竞赛进阶指南》、AcWing题库
状态压缩DP
在 0×510 \times 510×51 节 “线性 DP” 中, 我们提到, 动态规划的过程是随着 “阶段” 的增长, 在每个状态维度上不断扩展的。在任意时刻, 已经求出最优解的状态与尚末求出最优解的状态在各维度上的分界点组成了 DP 扩展的 “轮廓”。对于某些问题, 我们需要在动态规划的 “状态” 中记录一个集合, 保存这个 “轮廓” 的详细信息, 以便进行状态转移。若集合大小不超过 NNN, 集合中每个元素都是小于 KKK 的自然数, 则我们可以把这个集合看作一个 NNN 位 KKK 进制数, 以一个 [0,KN−1]\left[0, K^{N}-1\right][0,KN−1] 之间的十进制整数的形式作为 DP 状态的一维。这种把集合转化为整数记录在 DP 状态中的一类算法, 被称为状态压缩动态规划算法。
0×010 \times 010×01 节的例题 “最短 Hamilton 路径” 已经向读者展示了简单的状态压缩 DP 思想。在求解最短 Hamilton 路径时, 整个状态空间可看作 NNN 维, 每维代表一 ...
Hexo自动提交URL到百度、必应、谷歌
来源@Lete大佬教程,并对自己配置时遇到的问题进行更新
介绍
由于 Bing 和 Google 只爬 sitemap.xml 收录已经很快了,但总是爬 sitemap.xml 效率肯定没 Api 提交的快。
自己写了 Bing 的定时自动提交,目前还不支持 Google 定时自动提交,因为 Google 的 API 提交方式很鸡肋
Google indexing API 有两个问题
账户安全密钥不能被泄露 (谷歌只支持这种提交方式,对于没有后台的 hexo 来说是很致命的)
API 提交只能使用 json,而这个 json 格式只能包含一个网站 url 链接
不能多 url 放到一个 json 里,所以需要多次请求提交 (baidu、bing、只需一次请求)
Google 最优提交方案是本地提交 (能解决以上两个问题)
安装插件
1npm i hexo-seo-autopush --save
配置
在 hexo 的 config.yml 里添加
hexo-seo-autopush 配置
1234567891011121314# enable: 开启/关闭 推送# cou ...