02-04 线性回归

目录

  • 线性回归
  • 一、线性回归学习目标
  • 二、线性回归引入
  • 三、线性回归详解
    • 3.1 线性模型
    • 3.2 一元线性回归
      • 3.2.1 一元线性回归的目标函数
      • 3.2.2 均方误差最小化——最小二乘法
    • 3.3 多元线性回归
      • 3.3.1 均方误差最小化——最小二乘法
      • 3.3.2 均方误差最小化——牛顿法(TODO)
      • 3.3.3 均方误差最小化——拟牛顿法(TODO)
    • 3.4 多项式回归
    • 3.5 对数线性回归
    • 3.6 局部加权线性回归
    • 3.7 正则化
      • 3.7.1 L1正则化
      • 3.7.2 L2正则化
      • 3.7.3 弹性网络
  • 四、线性回归流程
    • 4.1 输入
    • 4.2 输出
    • 4.3 流程
  • 五、线性回归优缺点
    • 5.1 优点
    • 5.2 缺点
  • 六、小结

更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/

线性回归

线性回归是比较经典的线性模型,属于监督学习中预测值为连续值的回归问题。

线性回归针对的是一个或多个特征与连续目标变量之间的关系建模,即线性回归分析的主要目标是在连续尺度上预测输出,而非分类标签,即预测值为连续值。

一、线性回归学习目标

  1. 线性模型
  2. 一元线性回归和多元线性回归
  3. 多项式回归和对数线性回归
  4. 线性回归的L1正则化和L2正则化
  5. 线性回归流程
  6. 线性回归优缺点

二、线性回归引入

相信我们很多人可能都有去售楼处买房而无奈回家的行为,就算你没去过售楼处,相信你也应该听说过那令人叹而惊止的房价吧?对于高房价你没有想过这房价是怎么算出来的呢?难道就是房地产商拍拍脑门,北京的一概1000万,上海的一概800万,杭州的一概600万吗?看到这相信你应该有动力想要学好机器学习走向人生巅峰了。

其实仔细想想这房价大有来头,首先房价不可能只和地区有关,北京有1000万的房子,又会有800万、600万的房子,那这些房价不和地区有关还和什么有关呢?如果你真的买过房就知道,房子的价格首先和地区是有着比较大的联系的,北京五环外的房子可能都高于杭州任何地区的房子,在同一个地区内,房子的价格大多和房子的占地面积、户型、采光度等等因素有关系。

这个时候就有某位聪明的投机者想到了,我是不是可以找到一个方法来预测房价呢?如果这个房子的房价明显小于这所房子该有的房价(注:房价可能在某段时间由于某种不为人知的因素有小幅波动),就把那所买过来了,等房价涨回去了再卖出去,这样看起来也是生财之道。(注:纯属虚构)

可是如果去预测房价呢?上面讲到了房价和房子所在地区\(x_1\)、占地面积\(x_2\)、户型\(x_3\)和采光度\(x_4\)有关,那么我是不是可以把这些因素假想成房子的特征,然后给这些每个特征都加上一个相应的权重\(\omega\),既可以得到如下的决策函数
\[
\hat{y} = \omega_1x_1 + \omega_2x_2 + \omega_3x_3 + \omega_4x_4 + b
\]
其中\(b\)可以理解为偏差,你也可以想成房子的这些特征再差也可能会有一个底价。

基于上述给出房价的决策函数,我们就可以对一个某个不知名的房子输入它的这些特征,然后就可以得到这所房子的预测价格了。

理想总是美好的,即一条生财之道就在眼前,但是我们如何去得到这个决策函数呢?我们可以得到这个特征值,但是这个\(\omega\)怎么得到呢?这就是我们的线性回归需要解决的问题,下面让我们一起走向这条生财之道吧!

三、线性回归详解

3.1 线性模型

给定有\(n\)属性的样本\(x=(x_1,x_2,\ldots,x_n)\),其中\(x_i\)是\(x\)在第\(i\)个属性上的取值,线性模型(linear model)则是试图学得一个通过线性组合预测的函数。该线性组合可以表示为
\[
\hat{y} = f(x) = \omega_1x_1 + \omega_2x_2 + \cdots + \omega_nx_n + b
\]
线性组合用向量可以表示为
\[
\hat{y} = f(x) = \omega^Tx + b \quad \omega=\{\omega_1,\omega_2,\ldots,\omega_n\},x=\{x_1,x_2,\dots,x_n\}
\]
如果\(\omega\)和\(b\)被确定之后,模型就可以确定。

