支持向量机 SVM | 线性可分:公式推导

news2024/9/25 23:21:20

目录

  • 一. SVM的优越性
  • 二. SVM算法推导
    • 小节
    • 概念

在开始讲述SVM算法之前,我们先来看一段定义:

'''
支持向量机(Support VecorMachine, SVM)
	本身是一个二元分类算法,支持线性分类和非线性分类的分类应用,同时通过OvR或者OvO的方式可以应用在多元分类领域中
	能够直接将SVM应用于回归应用中
在不考虑集成学习算法或者特定的数据集时,SVM在分类算法中可以说是一种特别优秀的算法
'''

在这里插入图片描述

一. SVM的优越性

在Logistic回归算法中:
    我们追求是寻找一条决策边界,即找到一条能够正确划分所有训练样本的边界;
    当所有样本正确划分时,损失函数已降至最低,模型不再优化

在SVM算法中:
    我们追求是寻找一条最优决策边界

	那什么是最优呢?
		SVM提出的基本思想是,寻找一条决策边界,使得该边界到两边最近的点间隔最大
		
	这样做得目的在于:
		相比于其他边界,svm寻找到的边界对于样本的局部扰动容忍性最好,对新进样本更容易判断正确;
		也就是说,此时决策边界具有最好的鲁棒性

在这里插入图片描述

二. SVM算法推导

	注意:下面讲述的是线性分类

这里我们换一种思路寻找最佳决策边界:

首先假设决策边界为
y = ω → ⋅ x → + b y= \overrightarrow{\omega }\cdot \overrightarrow{x} +b y=ω x +b

公式解释1:

为什么要这么设方程呢?

我们希望通过向量点乘来确定距离
换句话说,希望通过向量点乘来确定正负样本的边界

在这里插入图片描述

为了寻找最佳决策边界,我们可以:
以上述决策边界为中心线,向两边做平行线,让这两条平行线过两边最近的样本点;此时会形成一条“街道”,最佳决策边界就是使这条街道最宽的那个决策边界。

在这里插入图片描述

补充一点:
在Logistic回归算法中,我们人为的将数据集设为1,0
在SVM算法中,我们人为的将数据集设为1,-1

参数说明:

width:街宽

ω → \overrightarrow{\omega } ω :决策边界的法向量

u − → \overrightarrow{u_{-} } u :街边上的负样本向量

u + → \overrightarrow{u_{+} } u+ :街边上的正样本向量

单位向量: a → ∥ a ∥ \frac{\overrightarrow{a}}{\left \| a \right \| } aa

向量点乘几何的意义:
a → ⋅ b → = ∣ a → ∣ ∣ b → ∣ cos ⁡ θ \overrightarrow{a}\cdot \overrightarrow{b} =\left | \overrightarrow{a} \right| |\overrightarrow{b} | \cos \theta a b = a b cosθ
可以理解为 a → \overrightarrow{a} a b → \overrightarrow{b} b 上的投影长度乘以 ∣ b → ∣ |\overrightarrow{b}| b 的模长
在这里插入图片描述

