SVM推导过程注解(一)

article/2025/9/13 5:50:29

前言

支持向量机(Support Vector Machine)的原理其实比较简单,它是基于结构风险最小化理论之上在特征空间中建构最优分割超平面。在二维中就是线,在三维中就是面,但我们统称为超平面。

就我所看到的相关书本、论文以及网上博文情况来看,其一般步骤通常如下:

  • 在二维平面中的线性可分情况开始讲解,求解硬间隔最优化
  • 随后放宽条件,这时可以引入松弛向量,然后求解软间隔最优化
  • 再后面拓展到线性不可分的情况,这时引入核函数方法(kernel trick),将低维数据映射到高维特征空间,在高维特征空间中,这些训练样本便是线性可分的了。

SVM在数据挖掘与统计机器学习的书中是必讲的,网上优秀的教程也很多;故这里我只是将某些一笔带过或者模棱两可的推导步骤结合自己学习过程做一些补充,错误与不尽之处还望大家不吝指教!欢迎大家使劲儿拍砖耶!

求解硬间隔最优化时的相关注解

  • 首先我们回忆一下初中所学的知识,两条平行线的方程分别为:
    a x + b y = c 1 ax + by = c1 ax+by=c1
    a x + b y = c 2 ax + by = c2 ax+by=c2 (1)
    两条平行线的距离d为:
    d = ∣ c 1 − c 2 ∣ ( a 2 + b 2 ) d = \frac{|c_1-c_2|}{\sqrt(a^2+b^2)} d=( a2+b2)c1c2 (2)

  • 范数(norm)相关知识:
    p-范数 ∣ ∣ X ∣ ∣ p = ( ∣ x 1 ∣ p + ∣ x 2 ∣ p + . . . + ∣ x n ∣ p ) 1 / p ||X||_p = (|x_1|^p + |x_2|^p+...+ |x_n|^p)^{1/p} Xp=(x1p+x2p+...+xnp)1/p;也即:

    • 1-范数 = ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ |x_1| + |x_2|+...+ |x_n| x1+x2+...+xn

    • 2-范数 = ( ∣ x 1 ∣ 2 + ∣ x 2 ∣ 2 + . . . + ∣ x n ∣ 2 ) 1 / 2 (|x_1|^2 + |x_2|^2 + ...+|x_n|^2)^{1/2} (x12+x22+...+xn2)1/2

    • ∞ − 范 数 = M A X ( ∣ x 1 ∣ , ∣ x 2 ∣ , . . . , ∣ x n ∣ ) \infty-范数 = MAX(|x_1|, |x_2|, ..., |x_n|) =MAX(x1,x2,...,xn)

跟博文http://blog.csdn.net/buracag_mc/article/details/75159437中所讲的闵可夫斯基距离是否有些似曾相识;的确是这样的,p-范数确实满足范数的定义。其中三角不等式的证明不是平凡的,这个结论通常称为闵可夫斯基不等式。

其中2-范数简单记为||X||,也就是我们通常意义上所说的欧式距离!

先描述一下,假设我们有N个训练样本 ( x 1 , y 1 ) , ( x 1 , y 1 ) , … , ( x n , y n ) {(x_1, y_1),(x_1, y_1), …, (x_n, y_n)} (x1,y1),(x1,y1),,(xn,yn),x是2维向量,而 y i ∈ + 1 , − 1 y_i \in {+1, -1} yi+1,1是训练样本的标签,分别代表两个不同的类。这里我们需要用这些样本去训练学习一个线性分类器: f ( x ) = s g n ( w T x + b ) f(x)=sgn(w^Tx + b) f(x)=sgn(wTx+b),sgn函数就是一个符号函数,也就是说 w T x + b w^Tx+ b wTx+b大于0的时候,输出f(x) = 1,小于0的时候,f(x) = -1。而 w T x + b = 0 w^Tx + b=0 wTx+b=0就是我们要寻找的分类超平面,如下图所示:
这里写图片描述