3.2 一元线性回归

3.2.1 一元线性回归的目标函数

给定有\(m\)个样本的数据集\(D=\{(x_1,y_1),(x_2,y_2),\ldots,(x_m,y_m)\}\),假设每个样本只有\(1\)个特征为\(x_i\)。

由于线性回归属于线性模型的一种,则线性回归也可以通过线性组合的方式学得关于预测值的公式
\[
\hat{y_i} = f(x_i) = \omega{x_{i}} + b
\]
现在的问题时如何学得并确定\(\omega\)和\(b\)。显然,关键在于衡量真实值\(y_i\)和预测值\(\hat{y_i}\)之间的差别。通常在回归任务中使用均方误差作为回归模型的性能度量,既可以得到线性回归的损失函数
\[
L(\omega,b) = (y_i - \hat{y_{i}})^2
\]
通过损失函数则可以得到线性回归的目标函数
\[
\begin{align}
J(\omega,b) & = \sum_{i=1}^m (y_i - \hat{y_{i}})^2 \& = \sum_{i=1}^m (y_i - w^Tx_i - b)
\end{align}
\]

3.2.2 均方误差最小化——最小二乘法

均方误差的几何意义对应了欧氏距离(Euclidean distance),基于均方误差最小化进行模型求解的方法称为最小二乘法(least square method)。在线性回归中,最小二乘法试图找到一条直线,使所有样本的欧式距离之和最小,即试图让均方误差最小化。

