机器人中的数值优化(二十)——函数的光滑化技巧

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



  

   三十二、函数的光滑化技巧

   1、Inf convolution 卷积操作

   Inf convolution 卷积操作适应于凸函数,Inf convolution 卷积操作的目标是把不光滑的凸函数进行光滑近似,并使得光滑近似后的函数于原函数尽量吻合

   对于两个凸函数 f 1 f_1 f1 f 2 f_2 f2,它们之间的Inf convolution 卷积操作记为 f 1 □ f 2 f_{1}□ f_{2} f1f2,即找一个 u 1 u_1 u1 u 2 u_2 u2,满足 u 1 u_1 u1+ u 2 u_2 u2= x x x的条件下,使得 f 1 ( u 1 ) + f 2 ( u 2 ) f_{1}(u_{1})+f_{2}(u_{2}) f1(u1)+f2(u2)最大或最小,如下面的第一个表达式所示,由于满足 u 1 u_1 u1+ u 2 u_2 u2= x x x,因此可消去一个u进行简化,简化后的表达式如下面第二个式子所示:

   ( f 1 □ f 2 ) ( x ) = inf ⁡ ( u 1 , u 2 ) ∈ R d × R d { f 1 ( u 1 ) + f 2 ( u 2 ) : u 1 + u 2 = x } ( f 1 □ f 2 ) ( x ) = inf ⁡ u ∈ R d { f 1 ( u ) + f 2 ( x − u ) } \begin{aligned}(f_1□ f_2)(x)&=\inf_{(u_1,u_2)\in\mathbb{R}^d\times\mathbb{R}^d}\{f_1(u_1)+f_2(u_2):u_1+u_2=x\}\\(f_1□ f_2)(x)&=\inf_{u\in\mathbb{R}^d}\{f_1(u)+f_2(x-u)\}\end{aligned} (f1f2)(x)(f1f2)(x)=(u1,u2)Rd×Rdinf{f1(u1)+f2(u2):u1+u2=x}=uRdinf{f1(u)+f2(xu)}

   Inf convolution 卷积具有对称性,即 f 1 □ f 2 = f 2 □ f 1 f_1□ f_2=f_2□ f_1 f1f2=f2f1

   Inf convolution 卷积的几何解释如下图所示,假设我们考虑两个凸函数,一个是常见的绝对值函数 f ( x ) = ∣ x ∣ \color{red}{f(x)=|x|} f(x)=x,另一个是二次函数 g ( x ) = 1 2 x 2 g(x)=\frac12x^2 g(x)=21x2,如下面的第一幅图所示,对这两个函数进行Inf convolution 卷积操作,即将光滑的函数 g ( x ) = 1 2 x 2 g(x)=\frac12x^2 g(x)=21x2的原点不断地在绝对值函数 f ( x ) = ∣ x ∣ \color{red}{f(x)=|x|} f(x)=x上进行移动,依次得到下面的第二幅图和第三幅图,最终得到包络即f函数与g函数的Inf convolution 卷积操作。

在这里插入图片描述

   如果min可以取到的话, e p i ( f □ g ) = e p i ( f ) + e p i ( g ) epi(f□g)=epi(f)+epi(g) epi(fg)=epi(f)+epi(g)

   Inf convolution 卷积操作的原理其实就是拿光滑凸函数的轮廓去把不光滑的地方利用包络给它磨圆


   2、Moreau 包络

   Moreau envelope是Inf convolution 卷积操作的一个特例,即将被卷积函数更改为一个二次函数或者说范数的平方,如下式所示:

   γ f : = f □ ( 1 2 γ ∥ ⋅ ∥ 2 ) ^\gamma f:=f\Box\left(\frac{1}{2\gamma}\|\cdot\|^2\right) γf:=f(2γ12)

   其具体表达式如下式所示:

   γ f ( x ) : = inf ⁡ u ∈ R d { f ( u ) + 1 2 γ ∥ x − u ∥ 2 } ^\gamma f(x):=\inf_{u\in\mathbb{R}^d}\{f(u)+\frac{1}{2\gamma}\left\|x-u\right\|^2\} γf(x):=uRdinf{f(u)+2γ1xu2}

   当一个函数时封闭的凸函数时,inf一定可以取到最小值, γ \gamma γ具有平滑参数的作用, γ \gamma γ越小,平滑后的函数与原函数越接近。