我们需要这个超平面分隔这两类的效果最好,也就是说让这个超平面到这两个类的最近的那个样本的距离相同且最大。为了更好的说明,找到两个和这个超平面平行和距离相等的超平面,其实在平面几何中我们知道这就是平行线的移动,OK,如果各移动m个单位就达到要求,即:

H 1 : y = w T x + b = m H_1: y = w^Tx + b=m H1:y=wTx+b=m
H 2 : y = w T x + b = − m H_2: y = w^Tx + b=-m H2:y=wTx+b=m

形式是不跟教材中的不一样?没关系,这里我们只是需要方程两边同时除以一个m即可:

H 1 : y = ( w m ) T x + b m = 1 H_1: y = (\frac{w}{m})^Tx + \frac{b}{m}=1 H1:y=(mw)Tx+mb=1
H 2 : y = ( w m ) T x + b m = − 1 H_2: y = (\frac{w}{m})^Tx + \frac{b}{m}=-1 H2:y=(mw)Tx+mb=1 (4)

这里为了统一起见,我们令w = w/m, b=b/m,注意与前面所说的 w T x + b = 0 w^Tx + b=0 wTx+b=0中的w和b是有区别的。(其实对于 w T x + b = 0 w^Tx + b=0 wTx+b=0,我们可以进行同样处理 H 1 : y = ( w m ) T x + b m = 0 m H_1: y = (\frac{w}{m})^Tx + \frac{b}{m}=\frac{0}{m} H1:y=(mw)Tx+mb=m0,再令w=w/m, b=b/m,即可完全统一了)

在H1左侧的函数值大于1,所有其分类为+1;在H2右侧的函数值小于1,所有其分类为-1,
可以统一记为记为 y i ( W T . x i + b ) ≥ 1 y_i(W^T.x_i + b) \geq 1 yi(WT.xi+b)1
这样便是我们熟悉的形式了!


下面大家便可以猜想到了,求 H 1 H_1 H1 H 2 H_2 H2之间的最大距离。当然如果是在二维平面中(当然,这里是以二维特征来说的,当然就是二维平面了),易知便是两条平行线之间的距离,根据前面所所述平行线的距离即可求出,这里我们称之为margin。
即:margin = 2/||W||
这里对于二维特征 W T = ( w 1 , w 2 ) W^T = (w_1,w_2) WT=(w1,w2),||W||便是参数W的二范数(有的教科书又称之“模”),将上式展开表示我们熟悉的平行线的距离了 m a r g i n = 2 ( w 1 2 + w 2 2 ) margin = \frac{2}{\sqrt(w_1^2 + w_2^2)} margin=( w12+w22)2

但是,在统计机器学习中,我们要让它符合更多一般的情况,美其名曰便是“泛化能力”。将特征空间拓展到多维的情况,便是用向量来进行表示了,故在多维特征空间中,我们同样求margin= 2/||W||。

要使margin最大,即需W最小,故我们设我们的目标函数:
m i n 1 2 ∣ ∣ W ∣ ∣ 2 min \frac{1}{2}||W||^2 min21W2
s . t . y i ( W T x i + b ) ≥ 1 , ∀ x i s.t. yi(W^Tx_i + b) \geq 1, \forall x_i s.t.yi(WTxi+b)1,xi (5)

很多人会纠结W前面的系数1/2,这里加不加1/2其实没关系,这是为了求导时消去。其实在机器学习中, 我们常见的平方损失函数便是进行了同样的处理,在前面加了个常数系数1/2。

对于(5)式,准确的讲这是一个带有不等式约束的条件极值问题,根据高等数学和基础运筹学内容可以知道,我们可以用拉格朗日方法求解

这里我必须要补充的一点是:通过查阅教科书以及在阅读网上的优秀教程,我发现不同教科书和网上不同的教程都有不同的说法,虽然实质是不变的,但当时我遇到的坑必须给大家给填了。