对于训练集中的任何一个数据,我们总会取到一个合适长度的 ω → \overrightarrow{\omega } ω ,以及一个适合的常数b,得到:
{ ω → ⋅ u + → + b ≥ 1 ω → ⋅ u − → + b ≤ − 1 \left\{\begin{matrix}\overrightarrow{\omega }\cdot \overrightarrow{u_{+} } +b\ge 1 \\\overrightarrow{\omega }\cdot \overrightarrow{u_{-} } +b\le -1 \end{matrix}\right. {ω u+ +b1ω u +b1

即可以合并为: y i ( ω → ⋅ u i → + b ) ≥ 1 y_{i} (\overrightarrow{\omega }\cdot \overrightarrow{u_{i} } +b)\ge1 yi(ω ui +b)1
而对于街边点而言,满足
y i ( ω → ⋅ u i → + b ) = 1 y_{i} (\overrightarrow{\omega }\cdot \overrightarrow{u_{i} } +b)=1 yi(ω ui +b)=1

	注意:这些街边点对于决定决策边界取决定性作用,因此被称为支持向量

这样,我们就可以用数学方式将上述街宽抽象出来:
w i d t h = ( u + → − u − → ) ⋅ w → ∥ w ∥ width = (\overrightarrow{u_{+}}-\overrightarrow{u_{-}} )\cdot \frac{\overrightarrow{w}}{\left \| w \right \| } width=(u+ u )ww
推导式子,就可以进一步得到:

w i d t h = ( u + → − u − → ) ⋅ w → ∥ w ∥ width = (\overrightarrow{u_{+}}-\overrightarrow{u_{-}} )\cdot \frac{\overrightarrow{w}}{\left \| w \right \| } width=(u+ u )ww

        = u + → ⋅ ω → ∥ ω → ∥ − u − → ⋅ ω → ∥ ω → ∥ =\frac{\overrightarrow{u_{+}}\cdot\overrightarrow{\omega _{}} }{\left \| \overrightarrow{\omega\mathrm{} } \right \| }-\frac{\overrightarrow{u_{-}}\cdot\overrightarrow{\omega _{}} }{\left \| \overrightarrow{\omega\mathrm{} } \right \| } =ω u+ ω ω u ω

        = 1 − b ∥ w → ∥ − − 1 − b ∥ w → ∥ =\frac{1-b}{\left \| \overrightarrow{w} \right \| } -\frac{-1-b}{\left \| \overrightarrow{w} \right \| } =w 1bw 1b

        = 2 ∥ w → ∥ =\frac{2}{\left \| \overrightarrow{w} \right \| } =w 2

此时,我们要求街宽最大,即是求 m i n ( ∥ w → ∥ ) min({\left \| \overrightarrow{w} \right \| }) min( w ),这里为了后续求导方便,将值写成 m i n ( 1 2 ∥ w → ∥ 2 ) min(\frac{1}{2}\left \| \overrightarrow{w} \right \| ^{2} ) min(21 w 2)

需要明确,"街边"最大值的条件是基于支持向量的,而支持向量是属于数据集的,因此我们的问题就变成了:
{ m i n ( 1 2 ∥ w → ∥ 2 ) s . t . y i ( ω → ⋅ x → + b ) − 1 ≥ 0 \left\{\begin{matrix}min(\frac{1}{2}\left \| \overrightarrow{w} \right \| ^{2} ) \\s.t. y_{i} (\overrightarrow{\omega }\cdot \overrightarrow{x } +b)-1\ge0 \end{matrix}\right. {min(21 w 2)s.t.yi(ω x +b)10

这是一个典型的条件极值问题,我们用拉格朗日乘数法,得到拉格朗日函数为:
L = 1 2 ∥ w → ∥ 2 − ∑ i = 1 m β i [ y i ( ω → ⋅ x → + b ) − 1 ] , ( β i ≥ 0 ) L = \frac{1}{2}\left \| \overrightarrow{w} \right \| ^{2} -\sum_{i=1}^{m} \beta _{i}[ y_{i} (\overrightarrow{\omega }\cdot \overrightarrow{x } +b)-1] ,(\beta _{i}\ge 0) L=21 w 2i=1mβi[yi(ω x +b)1],(βi0)

这里的约束是不等式约束,所以要使用KKT条件(KKT是拉格朗日乘数法的一种泛化形式,此时 β i ≥ 0 \beta _{i}\ge0 βi0),而KKT条件的计算方式为: max ⁡ β ≥ 0 min ⁡ w , b L ( w , b , β ) \max_{\beta \ge 0} \min_{w,b}L(w,b,\beta ) β0maxw,bminL(w,b,β)

∂ L ∂ w = w − ∑ i = 1 m β i x ( i ) y ( i ) = 0 ⇒ w = ∑ i = 1 m β i x ( i ) y ( i ) \frac{\partial L}{\partial w} =w-\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)}=0\Rightarrow w=\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} wL=wi=1mβix(i)y(i)=0w=i=1mβix(i)y(i)

∂ L ∂ b = − ∑ i = 1 m β i y ( i ) = 0 ⇒ 0 = ∑ i = 1 m β i y ( i ) \frac{\partial L}{\partial b} =-\sum_{i=1}^{m} \beta _{i}y^{(i)}=0\Rightarrow 0=\sum_{i=1}^{m} \beta _{i} y^{(i)} bL=i=1mβiy(i)=00=i=1mβiy(i)

公式解释:
β \beta β是每个样本对应的拉格朗日乘子

对于非支持向量而言, β = 0 \beta=0 β=0,即对非支持向量无约束

则: y ( i ) ∗ 0 = 0 y^{(i)}*0=0 y(i)0=0

对于支持向量而言, β > 0 \beta>0 β>0,即对支持向量有约束

则: 正样本支持向量 ∗ 1 + 负样本支持向量 ∗ ( − 1 ) = 0 正样本支持向量\ast 1+负样本支持向量\ast (-1)=0 正样本支持向量1+负样本支持向量(1)=0

此时 L ( β ) L(\beta) L(β)为:

L ( β ) = 1 2 ∥ w → ∥ 2 − ∑ i = 1 m β i [ y ( i ) ( ω T ⋅ x ( i ) + b ) − 1 ] L(\beta)=\frac{1}{2}\left \| \overrightarrow{w} \right \| ^{2} -\sum_{i=1}^{m} \beta _{i}[y^{(i)} (\omega ^{T} \cdot x^{(i)} +b)-1] L(β)=21 w 2i=1mβi[y(i)(ωTx(i)+b)1]

      = 1 2 ω T ω − ∑ i = 1 m β i y ( i ) ω T ⋅ x ( i ) − b ∑ i = 1 m β i y ( i ) + ∑ i = 1 m β i =\frac{1}{2}\omega ^{T}\omega -\sum_{i=1}^{m} \beta _{i}y^{(i)}\omega ^{T} \cdot x^{(i)}-b\sum_{i=1}^{m} \beta _{i}y^{(i)}+\sum_{i=1}^{m} \beta _{i} =21ωTωi=1mβiy(i)ωTx(i)bi=1mβiy(i)+i=1mβi

      = 1 2 ω T ∑ i = 1 m β i x ( i ) y ( i ) − ∑ i = 1 m β i y ( i ) ω T x ( i ) + ∑ i = 1 m β i =\frac{1}{2}\omega ^{T}\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} -\sum_{i=1}^{m} \beta _{i}y^{(i)}\omega ^{T}x^{(i)}+\sum_{i=1}^{m} \beta _{i} =21ωTi=1mβix(i)y(i)i=1mβiy(i)ωTx(i)+i=1mβi

      = − 1 2 ω T ∑ i = 1 m β i x ( i ) y ( i ) + ∑ i = 1 m β i =-\frac{1}{2}\omega ^{T}\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} +\sum_{i=1}^{m} \beta _{i} =21ωTi=1mβix(i)y(i)+i=1mβi

      = − 1 2 ( ∑ j = 1 m β j x ( j ) y ( j ) ) T ( ∑ i = 1 m β i x ( i ) y ( i ) ) + ∑ i = 1 m β i =-\frac{1}{2}(\sum_{j=1}^{m} \beta _{j} x^{(j)}y^{(j)})^{T}(\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} )+\sum_{i=1}^{m} \beta _{i} =21(j=1mβjx(j)y(j))T(i=1mβix(i)y(i))+i=1mβi

      = − 1 2 ∑ j = 1 m β j x ( j ) T y ( j ) ∑ i = 1 m β i x ( i ) y ( i ) + ∑ i = 1 m β i =-\frac{1}{2}\sum_{j=1}^{m} \beta _{j} x^{(j)^{T}}y^{(j)}\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} +\sum_{i=1}^{m} \beta _{i} =21j=1mβjx(j)Ty(j)i=1mβix(i)y(i)+i=1mβi

      = ∑ i = 1 m β i − 1 2 ∑ i = 1 m ∑ j = 1 m β i β j y ( i ) y ( j ) x ( j ) T x ( i ) =\sum_{i=1}^{m} \beta _{i}-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \beta _{i}\beta _{j} y^{(i)}y^{(j)}x^{(j)^{T}} x^{(i)} =i=1mβi21i=1mj=1mβiβjy(i)y(j)x(j)Tx(i)

