多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG

Title: 多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG


文章目录

  • I. 向量叉乘的矩阵转换恒等式
  • II. 符号计算 Maxima 程序推导
  • III. 推论和关联公式的说明
    • 1. 推论
    • 2. 应用于对极几何中基本矩阵推导
    • 3. 应用于基本矩阵与单应矩阵关系
    • 4. 与刚体运动旋转矩阵作用的关系
    • 附 - 关于摄像机矩阵广义逆的说明
  • IV. 小节
  • 参考文献


多视图几何读书笔记

[1] 对极约束及其性质 —— 公式详细推导

[2] [笔记] 仿射变换性质的代数证明

[3] 多视图几何中向量叉乘的矩阵转换恒等式 Matrix Transformation for Cross Product in MVG ← \leftarrow 本篇


I. 向量叉乘的矩阵转换恒等式

“Multiple View Geometry in Computer Vision” 中一个关于向量叉乘的矩阵转换的恒等式经常在基本矩阵、单应矩阵、对极几何等相关内容的推导中出现[1].

Lemma A4.2[1]

If M M M is any 3 × 3 3\times3 3×3 matrix (invertible or not), and x \mathbf{x} x and y \mathbf{y} y are column vectors, then
( M x ) × ( M y ) = M ∗ ( x × y ) (A4.8) (M\mathbf{x})\times (M \mathbf{y}) = M^{\ast}(\mathbf{x} \times \mathbf{y})\tag{A4.8} (Mx)×(My)=M(x×y)(A4.8)
where M ∗ M^{\ast} M is the matrix of cofactors of M M M.

StackExchange (Cross product: matrix transformation identity) 上有关于该式数学推导的讨论.

这里尝试利用 Maxima 符号计算进行暴力计算直接证明. 然后再简单讨论一下该恒等式在基本矩阵、单应矩阵推导中的应用, 以及说明其特例——刚体旋转矩阵作用下的向量叉乘积.


II. 符号计算 Maxima 程序推导

简短的 Maxima 程序对上述 Lemma A4.2 进行符号计算推导.

M: matrix([m_11, m_12, m_13], [m_21, m_22, m_23], [m_31, m_32, m_33]);
x: transpose(matrix([x_1, x_2, x_3]));
y: transpose(matrix([y_1, y_2, y_3]));
adjM: adjoint(M);
CoM: transpose(adjM);
Mx: M.x;
My: M.y;
LHS: matrix([i, j, k], [Mx[1][1], Mx[2][1], Mx[3][1]], [My[1][1], My[2][1], My[3][1]]);
LHS_i: determinant(submatrix(1,LHS,1));
LHS_j: -determinant(submatrix(1,LHS,2));
LHS_k: determinant(submatrix(1,LHS,3));
xXy: matrix([i, j, k], [x[1][1], x[2][1], x[3][1]], [y[1][1], y[2][1], y[3][1]]);
xXy_i: determinant(submatrix(1,xXy,1));
xXy_j: -determinant(submatrix(1,xXy,2));
xXy_k: determinant(submatrix(1,xXy,3));
MxXy: transpose(matrix([xXy_i, xXy_j, xXy_k])); 
RHS: CoM.MxXy;
RHS_i: RHS[1][1];
RHS_j: RHS[2][1];
RHS_k: RHS[3][1];
expand(LHS_i - RHS_i);
expand(LHS_j - RHS_j);
expand(LHS_k - RHS_k);

输出结果说明 (A4.8) 式的左右两边相等, 即结果成立.

在这里插入图片描述


III. 推论和关联公式的说明

1. 推论