首先带不等式约束的条件极值问题中会有大于号约束、小于号约束两种(这里我们暂且先不说带等号,下文将KKT条件的时候一并补充)

  • 第一种说法如下:将所有不等式约束条件统一为小于号约束,然后拉格朗日方程的构建规则是用约束方程乘以非负的拉格朗日系数,然后再加上目标函数即可。

  • 第二种说法如下:将所有不等式约束条件统一为大于号约束,然后拉格朗日方程的构建规则是用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去即可。

其实我们可以发现这两种说法是等价的!事实确实如此,但是很多博文在讲解拉格朗日函数的构建时要么说用目标函数加上约束方程乘以非负的拉格朗日系数,要么说用目标函数减去约束方程乘以非负的拉格朗日系数。

可能某些文章作者完全没有申明大前提,他们准确的说法应该是,***当统一成小于号约束时,拉格朗日函数的构建时是用目标函数加上约束方程乘以非负的拉格朗日系数;当统一成大于号约束时,拉格朗日函数的构建时是用目标函数减去约束方程乘以非负的拉格朗日系数。***在不提前申明不同的大前提下,可能会误导不细心以及课程学的不仔细的读者(当时包括我=_=!),导致某些人纳闷了,咦,这个拉格朗日咋一会儿是加上约束约束乘以拉格朗日系数,一会儿又是减去约束方程乘以拉格朗日系数啊???

为了统一与方便说明起见,故下文我们运用的第一种规则,将不等式约束条件统一成小于号约束。于是得到拉格朗日方程如下:
L ( w , b , a ) = 1 2 ∣ ∣ W ∣ ∣ 2 + ∑ i = 1 n a i ( 1 − y i ( w x i + b ) ) = 1 2 ∣ ∣ W ∣ ∣ 2 − ∑ i = 1 n a i ( y i ( w x i + b ) ) + ∑ i = 1 n a i L(w,b,a) = \frac{1}{2}||W||^2 + \sum_{i=1}^{n}a_i(1-y_i(wx_i+b)) = \frac{1}{2}||W||^2 - \sum_{i=1}^{n}a_i(y_i(wx_i+b)) + \sum_{i=1}^{n}a_i L(w,b,a)=21W2+i=1nai(1yi(wxi+b))=21W2i=1nai(yi(wxi+b))+i=1nai (6)

拉格朗日函数构建好后接下来便是简单的求解问题了,分别对W和b求偏导数并令其为零,得到如下结果:
W = ∑ i = 1 n a i y i x i W = \sum_{i=1}^{n}a_iy_ix_i W=i=1naiyixi (7)
∑ i = 1 n a i y i = 0 \sum_{i=1}^{n}a_iy_i = 0 i=1naiyi=0 (8)

带入(6)式即可得到:
M a x . W ( a ) = ∑ i = 1 n a i − 1 2 ∑ i = 1 , j = 1 n a i a j y i y j x i T x j Max.W(a) =\sum_{i=1}^{n}a_i - \frac{1}{2}\sum_{i=1,j=1}^{n}a_ia_jy_iy_jx_i^Tx_j Max.W(a)=i=1nai21i=1,j=1naiajyiyjxiTxj
s . t . a i ≥ 0 , ∑ i = 1 n a i y i = 0 s.t. a_i \geq 0, \sum_{i=1}^{n}a_iy_i = 0 s.t.ai0,i=1naiyi=0 (9)

为什么 m i n 1 2 ∣ ∣ W ∣ ∣ 2 min \frac{1}{2}||W||^2 min21W2问题变成了
M a x . W ( a ) = ∑ i = 1 n a i − 1 2 ∑ i = 1 , j = 1 n a i a j y i y j x i T x j Max.W(a) =\sum_{i=1}^{n}a_i - \frac{1}{2}\sum_{i=1,j=1}^{n}a_ia_jy_iy_jx_i^Tx_j Max.W(a)=i=1nai21i=1,j=1naiajyiyjxiTxj
当然是对偶问题的求解了!对偶问题是怎么推导过来的?很多文章仅仅只是一笔带过了这么重要的推导内容。。。导致很多人有些小困惑哈~,为什么构建拉格朗日函数后就将求最小化问题变成求最大化问题?OK,既然本文的定位是SVM推导过程中的解析及注解,必定是要把这个问题完整给推导清楚的。