在回归问题中对均方误差最小化的过程称为线性回归的最小二乘参数估计(parameter estimation),可以对均方误差分别对\(\omega\)和\(b\)求导得
\[
\begin{align}
& {\frac{\partial{L(\omega,b)}}{\partial\omega}} = 2(\omega\sum_{i=1}^m {x_i}^2 - \sum_{i=1}^m (y_i-b)x_i) \& {\frac{\partial{L(\omega,b)}}{\partial{b}}} = 2 (mb - \sum_{i=1}^m (y_i - \omega{x_i})
\end{align}
\]
利用数学中求极值的思想即可求得\(\omega\)和\(b\)的最优解
\[
\omega = {\frac {\sum_{i=1}^m y_i(x_i-\overline{x})} {\sum_{i=1}^m {x_i}^2 - {\frac{1}{m}(\sum_{i=1}^m x_i)^2}} }
\]
\[
b = {\frac{1}{m}} \sum_{i=1}^m (y_i - \omega{x_i})
\]
其中\(\overline{x} = {\frac{1}{m}}\sum_{i=1}^m x_i\),即\(x\)的均值

3.3 多元线性回归

一元线性回归更多的是为了入门,通常情况下碰到的问题都是用多元线性回归(multivariate linear regression)解决的,即样本通常都有\(n, \quad n>1\)个特征。

给定数据集\(D=\{(x_1,y_1),(x_2,y_2),\ldots,(x_m,y_m)\}\),假设每个样本有\(n\)个特征则\(x_i = x_{i1},x_{i2},\ldots,x_{in}\)。由此可以得到\(n\)个特征样本的预测值和目标函数
\[
\hat{y_i} = f(x_i) = \omega_0x_{i0} + \omega_1x_{i1} + \omega_2x_{i2} + \cdots + \omega_nx_{in} + b = \omega^Tx_i \quad w_0=b,x_{i0}=1
\]
\[
\begin{align}
J(\omega) & = \sum_{i=1}^n (y_i - \hat{y_{i}})^2 \& = \sum_{i=1}^n (y_i - w^Tx_i)
\end{align}
\]

3.3.1 均方误差最小化——最小二乘法

如果对该目标函数直接使用最小二乘法进行估计,计算会很麻烦,因此把特征和标记都写成向量的形式并命名为\(X\)和\(Y\)
\[
X =
\begin{pmatrix}
x_{11} & x_{12} & \cdots & x_{1n} & 1 \x_{21} & x_{22} & \cdots & x_{2n} & 1\\vdots & \vdots & \ddots & \vdots & \vdots \x_{m1} & x_{m2} & \cdots & x_{mn} & 1\\end{pmatrix}
\]
\[
Y =
\begin{pmatrix}
y_1 & y_2 & \cdots & y_m
\end{pmatrix}
\]
通过上述向量的转换可以把目标函数转换成
\[
J(\omega) = {\frac{1}{2}}(X\omega-Y)^T(X\omega-Y)
\]
其中\({\frac{1}{2}}\)是为了方便计算。

同一元线性回归,对\(\omega\)求导找到最优的\(\omega\),对\(\omega\)求导得
\[
{\frac {\partial{L(\omega)}} {\partial{\omega}}} = 2X^T(X\omega-Y)
\]
得到目标函数对\(\omega\)求导公式之后,理应求\(2X^T(X\omega-Y)=0\)时\(\omega\)的值,但是需要考虑\(X^TX\)是否为满秩矩阵。

当\(X^TX\)为满秩矩阵(full-rank matrix)或正定矩阵(positive definite matrix)时,\(2X^T(X\omega-Y)=0\)可得\(\omega\)为
\[
\omega = (X^TX)^{-1}X^TY
\]
然而现实生活中\(X^TX\)往往不为满秩矩阵,例如生物信息学的基因芯片数据中常有成千万个属性,但往往只有几百个样例。因此会有多个\(\omega\)都能使得\(2X^T(X\omega-Y)=0\),即这些\(\omega\)都能使得均方误差最小化,通常情况下会引入正则化(regularization)项解决该问题。
\(\omega\)加入正则化项则变成
\[
\omega = (X^TX+\lambda{I})^{-1}X^TY
\]
由于加上正则化项\(\lambda{I}\)后,对任意的实数\(\lambda\),\(X^TX+\lambda{I}\)一定为满秩矩阵。

3.3.2 均方误差最小化——牛顿法(TODO)

使用二阶的海森矩阵的逆矩阵或伪逆矩阵求解,相比比梯度下降法收敛更快,但是当特征参数大时,计算量庞大,时间慢。

3.3.3 均方误差最小化——拟牛顿法(TODO)

牛顿法得到的\(f''(x)\)是一个半正定矩阵,拟牛顿法则利用一个正定矩阵代替这个半正定矩阵。

3.4 多项式回归

前面说到线性模型为
\[
\hat{y} = f(x) = \omega_1x_1 + \omega_2x_2 + \cdots + \omega_nx_n + b
\]
但是如果在这个关系式中不仅用到特征\(x_i\)的一次方,而是增加一个关于\(x_i\)的\(n, \quad n\geq2\)次方,那么模型就变成了多项式回归(polynomial regression)。

假设一个正方体的房子的价格与房子的边长、房子的占地面积和房子的体积有关系,然而现在只有房子的边长\(x_1\)一个特征,如果只拿特征去预测房子的价格,则有很大可能会欠拟合,因此需要增加房子的占地面积和体积这两个特征,即
\[
\hat{y} = \omega_1x_1 + \omega_2{x_1}^2 + \omega_3{x_1}^3 + b
\]
令\(x_1=x_1,x_2={x_1}^2,x_3={x_1}^3\),则多项式的线性模型变成
\[
\hat{y} = \omega_1x_1 + \omega_2x_2 + \omega_3x_3 + b
\]
通过上述转换多项式的线性模型变成了一个多(三)元线性回归的问题,可以使用线性回归的方法来完成算法。并且对于每个边长这个特征\((x_1)\)得到一个三元样本特征\((x_1,{x_1}^2,{x_1}^3)\)。需要注意的是对于多维度特征时,使用多项式回归会使得特征之间的关联度增加,例如这三个特征\((x_1,{x_1}^2,{x_1}^3)\)是有很高的相关性的。

拿上一个例子假设,如果房子的边长为\(10\),则房子的占地面积为\(100\),房子的体积为\(1000\),这三个特征有了数量级的差距,所以在使用多项式回归的时候需要注意对特征进行特征统一尺度处理。

工业上可能并不像房子的面积、房子的体积一样有明确的目标加上\(2次方\)或者\(3次方\),而可能是加上\(2次方\)或者\(5次方\)模型就能变得更好,但是并不知道\(2次方\)和\(5次方\)表示什么意思,进而会导致模型的解释能力变差。

3.5 对数线性回归

假设现在得到了一个线性回归模型\(\hat{y}=\omega^Tx+b\),但是该线性模型无法满足输出\(\hat{y}\)与输入\(x\)的线性关系,但是\(\ln\hat{y}\)和\(x\)满足线性关系,则可以将输出标记的对数作为线性模型逼近的目标,即模型函数如下
\[
\ln\hat{y} = \omega^Tx+b
\]
这就是对数线性回归(log-linear regression),它实际上是在视图让\(e^{\omega^T+b}\)逼近\(\hat{y}\),但是仍然可以使用线性回归的算法去处理该问题。

假设函数\(g(·)\)是单调可微的函数,则一般化的广义线性模型(generalized linear model)可以表示为
\[
\hat{y} = g^{-1}(\omega^Tx+b) \quad \text{或者} \quad g(\hat{y}) = \omega^Tx+b
\]
其中\(g(·)\)称为联系函数(link function),并且对数线性回归是广义线性模型在\(g(·)=ln(·)\)时的特例。

3.6 局部加权线性回归

线性回归的一个大问题就是容易欠拟合,上次讲到的多项式回归属于解决欠拟合的方法之一,但是它也增加了数据的维度,如果数据本身有很多维度,则不适合使用多项式回归。

局部加权线性回归(locally weighted linear regression)也可以解决数据欠拟合的问题,它主要是在估计中引入一些偏差,从而降低预测的均方误差,它的目标函数为
\[
\begin{align}
J(\omega) & = \sum_{i=1}^m w_i (y_i - \hat{y_i})^2 \& = (X\omega - Y)^TW(X\omega-Y)
\end{align}
\]
其中\(w_i\)和\(W\)都是对角矩阵,用来给每个数据点赋予权重。

目标函数对\(\omega\)求导得
\[
{\frac{\partial{J(\omega)}}{\partial{\omega}}} = X^TWX\omega-X^TWY
\]
局部加权线性回归给预测点附近的每个点赋予一定的权重,然后与线性回归类似,在这个被赋予权重的样本的子集上基于最小均方误差来进行普通的回归,即\(X^TWX\omega-X^TWY=0\)时可以得到最优的\(\omega\)为
\[
\omega = (X^TWX)^{-1}X^TWY
\]
其中局部加权线性回归与支持向量机类似,使用核函数给离预测点越近的点赋予更高的权重;离预测点越远的点赋予更低的权重。核的类型一般可以自由选择,一般情况下使用高斯核,高斯核对应的权重如下
\[
W(i,i) = exp({\frac{|x^{(i)}-x|}{-2k^2}})
\]
其中\(k\)相当于学习率,它决定了对附近的点赋予多大的权重。

通过高斯核即可构造一个只含对角元素的矩阵\(W\),并且点\(x\)与\(x_i\)越近,则\(|x^{(i)}-x|\)越接近1,\(W(i,i)\)将会越趋近于\(1\);如果点\(x\)与\(x_i\)越远,则\(|x^{(i)}-x|\)越接近0,\(W(i,i)\)将会越趋近于\(0\),即离预测点越接近的点权重越高,离预测点越远的点权重越低,这也是局部加权线性回归只关注附近点的原因。

局部加权线性回归虽然解决了欠拟合的问题,但是由于每个预测点都要进行一次线性回归的运算,因此样本数越多则该方法的计算量将越大。相比较普通的线性回归,普通的线性回归属于参数模型,而局部加权线性回归属于非参数模型,每次增加新数据的时候都需要基于样本重新计算\(\omega\)。

3.7 正则化

在过拟合问题的时候说到过,为了解决过拟合问题时,可以在建立模型的时候加上正则化项。对于线性模型,一般有L1正则化、L2正则化和弹性网络等。

3.7.1 L1正则化

线性回归的L1正则化通常称为Lasso回归,它和普通的线性回归的区别是它在目标函数上增加了一个L1正则化项,L1正则化项有一个正则化参数\(\lambda\)调节目标函数的均方误差项和正则化项的权重,Lasso回归的目标函数表达式为
\[
J(\omega) = {\frac{1}{2}} (X\omega-Y)^T (X\omega-Y) + \lambda\sum_{i=1}^m||\omega||_1
\]
其中\({\frac{1}{2}}\)只是为了方便计算,\(m\)是样本数量,\(||\omega||_1\)为L1范数。

由于目标函数中的L1范数用的是绝对值之和,导致目标函数中有不可导的点,即无法使用最小二乘法、梯度下降法、牛顿法求解使得均方误差最小化的\(\omega\),因此可以使用全新的方法求解最优\(\omega\),即坐标轴下降法(coordinate descent)和最小角回归法(least angle regression)

如果你对Lasso回归的求解过程熟悉了,会发现Lasso回归可以使得一些特征的\(\omega\)变小,甚至还能使得一些绝对值较小的\(\omega\)直接变成\(0\),进而使得数据的特征变得稀疏,增强模型的泛化能力。

3.7.2 L2正则化

线性回归的L2正则化通常称为Ridge回归,也称为岭回归。它和普通的线性回归的区别是它在目标函数上增加了一个L2正则化项,而Ridge回归与Lasso回归的区别在于Lasso回归的正则化项是L1范数,而Ridge回归的正则化项是L2范数,Ridge回归的目标函数表达式为
\[
J(\omega) = {\frac{1}{2}} (X\omega-Y)^T (X\omega-Y) + {\frac{1}{2}}\lambda\sum_{i=1}^m||\omega||_2
\]
其中\({\frac{1}{2}}\)只是为了方便计算,\(m\)是样本数量,\(||\omega||_2\)为L2范数。

Ridge回归一般使用最小二乘法的矩阵推导形式,和普通的线性回归类似,首先对\(\omega\)求导得
\[
{\frac{\partial{J(\omega)}}{\partial{\omega}}} = X^T(X\omega-Y)+\lambda\omega
\]
令\(X^T(X\omega-Y)+\lambda\omega=0\)即可得到\(\omega\)为
\[
\omega = (X^TX+\lambda{E})^{-1}X^TY
\]
其中\(E\)为单位矩阵。

3.7.3 弹性网络

弹性网络(elastic net)是对Ridge回归和Lasso回归的折中处理,通过混合比\(\gamma\)进行控制,即它的目标函数为
\[
J(\omega) = {\frac{1}{2}} (X\omega-Y)^T (X\omega-Y) + \gamma\lambda\sum_{i=1}^m||\omega||_1 +{\frac{1-\gamma}{2}}\lambda\sum_{i=1}^m||\omega||_2
\]
其中\(\gamma\)和\(\lambda\)都是超参数,当\(\gamma=1\)的时候弹性网络为Ridge回归;当\(\gamma=0\)的时候弹性网络为Lasso回归,至于混合比\(\gamma\)值具体情况具体分析。

四、线性回归流程

4.1 输入

有\(m\)个实例\(n\)维特征的数据集
\[
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}
\]
其中\(x_i\)是实例的特征向量即\(({x_i}^{(1)},{x_i}^{(2)},\cdots,{x_i}^{(n)})\)。