在这里插入图片描述

   下面来看一个Pinball函数的示例,Pinball函数的定义如下

   ℓ s 1 , s 2 ( x ) = { s 1 x if x ≤ 0 s 2 x if x ≥ 0 \ell_{s_1,s_2}(x)=\begin{cases}s_1x&\text{if}x\le0\\s_2x&\text{if}x\ge0\end{cases} s1,s2(x)={s1xs2xifx0ifx0

   其中, s 1 ≤ 0 ≤ s 2 s_1\leq0\leq s_2 s10s2,Pinball函数的Moreau 包络函数如下所示

   γ f ( x ) = ( f □ g ) ( x ) = = { s 1 x − γ s 1 2 2 , if  x < s 1 1 2 γ x 2 , if  x ∈ [ γ s 1 , γ s 2 ] s 2 x − γ s 2 2 2 , if  x > s 2 \gamma f(x)=(f\Box g)(x)==\quad\begin{cases}s_1x-\gamma\frac{s_1^2}{2},&\text{if }x<s_1\\\frac{1}{2\gamma}x^2,&\text{if }x\in[\gamma s_1,\gamma s_2]\\s_2x-\gamma\frac{s_2^2}{2},&\text{if }x>s_2\end{cases} γf(x)=(fg)(x)== s1xγ2s12,2γ1x2,s2xγ2s22,if x<s1if x[γs1,γs2]if x>s2

   一个经典的例子是Huber函数 ℓ − 1 , 1 \ell_{-1,1} 1,1,即 s 1 s_1 s1取-1, s 2 s_2 s2取1

在这里插入图片描述

   相关证明如下:

在这里插入图片描述

   当我们不断地把 γ \gamma γ值减小,平滑后的函数与原函数也更加接近,包络的下边缘也会越来越尖,如下图所示:

在这里插入图片描述

   Moreau 包络具有一个良好的性质,即一个函数与它的Moreau 包络函数的最小值相同,即

   ∀ γ > 0 , inf ⁡ x ( ( γ f ) ( x ) ) = inf ⁡ x f ( x ) \forall\gamma>0,\quad\inf_x\left((^\gamma f)(x)\right)=\inf_xf(x) γ>0,xinf((γf)(x))=xinff(x)

   证明过程如下:

   inf ⁡ x ( ( γ f ) ( x ) ) = inf ⁡ x inf ⁡ y { f ( y ) + 1 2 γ ∥ x − y ∥ 2 } = inf ⁡ y inf ⁡ x { f ( y ) + 1 2 γ ∥ x − y ∥ 2 } = inf ⁡ y f ( y ) \begin{aligned} \operatorname*{inf}_{x}\left((^{\gamma}f)(x)\right)& =\inf_x\inf_y\left\{f(y)+\frac1{2\gamma}\left\|x-y\right\|^2\right\} \\ &=\inf_y\inf_x\left\{f(y)+\frac{1}{2\gamma}\left\|x-y\right\|^2\right\} \\ &=\inf_{y}f(y) \end{aligned} xinf((γf)(x))=xinfyinf{f(y)+2γ1xy2}=yinfxinf{f(y)+2γ1xy2}=yinff(y)

在这里插入图片描述


   总结一下,用Inf convolution 卷积操作可以对一个不光滑的凸函数进行平滑,平滑后的函数与原函数具有同样的最小值,给一个光滑因子 γ \gamma γ用来调节光滑程度,我们把不光滑的凸函数 f f f的光滑近似记作 ω γ f _{\omega}^{\gamma}f ωγf ω \omega ω是我们用来光滑 f f f的被卷积的函数, ω \omega ω 1 2 ∥ ⋅ ∥ 2 \frac{1}{2}\|\cdot\|^2 212时,就是Moreau 包络

在这里插入图片描述

   假设,我们用 g ( x ) = 1 2 x 2 + 1 2 g(x)=\frac12x^2+\frac12 g(x)=21x2+21来作为被卷积的函数,把 g ( x ) g(x) g(x)的原点挪动一遍后,形成的包络如下图所示,我们可以改变 g ( x ) g(x) g(x)来获得不同的效果。

在这里插入图片描述

   Inf-conv卷积是平滑凸函数的一种常用方法。它可以处理Moreau 包络或者Nesterov 平滑无法处理的问题。

在这里插入图片描述


   3、Mollifier-Conv

   Mollifier卷积是比Inf-conv卷积更一般化的卷积,举一个例子,对于如式所示的函数,它是通过 e − 1 1 − x 2 e^\frac{-1}{1-x^2} e1x21变化而来的,除以其自身的积分相当于进行了缩放操作,这样一个凸起的或者说隆起的函数就称为Mollifier

   φ ( x ) = { e − 1 / ( 1 − x 2 ) ∫ − 1 1 e − 1 / ( 1 − s 2 ) d s i f ∣ x ∣ < 1 0 i f ∣ x ∣ ≥ 1 \varphi(x)=\begin{cases}\frac{e^{-1/(1-x^2)}}{\int_{-1}^1e^{-1/(1-s^2)}\mathrm{d}s}&\mathrm{~if~}|x|<1\\0&\mathrm{~if~}|x|\geq1&\end{cases} φ(x)= 11e1/(1s2)dse1/(1x2)0 if x<1 if x1

在这里插入图片描述

   更一般的,取 φ ϵ ( x ) : = 1 ϵ φ ( x ϵ ) \varphi_\epsilon(x):=\frac1\epsilon\varphi(\frac x\epsilon) φϵ(x):=ϵ1φ(ϵx),将该函数与下面右图中红色曲线所示的函数进行卷积 f ϵ ( x ) : = ∫ − ∞ + ∞ f ( x + z ) φ ϵ ( z ) d z f_\epsilon(x):=\int_{-\infty}^{+\infty}f(x+z)\varphi_\epsilon(z)dz fϵ(x):=+f(x+z)φϵ(z)dz,得到了下面右图中的蓝色曲线,其中 ϵ \epsilon ϵ用于调节光滑效果, ϵ \epsilon ϵ越小光滑效果越差,越接近于原函数。

在这里插入图片描述

   下图中给出了一个二维的例子,在一维的基础上进行了推广

   φ ( x ) = { e − 1 / ( 1 − ∥ x ∥ 2 ) ∫ R n e − 1 / ( 1 − ∥ s ∥ 2 ) d s i f ∥ x ∥ < 1 0 i f ∥ x ∥ ≥ 1 \varphi(x)=\begin{cases}\frac{e^{-1/(1-\|x\|^2)}}{\int_{\mathbb{R}^n}e^{-1/(1-\|s\|^2)}\mathrm{d}s}&\mathrm{~if~}\|x\|<1\\0&\mathrm{~if~}\|x\|\geq1&\end{cases} φ(x)= Rne1/(1s2)dse1/(1x2)0 if x<1 if x1

在这里插入图片描述

   φ ϵ ( x ) : = 1 ϵ n φ ( x ϵ ) f ϵ ( x ) : = ∫ − ∞ + ∞ f ( x + z ) φ ϵ ( z ) d z \begin{gathered}\varphi_\epsilon(x):=\frac1{\epsilon^n}\varphi\Big(\frac x\epsilon\Big)\\\\f_\epsilon(x):=\int_{-\infty}^{+\infty}f(x+z)\varphi_\epsilon(z)dz\end{gathered} φϵ(x):=ϵn1φ(ϵx)fϵ(x):=+f(x+z)φϵ(z)dz

在这里插入图片描述

   Mollifier的具体定义如下所示,其满足积分为1,且当 ϵ \epsilon ϵ趋于0的时候, φ ( x ) \varphi(x) φ(x)趋于冲激函数 δ ( x ) \delta(x) δ(x),只要满足这两个条件都可以称为Mollifier

   ∫ R n φ ( x ) d x = 1 lim ⁡ ϵ → 0 φ ϵ ( x ) = lim ⁡ ϵ → 0 ϵ − n φ ( x / ϵ ) = δ ( x ) \begin{aligned}&\int_{\mathbb{R}^n}\varphi(x)\mathrm{d}x=1\\&\lim_{\epsilon\to0}\varphi_\epsilon(x)=\lim_{\epsilon\to0}\epsilon^{-n}\varphi(x/\epsilon)=\delta(x)\end{aligned} Rnφ(x)dx=1ϵ0limφϵ(x)=ϵ0limϵnφ(x/ϵ)=δ(x)

   下面进行简单的推导,为什么使用Mollifier函数进行卷积操作,可对原函数进行平滑处理

   d d x f ϵ ( x ) = d d x ∫ f ( x + z ) φ ϵ ( z ) d z = d d x ∫ f ( y ) φ ϵ ( y − x ) d y = ∫ f ( y ) ( d d x φ ϵ ( y − x ) ) d y \begin{aligned} \frac d{dx}f_\epsilon(x)& =\frac d{dx}\int f(x+z)\varphi_\epsilon(z)\mathrm{d}z \\ &=\frac d{dx}\int f(y)\varphi_\epsilon(y-x)dy \\ &=\int f(y)\left(\frac d{dx}\varphi_\epsilon(y-x)\right)dy \end{aligned} dxdfϵ(x)=dxdf(x+z)φϵ(z)dz=dxdf(y)φϵ(yx)dy=f(y)(dxdφϵ(yx))dy

   即若Mollifier函数是处处连续可微的,则对某个函数进行Mollifier卷积操作后得到的函数也是处处连续可微的,

   在下面的例子中,Mollifier函数取为 φ ( x ) = 1 e x + e − x + 2 \varphi(x)=\frac1{e^x+e^{-x}+2} φ(x)=ex+ex+21,原函数为 f ( x ) = max ⁡ ( x , 0 ) f(x)=\max(x,0) f(x)=max(x,0),则进行Mollifier卷积后的函数变为下式:

   f ϵ ( x ) = ∫ − ∞ + ∞ max ⁡ ( x + z , 0 ) φ ϵ ( z ) d x = ϵ ln ⁡ ( 1 + e x / ϵ ) f_\epsilon(x)=\int_{-\infty}^{+\infty}\max(x+z,0)\varphi_\epsilon(z)\mathrm{d}x=\epsilon\ln(1+e^{x/\epsilon}) fϵ(x)=+max(x+z,0)φϵ(z)dx=ϵln(1+ex/ϵ)

   Mollifier卷积后的效果如下面的右图所示:

在这里插入图片描述

   我们知道 max ⁡ ( x 1 , x 2 ) \max(x_1,x_2) max(x1,x2)等价于 x 1 + max ⁡ ( x 2 − x 1 , 0 ) x_1+\max(x_2-x_1,0) x1+max(x2x1,0),代入上面的表达式,我们可以进一步得到原函数为 max ⁡ ( x 1 , x 2 ) \max(x_1,x_2) max(x1,x2)时,Mollifier卷积后的结果为 ϵ ln ⁡ ( e x 1 / ϵ + e x 2 / ϵ ) \epsilon\ln(e^{x_1/\epsilon}+e^{x_2/\epsilon}) ϵln(ex1/ϵ+ex2/ϵ),同理可推广到多个值取max的情况,如下所示:

   max ⁡ ( x 1 , x 2 ) = x 1 + max ⁡ ( x 2 − x 1 , 0 ) ⟷ x 1 + f ϵ ( x 2 − x 1 ) = ϵ ln ⁡ ( e x 1 / ϵ + e x 2 / ϵ ) max ⁡ ( x 1 , … , x n − 1 , x n ) = max ⁡ ( x n , max ⁡ ( x 1 , … , x n − 1 ) ) ⟷ ϵ ln ⁡ ∑ i = 1 n e x i / ϵ l o g ⋅ s u m ⋅ e α p \begin{aligned}\max(x_1,x_2)&=x_1+\max(x_2-x_1,0)\quad\longleftrightarrow\quad&x_1+f_\epsilon(x_2-x_1)=\epsilon\ln(e^{x_1/\epsilon}+e^{x_2/\epsilon})\\\max(x_1,\ldots,x_{n-1},x_n)&=\max(x_n,\max(x_1,\ldots,x_{n-1}))\quad\longleftrightarrow\quad&\epsilon\ln\sum_{i=1}^ne^{x_i/\epsilon\quad\mathsf{log}\cdot\mathsf{sum}\cdot\mathsf{e}\alpha\mathbf{p}}\end{aligned} max(x1,x2)max(x1,,xn1,xn)=x1+max(x2x1,0)=max(xn,max(x1,,xn1))x1+fϵ(x2x1)=ϵln(ex1/ϵ+ex2/ϵ)ϵlni=1nexi/ϵlogsumeαp

在这里插入图片描述

   ϵ \epsilon ϵ取1时, max ⁡ { x 1 , … , x k } \max\{x_1,\ldots,x_k\} max{x1,,xk}函数经过Mollifier卷积处理后的示意图如下所示:

在这里插入图片描述

   所以, f ( x ) : = log ⁡ ( ∑ k = 1 n exp ⁡ x k ) f(x):=\log\left(\sum_{k=1}^n\exp x_k\right) f(x):=log(k=1nexpxk)可以被视为光滑的max函数的替代品,在工程中很常用。


   若我们将Mollifier函数更改为 φ ( x ) = 2 ( x 2 + 4 ) 3 / 2 \color{red}{\varphi(x)=\frac2{(x^2+4)^{3/2}}} φ(x)=(x2+4)3/22,原函数为 f ( x ) = max ⁡ ( x , 0 ) f(x)=\max(x,0) f(x)=max(x,0),则进行Mollifier卷积后的函数变为下式,这个函数也被称为CHKS函数,常用作光滑化的max 函数来对max函数进行替代。

   f ϵ ( x ) = ∫ − ∞ + ∞ max ⁡ ( x + z , 0 ) φ ϵ ( z ) d x = x + x 2 + 4 ϵ 2 2 f_\epsilon(x)=\int_{-\infty}^{+\infty}\max(x+z,0)\varphi_\epsilon(z)\mathrm{d}x=\frac{x+\sqrt{x^2+4\epsilon^2}}2 fϵ(x)=+max(x+z,0)φϵ(z)dx=2x+x2+4ϵ2

在这里插入图片描述


   下面给出了一个Weierstrass变换的例子,Weierstrass变换是连续版本的高斯模糊,他也可以得到光滑的函数

在这里插入图片描述


   下面给出了一个采用分段光滑的例子

   F μ ( x ) = { 0 i f x ≤ 0 ( μ − x / 2 ) ( x / μ ) 3 i f 0 < x < μ x − μ / 2 i f x ≥ μ F_\mu(x)=\begin{cases}0&\mathrm{~if~}x\leq0\\(\mu-x/2)(x/\mu)^3&\mathrm{~if~}0<x<\mu\\x-\mu/2&\mathrm{~if~}x\geq\mu&\end{cases} Fμ(x)= 0(μx/2)(x/μ)3xμ/2 if x0 if 0<x<μ if xμ

在这里插入图片描述



   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化


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

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

相关文章

数据结构——常见的十种排序算法

一、常见的十种排序算法&#xff1a; 冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序 1.【知识框架】 补充&#xff1a; 内部排序&#xff1a;整个排序过程完全在内存中进行。 外部排序&#xff1a;由于待排序记录数据量太…

vued中图片路径与主机路径相关联,例如img:‘http://127.0.0.1:8000/media/data/els.jpg‘

1.在Django项目的settings.py文件中&#xff0c;确保已指定正确的MEDIA_URL和MEDIA_ROOT。MEDIA_URL定义了图片的URL前缀&#xff0c;MEDIA_ROOT定义了本地文件系统中存储图片的路径。 2.在 Django 项目的主 urls.py 文件中&#xff0c;确保包含了适当的 URL 配置&#xff0c;以…

mfoc-hardnested在visual studio2022编译

1、点击mfoc-hardnested.sln 2、没有clang LLVM (clang-cl) (未安装) 打开installer 点击修改: 单个组件中搜索clang &#xff0c;安装即可 3、编译 4、main函数 5、mfoc-hardnested.exe使用

关于webWorker未解问题

今天尝试学习webworker,尝试在vue3项目里面使用 使用的就是常规方法,使用worker-loader,加上在vue.config.js内部添加配置 使用完发现问题 如图所见,该worker仅仅配置点击后传输字符串"1",并在worker内部打印,发现打印不出来 但是仅仅只是将引入的文件换个名字 …

基于springboot实现汽车租赁管理系统项目演示【项目源码+论文说明】分享

基于springboot实现汽车租赁管理系统项目演示 摘要 随着社会的发展&#xff0c;计算机的优势和普及使得汽车租赁系统的开发成为必需。汽车租赁系统主要是借助计算机&#xff0c;通过对汽车租赁信息等信息进行管理。减少管理员的工作&#xff0c;同时也方便广大用户对个人所需汽…

用OpenCV(Python)获取图像的SIFT特征

import cv2 as cv import numpy as np import matplotlib.pyplot as plt imgcv.imread("../Lena.png") img_graycv.cvtColor(img,cv.COLOR_BGR2GRAY)#创建一个SIFI对象 siftcv.SIFT_create()#使用SIFT对象在灰度图像img_gray中检测关键点&#xff0c;结果存储在变量k…

解读非托管流动性协议Hover: 差异化、层次化的全新借贷体系

“Hover 是 DeFi 借贷赛道的另辟蹊径者&#xff0c;除了在自身机制&#xff08;借贷模型、治理体系&#xff09;上进行创新获得内生动力外&#xff0c;背靠日渐繁荣的 Kava、Cosmos 生态进一步获得外生动力&#xff0c;发展潜力俱佳” 与 DEX 类似&#xff0c;借贷也是 DeFi 世…

对一门不是非常熟悉的语言是怎么面试的

公司是一个基础通讯类的公司&#xff0c;需要的职位是一个高级系统和软件工程师。 职位要求&#xff0c;是一个完全不怎么大众的语言&#xff1a;Elixir。 没听过&#xff0c;这就对了&#xff0c;这是一个函数式的语言&#xff0c;可以认为是 Erlang 的升级版本&#xff0c;…

Postgresql源码(115)LLVM JIT运行逻辑分析(上)

1 JIT入口开关 总入口&#xff1a;jit_enabled打开 且 生成计划成本超过jit_above_cost启动JIT。 计划成本超过jit_optimize_above_cost&#xff0c;执行PGJIT_OPT3使用O3对IR进行优化。计划成本超过jit_inline_above_cost&#xff0c;执行PGJIT_INLINE。jit_expressions开关如…

Linux网络监控工具 - iftop

iftop 是一个基于 libpcap 库的网络流量监控工具。它通过监听指定网络接口上的数据包&#xff0c;并分析这些数据包的源地址、目标地址、源端口、目标端口、协议等信息&#xff0c;从而实时显示网络流量的相关统计信息。 安装 在大多数Linux发行版中&#xff0c;您可以使用包管…

【排序算法】冒泡排序

文章目录 一&#xff1a;排序算法1.1 介绍1.2 分类 二&#xff1a;冒泡排序2.1 基本介绍2.2 图解冒泡排序算法2.3 代码实现 三&#xff1a;算法性能分析3.1 时间复杂度3.2 空间复杂度 一&#xff1a;排序算法 1.1 介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将…

upload-labs靶场通关

文章目录 Pass-01 前端检测&#xff08;JS检测&#xff09;1.1 原理分析1.2 实验 Pass-02 后端检测&#xff08;MIME检测&#xff09;2.1 原理分析2.2 实验 Pass-03 后端检测&#xff08;黑名单绕过&#xff0c;特殊后缀名&#xff09;3.1 原理分析3.2 实验 Pass-04 后端检测&a…

【力扣-每日一题】2034. 股票价格波动

class StockPrice { private:unordered_map<int,int> mp; //存储日期及其对应的价格multiset<int> st; //存储所有价格int last_day; //最新一天 public:StockPrice() {this->last_day0;}void update(int timestamp, int price) {if(mp.find(timestamp)!mp…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串…

大数据—数据透析表常见使用(手把手详解)

我的个人主页&#xff1a;☆光之梦☆_C语言基础语法&#xff08;超详细&#xff09;,【java入门】语法总结-CSDN博客 创作不易&#xff0c;如果能帮到你就好 注&#xff1a;你的 &#x1f44d;点赞 ⭐收藏 &#x1f4dd;评论 是对博主最大的支持与鼓励喔 目录 一、创建数据透…

【微服务】七. http客户端Feign

7.1 基于Feign远程调用 RestTimeplate方式调用存在的问题 先来看以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http://userservice/user"order.getUserId(); User user restTemplate.getForObject(url,User.class);存在下面的问题&#xf…

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥&#xff0c;而守卫类型也比较多&#xff0c;其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难&#xff0c;这边主要介绍…

CentOS Stream9 安装远程桌面服务 Xrdp

1. 安装 XRDP 若服务器本身没有桌面则首先需要安装本地桌面&#xff1a; yum -y groups install "GNOME Desktop" startx配置源&#xff1a; dnf install epel-release安装 xrdp dnf install xrdp 2. 配置 Xrdp Xrdp 配置文件位于 /etc/xrdp 目录中。对于常规 X…

HTTP长连接实现原理

1. HTTP长连接和短连接的定义 HTTP长连接 浏览器向服务器进行一次HTTP会话访问后&#xff0c;并不会直接关闭这个连接&#xff0c;而是会默认保持一段时间&#xff0c;那么下一次浏览器继续访问的时候就会再次利用到这个连接。在HTTP/1.1版本中&#xff0c;默认的连接都是长连…

计算机算法分析与设计(8)---图像压缩动态规划算法(含C++)代码

文章目录 一、知识概述1.1 问题描述1.2 算法思想1.3 算法设计1.4 例题分析 二、代码 一、知识概述 1.1 问题描述 1. 一幅图像的由很多个像素点构成&#xff0c;像素点越多分辨率越高&#xff0c;像素的灰度值范围为0~255&#xff0c;也就是需要8bit来存储一个像素的灰度值信息…