即: { L ( β ) = ∑ i = 1 m β i − 1 2 ∑ i = 1 m ∑ j = 1 m β i β j y ( i ) y ( j ) x ( j ) T x ( i ) s . t : ∑ i = 1 m β i y ( i ) = 0 \left\{\begin{matrix}L(\beta)=\sum_{i=1}^{m} \beta _{i}-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \beta _{i}\beta _{j} y^{(i)}y^{(j)}x^{(j)^{T}} x^{(i)} \\s.t:\sum_{i=1}^{m} \beta _{i} y^{(i)}=0 \end{matrix}\right. {L(β)=i=1mβi21i=1mj=1mβiβjy(i)y(j)x(j)Tx(i)s.t:i=1mβiy(i)=0

解到这一步,我们发现L函数只与 β \beta β有关,所以此时可以直接极大化我们的优化函数,且
max ⁡ β ≥ 0 l ( β ) ⟶ min ⁡ β ≥ 0 − l ( β ) \max_{\beta \ge 0}l(\beta ) \longrightarrow \min_{\beta \ge 0}-l(\beta ) β0maxl(β)β0minl(β)
因此,求解 β \beta β就变成了
{ min ⁡ β ≥ 0 1 2 ∑ i = 1 m ∑ j = 1 m β i β j y ( i ) y ( j ) x ( j ) T x ( i ) − ∑ i = 1 m β i s . t : ∑ i = 1 m β i y ( i ) = 0 \left\{\begin{matrix}\min_{\beta \ge 0}\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \beta _{i}\beta _{j} y^{(i)}y^{(j)}x^{(j)^{T}} x^{(i)}-\sum_{i=1}^{m} \beta _{i} \\s.t:\sum_{i=1}^{m} \beta _{i} y^{(i)}=0 \end{matrix}\right. {minβ021i=1mj=1mβiβjy(i)y(j)x(j)Tx(i)i=1mβis.t:i=1mβiy(i)=0

但是对于 β \beta β,可以使用SMO算法求得;对于SMO算法,我们先放一放

这里,假设我们用SMO求得了 β \beta β的最优解,那么我们可以分别计算得到对应的:

w = ∑ i = 1 m β i x ( i ) y ( i ) w=\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} w=i=1mβix(i)y(i)
b:一般使用所有支持向量的计算均值作为实际值

怎么得到支持向量呢?
β = 0 \beta=0 β=0,该样本不是支持向量
β > 1 \beta>1 β>1,该样本是支持向量

小节

对于线性可分的m个样本(x1,y1),(x2,y2)… :

	x为n维的特征向量
	y为二元输出,即+1,-1

SVM输出的为w,b,分类决策函数

通过构造约束问题:
{ min ⁡ β ≥ 0 1 2 ∑ i = 1 m ∑ j = 1 m β i β j y ( i ) y ( j ) x ( j ) T x ( i ) − ∑ i = 1 m β i s . t : ∑ i = 1 m β i y ( i ) = 0 \left\{\begin{matrix}\min_{\beta \ge 0}\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m} \beta _{i}\beta _{j} y^{(i)}y^{(j)}x^{(j)^{T}} x^{(i)}-\sum_{i=1}^{m} \beta _{i} \\s.t:\sum_{i=1}^{m} \beta _{i} y^{(i)}=0 \end{matrix}\right. {minβ021i=1mj=1mβiβjy(i)y(j)x(j)Tx(i)i=1mβis.t:i=1mβiy(i)=0
使用SMO算法求出上述最优解 β \beta β
找到所有支持向量集合:
S = ( x ( i ) , y ( i ) ) ( β > 0 , i = 1 , 2 , . . . , m ) S = (x^{(i)}, y^{(i)}) (\beta > 0,i=1,2,...,m) S=(x(i),y(i))(β>0,i=1,2,...,m)
从而更新w,b

w = ∑ i = 1 m β i x ( i ) y ( i ) w=\sum_{i=1}^{m} \beta _{i} x^{(i)}y^{(i)} w=i=1mβix(i)y(i)

b = 1 S ∑ i = 1 S ( y s − ∑ i = 1 m β i x ( i ) T y ( i ) x s ) b=\frac{1}{S} \sum_{i=1}^{S}(y^{s}- \sum_{i=1}^{m} \beta _{i} x^{(i)^{T}}y^{(i)}x^{s} ) b=S1i=1S(ysi=1mβix(i)Ty(i)xs)

构造最终的分类器,为:
f ( x ) = s i g n ( w ∗ x + b ) f(x)=sign(w\ast x+b) f(x)=sign(wx+b)

	x<0时,y=-1
	x=0时,y=0
	x>0时,y=1
	
	注意:
		假设,不会出现0
		若出现,正负样本随意输出一个,即+0.00000001或-0.00000001都可以

概念

最后,我们定义具体概念:

分割超平面(Separating Hyperplane):将数据集分割开来的直线、平面叫分割超平面

支持向量(Support Vector):离分割超平面最近的那些点叫做支持向量

间隔(Margin):支持向量数据点到分割超平面的距离称为间隔;任何一个支持向量到分割超平面的距离都是相等的


感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    

祝愉快🌟!


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

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

相关文章

Sora:探索大型视觉模型的前世今生、技术内核及未来趋势

Sora&#xff0c;一款由OpenAI在2024年2月推出的创新性文生视频的生成式AI模型&#xff0c;能够依据文字说明&#xff0c;创作出既真实又富有想象力的场景视频&#xff0c;展现了其在模拟现实世界方面的巨大潜能。本文基于公开技术文档和逆向工程分析&#xff0c;全面审视了Sor…

一文搞懂浏览器缓存机制

文章目录 概述强制缓存协商缓存总结参考文章 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制&#xff0c;其机制是根据HTTP报文的缓存标识进行的 浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后&#xff0c;会根据响应报文的缓存标识&#xff0c;决定是否进行缓存…

【学习总结】什么是DoS和DDoS

[Q&A] 什么是DoS DoS 是 “Denial of Service”&#xff08;拒绝服务&#xff09;的缩写&#xff0c;它是一种网络攻击方式&#xff0c;其目的是使目标计算机或网络资源无法为合法用户提供正常的服务。通过向目标系统发送大量请求、消耗其带宽、处理器或内存等资源&#…

【Linux网络命令系列】ping curl telnet三剑客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前后端分离vue+nodejs高校教室资源预约管理系统4e80m

本系统的设计与实现共包含9个表:分别是配置文件信息表&#xff0c;教师信息表&#xff0c;教室类型信息表&#xff0c;教室信息信息表&#xff0c;教室预约信息表&#xff0c;系统公告信息表&#xff0c;token表信息表&#xff0c;用户表信息表&#xff0c;学生信息表&#xff…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

二、数据结构——单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。

对于链表来说&#xff0c;由于new操作时间太长&#xff0c;因此&#xff0c;算法题中一般使用静态链表。 1.单链表 采用数组实现单链表&#xff0c;可以直接开两个数据&#xff0c;一个数组存放数值&#xff0c;另外一个数据存放下一个元素&#xff08;指针&#xff09;。 示…

klipper api测试脚本whconsole.py

1、whconsole.py简单介绍 whconsole.py用于测试klipper的对外接口api&#xff0c;其实是连接klipper的uds服务&#xff08;Unix Domain Socket&#xff09;&#xff0c;官方也有介绍API 服务器 - Klipper 文档。 需要注意是的whconsole.py脚本启动不能使用Python3&#xff0c;…

想要调用淘宝开放平台API,没有申请应用怎么办?

用淘宝自定义API接口可以访问淘宝开放平台API。 custom-自定义API操作 taobao.custom 公共参数 注册账号获取API请求地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xf…

【计算机网络】深度学习HTTPS协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【计算机网络】深度学习HTTPS协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一:HTTPS是什么二:HTTPS的工作过程三:对称加密四:非对称加密五:中间人攻击1…

精读《用 Babel 创造自定义 JS 语法》

1 引言 在写这次精读之前&#xff0c;我想谈谈前端精读可以为读者带来哪些价值&#xff0c;以及如何评判这些价值。 前端精读已经写到第 123 篇了&#xff0c;大家已经不必担心它突然停止更新&#xff0c;因为我已养成每周写一篇文章的习惯&#xff0c;而读者也养成了每周看一…

C++进阶(二) 多态

一、多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c; 具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会 产生出不同的状态。举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学…

无人机镜头稳定的原理和相关算法

无人机的镜头稳定主要基于两个关键技术&#xff1a;镜头平衡技术和实时电子稳像。无人机镜头稳定的原理和相关算法主要是通过镜头平衡技术和实时电子稳像技术来保持摄像镜头的稳定性&#xff0c;从而拍摄出清晰、稳定的画面。无人机镜头稳定的原理主要是通过传感器和算法来实现…

基于SpringBoot的在线拍卖系统(附项目源码+论文)

摘要 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、留言板管理、系统管理&#xff0c;用户&#xff1b;首页、个人中心、历史竞拍管理、竞拍订单管理、留言板管理&#xff0…

SSH教程

ssh 是远程连接的利器, 可以说凡是涉及到 linux 服务器, ssh 就是一个绕不开的话题. 本文作为一个教程, 尽可能详细的帮助读者设置 ssh, 并给出一些常用的 ssh 配置方法 (主要用于 linux 系统的远程登录和文件传输). 1. 简介 ssh 分为两个部分, sshd 服务端和 ssh 客户端. ssh…

2.2 mul、div、and、or乘除指令及所有寄存器英文名

汇编语言 1. mul乘指令 两个相乘的数&#xff0c;要么都是8位&#xff0c;要么都是16位 两个8位数相乘 一个默认放在al中&#xff0c;另一个放在8位reg或内存字节单元中8位乘法&#xff0c;结果默认放在ax中例如&#xff1a;计算100*10 100和10小于255&#xff0c;可以做8位…

优选算法|【双指针】|1089.复写零

目录 题目描述 题目解析 算法原理讲解 代码 题目描述 1089. 复写零 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就…

基于图数据库构建知识图谱平台应用实践

▏摘要 中信证券基于分布式图数据库StellarDB&#xff0c;替代国外开源图数据库产品&#xff0c;打造全新的企业级知识图谱平台&#xff0c;应用于同一客户集团画像、科创板关联发现、风险事件报告、全球企业关联图谱、产业链图谱、投研图谱、反洗钱与稽核图谱、元数据图谱等应…

《程序员职业规划手册》学习笔记

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

java八股文复习-----2024/03/03

1.接口和抽象类的区别 相似点&#xff1a; &#xff08;1&#xff09;接口和抽象类都不能被实例化 &#xff08;2&#xff09;实现接口或继承抽象类的普通子类都必须实现这些抽象方法 不同点&#xff1a; &#xff08;1&#xff09;抽象类可以包含普通方法和代码块&#x…