4.2 输出

\(\omega\)和线性回归模型\(f(x)=\omega^Tx\)。

4.3 流程

  1. 选取初值\(\omega=0\)
  2. 训练集中选取数据\((x_i,y_i)\),对\(\omega\)使用梯度下降更新
    \[
    \omega = \omega - \alpha(y_i-h(\omega^Tx)){x_i}^{(j)}
    \]
  3. 重复步骤2,直至\(\omega\)收敛停止更新
  4. 得到最小化的目标函数\(J(\omega)\),同时可以得到最优的\(\omega^*\),线性回归模型为\(f(x)={w^*}^Tx\)

五、线性回归优缺点

5.1 优点

  1. 建立了多特征与标记间的线性因果关系便于分析
  2. 可以得到每个特征值的权重,有很好的解释型

5.2 缺点

  1. 普通的线性回归无法处理敏感值问题
  2. 无法处理分类问题

六、小结

线性回归可以说是我们学的第一个工业上还在使用的算法,对于连续值的测量线性回归的表现还是挺不错的。但通常情况下还是需要多多尝试线性回归的变种,即对数线性回归、正则化线性回归,使用它们能够更精准的预测数据,解决过拟合问题,也可以一定的程度让线性回归拟合非线性数据。

下一篇将会给大家介绍另外一种分类方法,该方法在某些方面继承了线性回归的思想,但是实质上两者完全不可相提并论,因为线性回归属于监督学习的回归问题,而下一篇所要介绍的是分类问题,即Logistic(逻辑)回归。