SVM中对偶问题的注解

再回看(6)式,
L ( w , b , a ) = 1 2 ∣ ∣ W ∣ ∣ 2 + ∑ i = 1 n a i ( 1 − y i ( W T x i + b ) ) = 1 2 ∣ ∣ W ∣ ∣ 2 − ∑ i = 1 n a i ( y i ( W T x i + b ) ) + ∑ i = 1 n a i L(w,b,a) = \frac{1}{2}||W||^2 + \sum_{i=1}^{n}a_i(1-y_i(W^Tx_i+b)) = \frac{1}{2}||W||^2 - \sum_{i=1}^{n}a_i(y_i(W^Tx_i+b)) + \sum_{i=1}^{n}a_i L(w,b,a)=21W2+i=1nai(1yi(WTxi+b))=21W2i=1nai(yi(WTxi+b))+i=1nai
s . t . a i ≥ 0 s.t. a_i \geq 0 s.t.ai0

我们要处理的最优化问题最正确的表达形式其实为:
这里写图片描述 (10)
上式才是严格带有不等式约束条件下的拉格朗日条件极值的表达式。我读的很多介绍SVM的文章(包括我看的书本)都是没说的!(10)式便是一个凸规划问题。

其意义是先对a求偏导,令其等于0消掉a,然后再对W和b求L的最小值。

要直接求解(10)式是有难度的,幸好这个问题可以通过拉格朗日对偶问题来解决。常说对偶问题对偶问题,现在就是真正发挥这把利器的时候了。对(10)式做一个简单的等价变换:
这里写图片描述(11)

上式即为对偶变换,这样就把这个凸规划问题转换成了对偶问题

其意义是:原凸规划问题可以转化为先对W和b求偏导,令两个偏导数都等于0消掉W和b,然后再对a求L的最大值。与(10)的意义是相反的,或者说是对偶的!不知我讲到这步,大家是否对对偶问题有了一个豁然开朗的感觉------啊!原来对偶问题就是这啊!!

然后将求得的(7)式和(8)式带入(6)式,得:
这里写图片描述 (12)
将(12)式带入(11)式得:
这里写图片描述 (13)
再考虑到(8)式,对偶问题的完整表达为:
这里写图片描述 (14)

到了这一步,我们便可以直接用数值方法计算求解拉格朗日乘数a了。求得a过后根据(7)式可以得到W,然后根据超平面方程可以求出b。最终便得到了我们想要的超平面和分类决策函数,也就是我们训练好的SVM分类器。那么对于待分类样本X,其分类为为:
这里写图片描述 (15)

我们根据(15)式可以发现,对于一个待分类样本,我们先计算待分类样本和训练样本的内积然后加权就和再加上b值即可。训练样本特别大的情况下,如果对所有训练样本做运算是否太耗时了啊?很多教科书以及网上教程都是直接说根据KKT条件可知,只有支持向量的乘子(拉格朗日乘数) a i a_i ai不等于0,其他训练样本的乘子都为0,这样便会大大减少运算量,也是后面SVM引入核函数(kernel)的铺垫。这又会引起新的疑惑,为什么只有支持向量对应的乘子不为0呢?

##SVM中KKT条件注解
这里还是继续讨论一下带等式和不等式约束的条件极值问题。任何极值问题的约束条件不外乎3种:等式、大于号和小于号,为了统一起见,我们将不等式约束统一为小于号。
例如:
m i n ( m a x ) f ( x ) min(max) f(x) min(max)f(x)
s . t . g i ( x ) ≤ 0 , i = 1 , 2... n 1 s.t. g_i(x) \leq0,i=1,2...n_1 s.t.gi(x)0,i=1,2...n1
h j ( x ) = 0 , j = 1 , 2... n 2 h_j(x) = 0,j=1,2...n_2 hj(x)=0,j=1,2...n2