由式 (A4.8),
( M x ) × ( M y ) = M ∗ ( x × y ) ⇒ [ M x ] × M y = M ∗ [ x ] × y (III-1-1) (M\mathbf{x})\times (M \mathbf{y}) = M^{\ast}(\mathbf{x} \times \mathbf{y})\\ \Rightarrow \quad [M\mathbf{x}]_\times M \mathbf{y} = M^{\ast}[\mathbf{x}]_\times \mathbf{y} \tag{III-1-1} (Mx)×(My)=M(x×y)[Mx]×My=M[x]×y(III-1-1)
因为任意的 y \mathbf{y} y 都成立, 则有
[ M x ] × M = M ∗ [ x ] × (III-1-2) \quad [M\mathbf{x}]_\times M = M^{\ast}[\mathbf{x}]_\times \tag{III-1-2} [Mx]×M=M[x]×(III-1-2)
t ≜ M x \mathbf{t} \triangleq M \mathbf{x} tMx. 当 M M M 可逆时, x = M − 1 t \mathbf{x} = M^{-1}\mathbf{t} x=M1t, 并有 M ∗ = ∣ M ∣ M − T M^{\ast}=|M|\ M^{\rm -T} M=M MT. 则上式
[ t ] × M = M ∗ [ M − 1 t ] × = M − T [ M − 1 t ] × (Result A4.3) [\mathbf{t}]_{\times}M=M^{\ast}[M^{-1}\mathbf{t}]_{\times}= M^{\rm -T}[M^{-1}\mathbf{t}]_{\times} \tag{Result A4.3} [t]×M=M[M1t]×=MT[M1t]×(Result A4.3)
上式中的 “等号” 是射影空间 R P 3 \mathbb{RP}^{3} RP3 下的等价关系, 两个向量相差一个非零比例常数即为等价或者相等. 此即为参考文献 [1] 中 Result A4.3 的结果.

进一步, 可得
[ M − 1 t ] × = M T [ t ] × M (III-1-3) [M^{-1}\mathbf{t}]_{\times} = M^{\rm T} [\mathbf{t}]_{\times}M \tag{III-1-3} [M1t]×=MT[t]×M(III-1-3)

[ M t ] × = M − T [ t ] × M − 1 (III-1-4) [M\mathbf{t}]_{\times} = M^{\rm -T} [\mathbf{t}]_{\times}M^{-1} \tag{III-1-4} [Mt]×=MT[t]×M1(III-1-4)

[ M T t ] × = M − 1 [ t ] × M − T (III-1-5) [M^{\rm T}\mathbf{t}]_{\times} = M^{-1} [\mathbf{t}]_{\times}M^{\rm -T} \tag{III-1-5} [MTt]×=M1[t]×MT(III-1-5)


2. 应用于对极几何中基本矩阵推导

参考文献 [1] 中 Example 9.2 对对极几何中的基本矩阵 (Fundamental Matrix) 进行了变形推导.

以第一个相机坐标系作为世界参考坐标系, 已知第一个相机的摄像机矩阵 P P P、第二个相机的摄像机矩阵 P ′ P' P、摄像机矩阵 P P P 的广义逆矩阵 P + P^{+} P+、第一个相机的光心坐标 C C C 如下
P = K [ I ∣ 0 ] , P ′ = K ′ [ R ∣ t ] P + = [ K − 1 0 T ] , C = [ 0 1 ] (III-2-1) P=K[I|\mathbf{0}],\quad P'=K'[R|\mathbf{t}]\\ P^{+}=\begin{bmatrix}K^{-1}\\\mathbf{0}^{\rm T}\end{bmatrix},\quad C=\begin{bmatrix}\mathbf{0}\\1\end{bmatrix} \tag{III-2-1} P=K[I0],P=K[Rt]P+=[K10T],C=[01](III-2-1)
其中 K K K K ′ K' K 分别为第一个相机和第二个相机的内参矩阵. 而 [ R ∣ t ] [R|\mathbf{t}] [Rt] 是第一个相机坐标系 (此处设定为世界坐标系) 相对于第二个相机坐标系的位姿称为相机外参矩阵 (相机坐标姿态变换可参考博文 “对极约束及其性质 —— 公式详细推导” 中的描述).


P ′ C = K ′ t , P ′ P + = K ′ R K − 1 (III-2-2) P'C=K'\mathbf{t},\quad P'P^{+}=K'RK^{-1} \tag{III-2-2} PC=Kt,PP+=KRK1(III-2-2)
另外, 旋转矩阵
R − T = ( R − 1 ) T = ( R T ) T = R (III-2-3) R^{\rm -T}= ({R^{-1}})^{\rm T}=(R^{\rm T})^{\rm T}=R \tag{III-2-3} RT=(R1)T=(RT)T=R(III-2-3)