原文地址:https://www.cnblogs.com/nickchen121/p/11686758.html

时间: 2024-10-10 11:13:03

02-04 线性回归的相关文章

Oracle数据库创建与安装_超越OCP精通Oracle视频教程培训02~04

_超越OCP精通Oracle视频教程培训02~04 学完本Oracle视频教程能掌握以下内容: Oracle数据库相关概念/体系结构/物理结构/逻辑结构 Oracle数据库GRID组件与ASM存储概念 VMware虚拟机的安装与主机环境的配置 Windows2008 Server操作系统安装 Linux操作系统安装与基本配置 Windows/Linux操作系统Oracle 11g数据库软件的安装 Windows/Linux操作系统Oracle 11g数据库的创建 Linux上Oracle11g基

Amethys CADwizz 2004 v2.02.04 1CD(可以快速的浏览AuotCAD的图纸文件

Amethys CADwizz 2004 v2.02.04 1CD(可以快速的浏览AuotCAD的图纸文件.它支持从AutoCAD 2.5到 2002各个版本,支持.DWG以及.DXF文件) MechSoft ProDuctivity Pack For Inventor v8.0-ISO 1CD AEC.VIZ.v2.6.1.5.21.WinALL 1CD AlignAndSpace 2004 v1.1 for AutoCAD 1CD AbleVektor for AutoCAD v3.0 1C

2018.02.04(补作业系列)

2018.02.04 补作业系列 1.合并石子 思路: 核心代码: 状态转移方程&解析:s[i]表示前i堆石子的数量总和,f[i][j]表示把第i堆石子到第j堆石子合并成一堆的最优值. 1 for ( i = n-1 ; i >= 1 ; i-- ){ 2 for ( j = i+1 ; j <= n ; j++ ){ 3 for ( k = i ; k <= j-1 ; k++ ){ 4 f[i][j] = min ( f[i][j] , f[i][k] + f[k+1][j]

毕设进度2020.02.04

毕设进度2020.02.04 今天基本上将所有自己现在想到的数据库的表建立完成了. 用户(基本不算) 团组织信息表: 图书表: 原文地址:https://www.cnblogs.com/liurx/p/12261863.html

Ecrin v4.02.04 1CD(试井解释软件)

开源变色龙4.5分色印花软件_完整版\宇柏林_治具\ F:\_temp_soft\18\Ansoft Maxwell 3D.2D v11.1-ISO 1CD.isoASAP入门手册简体中文.rarCoreTech.Moldex3D.R9.0_科盛科技模具专家.isoDyadem.PHA-Pro.v6.0.0.23.zipSimulation.Engine.1D.Gt-Power.Gt.Suite.v6.1发动机模拟分析软件.binAutoPLANT 2004 Edition 中文版-ISO 1C

2017.02.04,读书,2017第二本《把时间当作朋友》读书笔记

前言: 这是春节期间读完的一本书,也是今年的第二本,严格来说是大年初一那天看完的.春节,这个农业时代的传统,已经感到不适应时代(我)了.以公历来算,今年已经过去一个月了,农历却才刚开始,才进入的2017年节奏不得不打断一下.还好可以睡大觉. 以上是关于春节. 以下是关于这本书,依然是李笑来老师的,充满方法论的书.全文6657字,kindle版,花费大概8个小时,读起来一口气上五楼不费劲,推荐. ? 第0章 困境(程序员永远从0开始) 1 问题 最后期限没有完成的原因 没有按时开始执行任务 错误估

C语言学习记录_2019.02.04

逻辑性变量的定义符:bool,在C语言中只有true和false: 定义方式:bool t = true; 逻辑运算符: !:逻辑非 &&:逻辑与 ||:逻辑或 表达区间的错误形式:4<x<6;(由左到右顺序执行) 表达区间的正确形式:x>4&&x<6; 判断大写字母:c>='A'&& c<='Z'; 单目运算符的优先级高于双目运算符: 例:!age<20;-------->  (!age)<20;  

程序员面试金典-面试题 02.04. 分割链表

题目: 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前.如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示).分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间. 示例: 输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8 分析: 可以新建两个链表存储小于x的节点和大于等于x的节点,然后再将

JavaSE学习总结第02天_Java基础语法1

02.01 关键字的概述和使用 关键字概述:被Java语言赋予特定含义的单词 关键字特点:组成关键字的字母全部小写 关键字注意事项:goto和const作为保留字存在,目前并不使用,类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观 保留字:在JDK的新版本中可能提升为关键字 02.02 标识符的概述和组成规则 标识符概述:就是给类,接口,方法,变量等起名字时使用的字符序列 组成规则:英文大小写字母.数字字符.$和_ 注意事项: 1.不能以数字开头 2.不能是Java中

Bentley.RAM.Concept.V8i.SS9.v05.02.00.21.Win32_64 2CD土木結構分析

Bentley.RAM.Concept.V8i.SS9.v05.02.00.21.Win32_64 2CD土木結構分析Bentley OpenPlant Isometric Manager V8i (SELECTSeries 5) 08.11.09.404\Bentley.RAM.Structural.System.V8i.v14.06.02.00.Win32_64 1CDBentley Staad.Pro v8i (20.07.04.12) 1CDBentley.Architecture.Da