那么一个极值优化问题我们转化为:
这里写图片描述

  • KKT条件就是函数的最优值必须满足以下条件:
    • L对各个x的偏导为零
    • h(x) = 0
    • ∑ i = 1 n 1 a i g i ( x ) = 0 , a i ≥ 0 \sum_{i=1}^{n_1}a_ig_i(x) =0 , a_i\geq0 i=1n1aigi(x)=0,ai0

假设一个目标函数,3个不等式约束条件把自变量约束在一定范围,而目标函数是在这个范围内寻找最优解。
这里写图片描述

  • 1.函数开始也不知道该取哪一个值是吧,假设某一次取得自变量集合为x1*,发现不满足约束,然后再换呀换;

  • 2.假设到x2满足约束条件,但是这个时候函数值不是最优的,并且x2使得g1(x)与g2(x)等于0了,而g3(x)还是小于0。这个时候,我们发现在x2*的基础上再寻找一组更优解要靠谁呢?当然是要靠约束条件g1(x)与g2(x),因为他们等于0了,很极限呀,一不小心,走错了就不满足这两个约束的条件了,这个时候我们会选择g1(x)与g2(x)的梯度方向往下走,以寻找最优值解。

  • 3.这个时候需不需要管约束条件g3(x)呢?正常来说管不管都可以,如果管,也取g3在x2处的梯度的话,由于g3已经满足小于0的条件,这时候再取在x2处的梯度,有可能更快得到结果,也有可能适得其反;如果不管g3,由于g1和g2已经在边缘了,只取g1和g2的梯度,是肯定会让目标函数接近解的;故我们这时候是不用考虑g3的;

  • 4.再往下走,到了x3*处发现g2和g3等于0了,也就是说走到边了,而g1是满足约束小于0的,这时候我们重复上一步,取g2和g3的梯度方向作为变化方向,而不用管g1.

  • 5.一直循环3(4)步,直到找到最优解。

可以看到的是,如果如果g1、g2=0时,由于他们本身的条件是小于0的,我们是需要优化他们的,操作上便是乘以一个正常数a作为他们梯度增长的倍数(或者说学习效率),那些暂且不需要考虑的约束,例如这里说的g3,我们可以乘以系数0,即在下一次的优化中是不用考虑这些约束的。综上所述的话:
∑ i = 1 n 1 a i g i ( x ) = 0 , a i ≥ 0 \sum_{i=1}^{n_1}a_ig_i(x) = 0, a_i\geq0 i=1n1aigi(x)=0,ai0

如上,简单直观地说便是KKT条件中第三个式子的意义了。

回到SVM的推导上来,对于(6)式,我们知道其KKT条件中的第三个式子为:
∑ i = 1 n 1 a i ( 1 − y i ( W T . x i + b ) ) = 0 \sum_{i=1}^{n_1}a_i(1-y_i(W^T.x_i+b)) = 0 i=1n1ai(1yi(WT.xi+b))=0

我们知道除了支持向量,对于其他训练样本有:

  • y i ( W T . x i + b ) &gt; 1 y_i(W^T.x_i + b) &gt; 1 yi(WT.xi+b)>1 也即 1 − y i ( W T . x i + b ) &lt; 0 1 - y_i(W^T.x_i + b) &lt;0 1yi(WT.xi+b)<0根据前面所述的内容知道,其对应的乘子为0。

  • 对于支持向量来说: y i ( W T . x i + b ) = 1 y_i(W^T.x_i + b) =1 yi(WT.xi+b)=1 也即 1 − y i ( W T . x i + b ) = 0 1 - y_i(W^T.x_i + b) =0 1yi(WT.xi+b)=0,其对应的乘子不为0。

也就是说,新来的待分类样本只需与支持向量求内积即可,这便大大减少了计算量!这便是KKT条件在SVM关键推导中的应用。

这里我再补偿一下另外一种思路,其实本质还是KKT条件:
由于(5)式与(10)式等价,即:
这里写图片描述 (16)