然后就可以推导参考文献 [1] 中关于基本矩阵 F F F 的关系式 (Page 244-eq (9.4))
F = [ P ′ C ] × P ′ P + = [ K ′ t ] × ‾ I I I − 1 − 4 K ′ R K − 1 = K ′ − T [ t ] × K ′ − 1 ‾ K ′ R K − 1 = K ′ − T [ t ] × R ‾ K − 1 = K ′ − T R R − 1 [ t ] × R − T ‾ ‾ I I I − 1 − 5 K − 1 = K ′ − T R [ R T t ] × K − 1 = K ′ − T R K T K − T [ R T t ] × K − 1 ‾ I I I − 3 − 4 = K ′ − T R K T [ K R T t ] × (III-2-4) \begin{aligned} F&=[P'{C}]_{\times}P'P^{+}\\ &=\underset{\rm III-1-4}{\underline{[K'\mathbf{t}]_{\times}}} K'RK^{-1}\\ &=\underline{K'^{\rm -T}[\mathbf{t}]_{\times}K'^{-1}} K'RK^{-1}\\ &= K'^{\rm -T}[\mathbf{t}]_{\times}\underline{R}K^{-1}\\ &= K'^{\rm -T}R \underset{\rm III-1-5}{\underline{R^{-1}[\mathbf{t}]_{\times}\underline{R^{\rm -T}}}} K^{-1}\\ &= K'^{\rm -T}R [R^{\rm T}\mathbf{t}]_{\times} K^{-1}\\ &= K'^{\rm -T}R K^{\rm T} \underset{\rm III-3-4}{\underline{K^{\rm -T} [R^{\rm T}\mathbf{t}]_{\times} K^{-1}}}\\ &= K'^{\rm -T}R K^{\rm T}[KR^{\rm T} \mathbf{t}]_{\times} \end{aligned} \tag{III-2-4} F=[PC]×PP+=III14[Kt]×KRK1=KT[t]×K1KRK1=KT[t]×RK1=KTRIII15R1[t]×RTK1=KTR[RTt]×K1=KTRKTIII34KT[RTt]×K1=KTRKT[KRTt]×(III-2-4)


3. 应用于基本矩阵与单应矩阵关系

基本矩阵与平面单应矩阵的关系可以表示为 (参考文献 [3] 第四章 eq(4.26) 和 eq(4.27))
F = [ e ′ ] × H (III-3-1-a) F=[\mathbf{e}']_{\times}H \tag{III-3-1-a} F=[e]×H(III-3-1-a)

F = H − T [ e ] × (III-3-1-b) F=H^{\rm -T}[\mathbf{e}]_{\times} \tag{III-3-1-b} F=HT[e]×(III-3-1-b)

其中 H H H 为平面单应矩阵, e \mathbf{e} e e ′ \mathbf{e}' e 为两幅图像上的极点坐标. 两极点是对应点, 故有
e ′ = H e , e = H − 1 e ′ (III-3-2) \mathbf{e}'=H \mathbf{e}, \quad \mathbf{e}=H^{-1}\mathbf{e}' \tag{III-3-2} e=He,e=H1e(III-3-2)
根据一般式 (III-1-3),
[ H − 1 e ′ ] × = H T [ e ′ ] × H ⇒ [ e ′ ] × H = H − T [ H − 1 e ′ ] × ⇒ [ e ′ ] × H = H − T [ e ] × [H^{-1}\mathbf{e}']_{\times} = H^{\rm T}[\mathbf{e}']_{\times}H \\ \Rightarrow\quad [\mathbf{e}']_{\times}H =H^{\rm -T} [H^{-1}\mathbf{e}']_{\times}\\ \Rightarrow\quad [\mathbf{e}']_{\times}H =H^{\rm -T} [\mathbf{e}]_{\times}\\ [H1e]×=HT[e]×H[e]×H=HT[H1e]×[e]×H=HT[e]×
故有基本矩阵与单应矩阵之间的两个关系式 (III-3-1-a) 与 (III-3-1-b) 等价.


4. 与刚体运动旋转矩阵作用的关系

之前的博文中经常用到关于刚体运动旋转矩阵 R R R 的如下两个恒等式
R a × R b = R ( a × b ) (III-4-1) R\mathbf{a}\times R\mathbf{b} = R(\mathbf{a}\times \mathbf{b}) \tag{III-4-1} Ra×Rb=R(a×b)(III-4-1)

[ R θ ] × = R [ θ ] × R − 1 = R [ θ ] × R T (III-4-2) [R \boldsymbol{\theta}]_{\times} = R[\boldsymbol{θ}]_{\times} R^{−1}=R[\boldsymbol{θ}]_{\times}R^{\rm T} \tag{III-4-2} [Rθ]×=R[θ]×R1=R[θ]×RT(III-4-2)

以上两式中 a , b , θ ∈ R 3 \mathbf{a}, \mathbf{b}, \boldsymbol{\theta} \in \mathbb{R}^3 a,b,θR3 R ∈ S O ( 3 ) R\in \mathbb{SO}(3) RSO(3).

因为旋转矩阵 ∣ R ∣ = 1 |R|=1 R=1 R − T = R R^{\rm -T}=R RT=R
∣ R ∣ = 1 R − T = R } ⇒ R ∗ = ∣ R ∣ R − T = R (III-4-3) \left. \begin{aligned} |R|=1\\ R^{\rm -T}=R \end{aligned} \right\}\quad \Rightarrow\quad R^{\ast}=|R|\ R^{\rm -T}=R \tag{III-4-3} R=1RT=R}R=R RT=R(III-4-3)
所以式 (III-4-1) 是式 (A4.8) 的特例. 同样地可以看出式 (III-4-2) 是式 (III-1-4) 的特例.


附 - 关于摄像机矩阵广义逆的说明

下面对上文中式 (III-2-1) 中的第一个相机的摄像机矩阵 P P P 的广义逆矩阵 P + P^+ P+ 进行简单说明.

参考博文 “四足机器人中不同优先级任务的执行——Null-Space Projection方法” 中对长方形矩阵的广义逆的讨论.

J ∈ R m × n J\in \mathbf{R}^{m\times n} JRm×n,

if J J J is fat ( n > m n > m n>m),
J + = J T ( J J T ) − 1 (IV-1-1) J^+=J^{\rm T}(JJ^{\rm T})^{−1} \tag{IV-1-1} J+=JT(JJT)1(IV-1-1)
called a right inverse since J J + = I J J^+ = I JJ+=I.

Else if J J J is tall ( n < m n<m n<m),
J + = ( J T J ) − 1 J T (IV-1-2) J^+= (J^{\rm T} J)^{−1} J^{\rm T} \tag{IV-1-2} J+=(JTJ)1JT(IV-1-2)
called a left inverse since J + J = I J^+ J = I J+J=I.

第一个相机的摄像机矩阵 P P P 的矩阵维度 P 3 × 4 = K 3 × 3 [ I ∣ 0 ] 3 × 4 P_{3 \times 4}=K_{3\times 3}[I|\mathbf{0}]_{3 \times 4} P3×4=K3×3[I0]3×4, 列数大于行数, 是一个 “胖矩阵”. 故利用右逆的定义构造广义逆
P + = P T ( P P T ) − 1 = [ I 0 T ] K T ( K [ I ∣ 0 ] [ I 0 T ] K T ) − 1 = [ I 0 T ] K T ( K K T ) − 1 = [ I 0 T ] K − 1 = [ K − 1 0 T ] (IV-1-3) \begin{aligned} P^+ &= P^{\rm T}(P P^{\rm T})^{-1}\\ &=\begin{bmatrix}I\\ \mathbf{0}^{\rm T}\end{bmatrix} K^{\rm T} \left( K [I|\mathbf{0}] \begin{bmatrix}I\\ \mathbf{0}^{\rm T}\end{bmatrix} K^{\rm T}\right)^{-1}\\ &= \begin{bmatrix}I\\ \mathbf{0}^{\rm T}\end{bmatrix} K^{\rm T} \left( K K^{\rm T}\right)^{-1}\\ &= \begin{bmatrix}I\\ \mathbf{0}^{\rm T}\end{bmatrix} K^{-1}\\ &=\begin{bmatrix}K^{-1} \\ \mathbf{0}^{\rm T} \end{bmatrix} \end{aligned} \tag{IV-1-3} P+=PT(PPT)1=[I0T]KT(K[I0][I0T]KT)1=[I0T]KT(KKT)1=[I0T]K1=[K10T](IV-1-3)


IV. 小节

本篇博客笔记主要对叉乘积的矩阵变换恒等式进行了讨论, 对多视图几何中用到该恒等式的公式进行简单推导说明.

仅为学习记录.


参考文献

[1] Richard Hartley, Andrew Zisserman, Multiple View Geometryin Computer Vision, 2nd edition, Cambridge University Press, 2004

[2] cross product: matrix transformation identity, https://math.stackexchange.com/questions/859836/cross-product-matrix-transformation-identity

[3] 吴福朝, 计算机视觉中的数学方法, 教育科学出版社, 2008


版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/woyaomaishu2/article/details/144142452
本文作者:wzf@robotics_notes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持多种快充协议的取电芯片,支持最大功率140W

前言 在快节奏的现代生活中&#xff0c;人们对于小家电的依赖日益加深&#xff0c;而随之而来的充电问题也日益凸显。传统的充电方式往往受限于电压、电流的限制&#xff0c;难以满足不同设备对电力的多样化需求。而PD快充协议的诞生&#xff0c;则为这一难题提供了全新的解决…

分页查询功能

EmployeeController /** * 员工分页查询 * * param employeePageQueryDTO * return */ GetMapping("/page") ApiOperation("员工分页查询") public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) { log.info("…

“移门缓冲支架:为家庭安全加码”

在智能家居日益普及的今天&#xff0c;科技不仅改变了我们的生活方式&#xff0c;也提升了家居的安全。移门缓冲支架作为一项结合了现代技术的小型装置&#xff0c;正逐渐成为提升家庭安全的重要配件。它通过吸收门关闭时的冲击力、减缓关门速度以及减少噪音等多重功能&#xf…

力扣96:不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1 卡…

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展

Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型&#xff08;LLM&#xff09;的指南。Torchtune 是一个PyTorch库&#xff0c;旨在让您轻松地…

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时&#xff0c;由于入参时regex &#xff0c;而入参刚好是正则表达式的字符该怎么办&#xff1f;我…

【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…

STM32C011开发(3)----Flash操作

STM32C011开发----3.Flash操作 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置堆栈设置串口重定向FLASH数据初始化FLASH 读写演示 概述 STM32C011 系列微控制器内置 Flash 存储器&#xff0c;支持程序存储与数据保存&#xff0c;具备页面擦除、双字写入…

电商项目高级篇06-缓存

电商项目高级篇06-缓存 1、docker下启动redis2、项目整合redis3、redis改造三级分类业务 缓存 流程图&#xff1a; data cache.load(id);//从缓存加载数据 If(data null){ data db.load(id);//从数据库加载数据 cache.put(id,data);//保存到 cache 中 } return data;在我们…

PS的功能学习

背景差色较大&#xff0c;就魔棒 魔棒的连续就是倒水点的跨越问题 魔棒的容差的选择就有点看经验了&#xff0c;看颜色的统一程度选择 Ctrl D 取消当前所有的选区 至于快速选择工具&#xff0c;和对象选择工具也差不多&#xff0c;只不过控制范围变成了一块一块的&#x…

深度学习实验--初步探索数据增强、优化器对模型的影响

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次主要是探究&#xff0c;优化器、数据增强对模型训练的影响&#xff1b;基础篇还剩下几个, 后面的难度会逐步提升;越学&#xff0c;越觉得这个东西很…

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…

SQL Server管理员sa登录失败原因

文章目录 一、开启混合登录模式二、启用sa三、更改密码四、登录sa一、开启混合登录模式 用Windows身份登录数据库服务。 在连接名上右键→属性。 在安全性选项卡下,选择【SQL Server和Windows身份验证模式】,点击【确定】,提示需要重启服务。 Win+R,输入指令:services.ms…

logminer挖掘日志归档查找问题

--根据发生问题时间点查找归档文件 select first_time,NAME from gv$archived_log where first_time>2016-03-15 17:00:00 and first_time<2016-03-15 21:00:00; 2016-03-15 17:23:55 ARCH/jxdb/archivelog/2016_03_15/thread_1_seq_41588.4060.906577337 2016-03-15 17:…

如何监控Elasticsearch集群状态?

大家好&#xff0c;我是锋哥。今天分享关于【如何监控Elasticsearch集群状态&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何监控Elasticsearch集群状态&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…

浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite

在构建该 Web 应用程序&#xff0c;并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志&#xff0c;或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期&#xff0c;我们提供静态 html 文件。然后我们提供动态渲染的 h…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…

【Redis】Redis介绍

目录 1.Redis是什么? 2. Redis特性 2.1 速度快 2.2 基于键值对的数据结构服务器 2.3 丰富的功能 2.4 简单稳定 2.5 客户端语言多 2.6 持久化 2.7 主从复制 2.8 高可用和分布式 3. Redis使用场景 3.1 缓存(Cache) 3.2 排行榜系统 3.3 计数器应用 3.4 社交网络 …