故要使(16)式成立,只有令 a i ( 1 − y i ( W T . x i + b ) ) = 0 a_i(1-y_i(W^T.x_i+b)) = 0 ai(1yi(WT.xi+b))=0成立,由此得到KKT的第三个条件:
∑ i = 1 n 1 a i ( 1 − y i ( W T . x i + b ) ) = 0 \sum_{i=1}^{n_1}a_i(1-y_i(W^T.x_i+b)) = 0 i=1n1ai(1yi(WT.xi+b))=0
同样可出结论:支持向量对应的乘子为正系数;如果一个样本不是支持向量,则其对应的乘子为0。



http://chatgpt.dhexx.cn/article/vdk9eki0.shtml

相关文章

AI面试之SVM推导

SVM现在主流的有两个方法。一个是传统的推导&#xff0c;计算支持向量求解的方法&#xff0c;一个是近几年兴起的梯度下降的方法。 梯度下降方法的核心是使用了hinge loss作为损失函数&#xff0c;所以最近也有人提出的深度SVM其实就是使用hinge loss的神经网络。 本文的目的是…

CS229 SVM 推导和使用心得

这两天要用到SVR的几何解释,特地又翻了CS229 lecture3的笔记。特此记录一下我理解的思路。 从logistic regression引入,说明我们应该更关注于离separating hyperplane近的点,进而引入了margin的概念。 我们想让margin尽量的大,但最直接的functional margin可以通过缩放ω和…

SVM推导过程

推导目标函数 则 w,b等比例缩放&#xff0c;则t*y的值同样缩放&#xff0c;从而&#xff1a; 最大间隔分离超平面&#xff1a; 目标函数&#xff1a; 表示最近点到直线距离尽可能大 函数间隔和几何间隔 分割平面(函数间隔) 。总可以通过等比例缩放w的方法&#xff0c;使…

SVM 推导

参考 http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html http://blog.csdn.net/sinat_22594309/article/details/61615946 http://blog.csdn.net/v_july_v/article/details/7624837 理解SVM 函数间隔->几何间隔->拉格朗日算子->KTT条件 函数间隔 …

SVM 原理详细推导

SVM 原理详细推导 1 硬间隔最大化1.1 函数间隔与几何间隔1.2 间隔最大化1.3 凸二次规划问题求解1.4 一个求解例子 2 软间隔最大化3 线性不可分问题参考 SVM 是一个分类模型&#xff0c;如果训练数据可以完全用一个超平面分开&#xff0c;则称数据集为完全线性可分的&#xff0c…

机器学习笔记:线性SVM推导

什么是SVM 支持向量机简称SVM是最大化分类间隔的线性分类器&#xff0c;如果使用核函数&#xff0c;可以解决非线性问题。支持向量机的目标是寻找一个分类超平面&#xff0c;它不仅能正确的分类每一个样本&#xff0c;并且要使得每一类样本中距离超平面最近的样本到超平面的距…

SVM推导过程浅析

转载请注明出处&#xff0c;原文地址 前言 SVM - support vector machine, 俗称支持向量机&#xff0c;为一种supervised learning算法&#xff0c;属于classification的范畴。本篇文章将会讲述SVM的原理并介绍推导过程。 SVM推导过程 如图&#xff0c;我们有些红色与蓝色点…

svm推导

自己推一遍才印象深刻&#xff0c;CSDN对公式的支持很不好&#xff0c;所以在本地用latex写&#xff0c;并转换成了图片上传

【超详细】支持向量机(SVM)数学推导

目录 一、硬间隔SVM&#xff08;Hard Margin SVM) 二、对偶问题&#xff08;Dual Problem) 1.将有约束问题转变为无约束问题 2.强对偶关系 3.计算拉格朗日函数的最小值 4.得到对偶形式 三、对偶形式的求解 1.KKT条件的引入 2.计算w*和b* 四、软间隔SVM&#xff08;Soft M…

svm原理详细推导

笔者在查阅了大量资料和阅读大佬的讲解之后&#xff0c;终于对svm有了比较深一点的认识&#xff0c;先将理解的推导过程分享如下&#xff1a; 本文主要从如下五个方面进行介绍&#xff1a;基本推导&#xff0c;松弛因子&#xff0c;核函数&#xff0c;SMO算法&#xff0c;小结…

支持向量机SVM推导及求解过程

支持向量机是属于原创性、非组合的具有明显直观几何意义的分类算法&#xff0c;具有较高的准确率。 使用SVM算法的思路&#xff1a;&#xff08;1&#xff09;简单情况&#xff0c;线性可分情况&#xff0c;把问题转化为一个凸优化问题&#xff0c;可以用拉格朗日乘子法简化&am…

SVM 公式推导

1、SVM思想 &#xff08;1&#xff09;SVM算法的依据就是分类器B的分类间隔比分类器C的分类间隔大。这里涉及到第一个SVM独有的概念”分类间隔”。在保证决策面方向不变且不会出现错分样本的情况下移动决策面&#xff0c;会在原来的决策面两侧找到两个极限位置&#xff08;越过…

机器学习笔记之十二——SVM原理及推导

svm&#xff08;support vector machine&#xff09;是一种二分类算法&#xff0c;它的目标在于寻找一个能将两种点分离的直线或平面或超平面。 如图&#xff08;来自wiki&#xff09;&#xff1a; 图中的红线将两边数据点分开&#xff0c;这条线就是分割直线&#xff0c;同样…

DFS与DP算法

名词解释&#xff1a; DFS(Dynamic Plan)&#xff1a;动态规划 DFS(Depth First Search)&#xff1a;深度优先搜索 DFS与DP的关系 很多情况下&#xff0c;dfs和dp两种解题方法的思路都是很相似的&#xff0c;这两种算法在一定程度上是可以互相转化的。 想到dfs也就常常会想到dp…

​Python—数据结构与算法​---动态规划—DP算法(Dynamic Programing)

我们一路奋战&#xff0c; 不是为了改变世界&#xff0c; 而是为了不让世界改变我们。 目录 我们一路奋战&#xff0c; 不是为了改变世界&#xff0c; 而是为了不让世界改变我们。 动态规划——DP算法&#xff08;Dynamic Programing&#xff09; 一、&#x1f3d4;斐波那契…

XDOJ(智慧平台)--分配宝藏(用动态规划dp算法解决)(C语言)

------------------------------------------------------------ 作为西电渣渣&#xff0c;这是我第一次接触需要一些很明确的算法的题目。 第一次博客写废话较多hhh&#xff0c;可以直接到下面看分析 我在昨天晚上和舍友一起肝这道题&#xff0c;肝了一个晚上都没有解决&…

dp算法篇Day1

"多希望有人来陪我&#xff0c;度过末日啊~" 讲讲我为什么突然想更新这篇栏目。 想想自己也算 "系统" 接触计算机这个学科也有差不多一年了&#xff0c;回想起当初下定决心要全身心投入到这个专业或者说行业中来&#xff0c;现在到了这样的地步&#xff0c…

第十四周DP算法总结

这周自己主要再看DP算法的博客&#xff0c;感觉DP这一部分内容确实比之前的都要麻烦一些&#xff0c;最后攻克这一部分难题还是挺好的。 这周自己总结了一些题型&#xff0c;以及一些方法思路&#xff0c;最后再把动态规划和之前的分治和贪心做一下比较。下面是详细的总结。 动…

DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一

DP算法&#xff08;Dynamic Programming,俗称动态规划&#xff09;是最经典算法之一.本笔记以耳熟能详的数塔问题为引子,深入讨论01背包的解决方法. 首先,如下图所示,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少&#xff1f; 这个问题,对…

DP算法:动态规划算法

步骤 &#xff08;1&#xff09;确定初始状态 &#xff08;2&#xff09;确定转移矩阵&#xff0c;得到每个阶段的状态&#xff0c;由上一阶段推到出来 &#xff08;3&#xff09;确定边界条件。 例题 蓝桥杯——印章&#xff08;python实现&#xff09; 使用dp记录状态&#x…