2.3.3 赋范空间

每个实数或复数,都有相对应的绝对值或者模,每一个n维矢量,也都可以定义其长度。如果把“长度”的概念推广到一般抽象空间中的元素上,就可以得到范数这个概念。

本节完。

2.3.6 希尔伯特空间

定义:在由内积所定义的范数意义下完备的内积空间称为希尔伯特(Hilbert)空间
希尔伯特空间是一类性质非常好的线性赋范空间,在工程上有着非常广泛的应用,而且在希尔伯特空间中最佳逼近问题可以得到比较完满的解决。

傅立叶变换以高等数学(微积分)中的傅立叶级数为基础发展而来,它是信号处理(特别是图像处理)中非常重要的一种时频变换手段,具有重要应用。在图像编码、压缩、降噪、数字水印方面都有重要意义。此外,快速傅立叶变换算法还位列20世纪十大算法之列,它是“动态规划”策略在算法设计中的杰出代表。本文将详细介绍图像中的傅立叶变换及其快速算法。对于傅立叶变换的数学原理还不是很理解的同学,建议参考本系列前面已经发布的傅立叶级数相关内容,争取彻底搞懂相关数学原理。一知半解、不求甚解,都是自欺欺人的表现。

6.1.2   数字图像的傅立叶变换

为了在科学计算和数字信号处理等领域使用计算机进行傅立叶变换,必须将函数f(t)定义在离散点而非连续域内,且须满足有限性或周期性条件。这种情况下,使用离散傅立叶变换。将连续函数f(t)等间隔采样就得到一个离散序列f(x),假设采样N次,则这个离散序列可以表示为{f(0),f(1),f(2),...,f(N-1)}。如果令x为离散实变量,u为离散频率变量,则一维离散傅立叶变换的正变换定义为

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。从傅立叶频谱图上看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。通常,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图。在功率图中我们可以看出图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,若频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。变换最慢的频率成分(u = v = 0)对应一幅图像的平均灰度级。当从变换的原点移开时,低频对应着图像的慢变换分量,较高的频率开始对应图像中变化越来越快的灰度级。这些是物体的边缘和由灰度级的突发改变(如噪声)标志的图像成分。通常在进行傅立叶变换之前用(-1)^(x+y)乘以输入的图像函数,这样便可将傅立叶变换的原点(0,0)移到(M/2,N/2)上。

6.1.3  快速傅立叶变换的算法


离散傅立叶变换(DFT)已经成为数字信号处理和图像处理的一种重要手段,但是DFT的计算量太大,速度太慢,这令其实用性大打折扣。1965年,Cooley和Tukey提出了一种快速傅立叶变换算法(Fast Fourier Transform,FFT),极大地提供了傅立叶变换的速度。正是FFT的出现,才使得傅立叶变换得以广泛地应用。

FFT并不是一种新的变换,它只是傅立叶变换算法实现过程的一种改进。FFT中比较常用的是蝶形算法。蝶形算法主要是利用傅立叶变换的可分性、对称性和周期性来简化DFT的运算量。下面就来介绍一下蝶形算法的基本思想。

由于二维离散傅立叶变换具有可分离性, 即它可由两次一维离散傅立叶变换计算得到,因此仅研究一维离散傅立叶变换的快速算法即可。一维离散傅立叶变换的公式为

上述FFT是将f(x)序列按x的奇偶进行分组计算的,称之为时间抽选FFT。如果将频域序列的F(u)按u的奇偶进行分组计算,也可实现快速傅立叶计算,这称为频率抽选FFT。

通过对图6-6的观察可以发现,蝶形算法的频率域是按照正常顺序排列的,而空间域是按照一种叫做“码位倒序”的方式排列的。这个倒序的过程可以采用下面的方法来实现:将十进制的数转化成二进制,然后将二进制的序列倒序重排,最后再把颠倒顺序后的二进制数转换成十进制数。倒序重排的程序是一段经典程序,它以巧妙的构思、简单的语句用完成了倒序重排的功能。表6-1给出了倒序重排的示例。

6.4.3 主成分变换的实现

本小节通过一个算例验证一下之前的推导。在前面给出的例子中,各点在原始的

由于方程是齐次的,所以不独立。因为系数矩阵有零行列式,所以方程有非无效解。从两个方程的任何一个可见

现在考虑该结论该如何解释。特征向量g1和g2是在原坐标系中用来定义主成分轴的向量,如图6-20所示,其中,e1和e2分别是水平和垂直的方向向量。显而易见,这些数据在新坐标系中是非相关的。该新坐标系是原坐标系的旋转,出于这种原因,可以将主成分变换理解为旋转变换(即使在高维空间上亦是如此)。

6.4.4 基于K-L变换的图像压缩

从图像压缩的角度出发,我们必然希望变换系数协方差矩阵Σ中除对角线外的所有协方差均为零,成为对角线矩阵,即原来像素间的相关性经变换后全部解除,或者至少大部分协方差要等于或接近于零。为此,需要选择适当的变换矩阵,它作用于Σx 后使其变成对角线型。通过前面的分析和推导,可知这样的变换矩阵是存在的。如果用协方差矩阵Σx 的特征向量作变换的基向量,即由Σx 的特征向量作为正交变换的变换矩阵,就可以得到对角线型的变换域协方差矩阵Σy 。K-L变换就是采用这种矩阵进行变换的正交变换,它可以在变换域完全解除相关性,因此是理论上的最佳变换。同时,换一个角度也可以证明,K-L变换是均方误差最小准则下的最佳变换,即当压缩比确定的情况下,采用K-L变换后,重建图像的均方误差比采用任何其他正交变换的都小。

但是回顾之前进行的K-L变换,哪个步骤可以称为图像压缩的切入点呢?一幅大小为M×N的图像,它的协方差矩阵Σx大小为MN×MN。由上述K-L变换理论可知,对X进行K-L变换的变换矩阵就是Σx的特征向量矩阵,该矩阵大小亦为MN×MN,其大小远远大于原始图像数据矩阵。而且要在解码时恢复原图像,不但需要变换后的系数矩阵Y,还需要知道逆变换矩阵(也就是变换矩阵的转置)。如果不经过任何处理就这样直接将K-L变换用于数字图像的压缩编码,不但达不到任何数据压缩的效果,还极大的增加了数据量。即使仅保留一个最大的特征值,变换矩阵中和该特征值对应的特征向量为M×N维,系数矩阵 Y 保留的元素为一个。要重建图像数据,需要保留的元素个数为仍大于原矩阵,所以达不到压缩的目的。另外,求一个矩阵的协方差矩阵和特征向量矩阵,都是非常复杂的运算过程,需要大量的计算。当X比较大时,运算时间的耗用可能是非常大的。有时甚至会出现因为过于复杂而导致Σx和变换矩阵无法求解的情况。

要解决上述问题,可以考虑将图像分成若干个小块,然后对每个小块分别进行K-L变换(这与本章前面的处理方式基本保持一致)。这样使得Σx和变换矩阵都比较小,计算机处理起来比较容易而且速度快。这里仍然将图像划分为多个不重叠的8×8小块(当图像垂直和水平方向的像素数不是8的倍数时补0,使之均为8的倍数)。然后再分别对每一个小块执行K-L变换,变换矩阵的数目为K个,每个矩阵大小为64×64,仅变换矩阵就要记录K×64×64个数据,还是远远大于原始数据的个数M×N。是否可以让变换矩阵的数量变得少些,最好只保留一个变换矩阵。回忆前面做K-L变换的例子,变换矩阵的大小与输入矩阵的维度有关,而与样本数量无关,据此可以将每个8×8小块变成一个行向量(也就是一个64维的数组),原图中的每一个小方块都是一个64维的样本。所以最后只需要一个64×64的变换矩阵即可,它对于原图像的任意一个数据块都适用。这样的处理方式并不是完全意义上的K-L 变换,因为采用分块的处理方式,各个数据块之间的相关性是没有消除的。但实验亦表明,这样的K-L 变换虽然不能完全消除图像各像素点之间的相关性,也能达到很好的去相关效果,在去相关性性能上优于离散余弦变换。

图像数据经K-L变换后,得到的系数矩阵Y大部分系数都很小,接近于零。只有很少的几个系数的数值比较大,这正是K-L变换所起到的去除像素间的相关性,把能量集中分布在较少的变换系数上的作用的结果。据此,在图像数据压缩时,系数矩阵Y保留M个分量,其余分量则舍去。在实际编程开发中,经K-L变换后的系数矩阵中的数值都是按从大到小的顺序排列的,所以直接舍去后面的64M个分量即可。通过这一步的处理,便可动态地调节压缩编码系统的压缩比和重建图像的质量。解码时,首先做K-L逆变换,然后将上述过程逆转,可以得到重建后的图像数据矩阵。

我们在MATLAB中编写的示例程序演示了运用上述方法对图像实施基于K-L变换的压缩处理的过程。最后可以通过编程实现基于K-L变换的图像压缩算法并测试其压缩效果,所得之测试结果如图6-22所示。该程序验证了三种不同的压缩比,即舍去排序后的系数矩阵中的32/64(对应压缩比50%)、48/64(对应压缩比75%)以及56/64(对应压缩比87.5%)。相关测试程序源码读者可以从本书的在线支持资源中下载得到。

最后需要补充说明的是尽管K-L变换可以将数据之间的相关性完全去除,所以理论上是一种最理想的数据压缩方案,但它在实际应用过程中仍然受到很大局限。例如,它没有快速算法,不同的图像所对应的变换矩阵也不同,从这个角度来说,单纯将K-L变换直接应用于图像数据压缩的理论价值要大于实际价值。它的存在意义,一方面是可以作为理论验证的参考模板,另一方面就是需要对原始算法加以改进后再付诸应用。

6.4.2 主成分变换的推导

前面提到的一国经济增长与城市化水平关系的问题是典型二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,所以自然会想到使用矩阵来组织这些数据。为了帮助读者理解上面给出的协方差矩阵定义,在此举一个简单的三维的例子,假设数据集有 {x,y,z} 三个维度,则协方差矩阵为

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。下面通过一个例子来尝试演算协方差矩阵(很多数学软件都为该操作提供了支持)。需要提醒读者注意的是,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。例如有一个样本容量为 9 的三维数据,如下

根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,前面也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以要按列计算均值。经过计算,不难得到上述数据对应的协方差矩阵如下

众所周知,为了描述一个点在直角坐标系中的位置,至少需要两个分量。图6-17所示是两个二维数组,其中左图显示的各个点之间相关性微乎其微,而右图所示的各个点之间则高度相关,显然数据散布在一定角度内较为集中。对于右图而言,只要知道某个点一维分量的大小就可以大致确定其位置,两个分量中任一分量的增加或者减少都能引起另一分量相应的增减。相反,左图中的情况却不是这样。

对之前给出的协方差矩阵定义式稍加改写,以使其获得计算上更为直观的便利。则有在X矢量空间(或坐标系下),协方差矩阵Σx的无偏计算公式为

表6-2给出了对于图6-17中左图所示的6个样本点的集合,以及经计算后求得的样本集协方差矩阵和相关矩阵的结果。应当注意,协方差矩阵和相关矩阵二者都是沿对角线对称的。从相关矩阵来看,各个数据分量间存在不相关关系的明显事实就是协方差矩阵(以及相关矩阵)中非对角线元素都是零。

最终计算可得

1.1.3 函数的极限

本小节介绍两个重要的函数极限,并讨论它们的应用。

重要极限1:

此外,该重要极限的另一种形式也常常被用到,即

综上,结论得证。
由此,也很容易推出如下结论,证明从略,有兴趣的读者可以自行尝试推导

1.3.2 内积与外积

因为cos(π/2)=0。当然,这也是众多教科书上介绍向量内积最开始时常常用到的一种定义方式。但必须明确,这种表示方式仅仅是一种非常狭隘的定义。如果从这个定义出发来介绍向量内积,其实是本末倒置的。因为对于高维向量而言,夹角的意义是不明确的。例如,在三维坐标空间中,再引入一维时间坐标,形成一个四维空间,那么时间向量与空间向量的夹角该如何解释呢?所以读者务必明确,首先应该是给出如本小节最开始时给出的内积定义,然后才能由此给出二维或三维空间下的夹角定义。在此基础上,我们来证明余弦定律。

若根据a·b = |a||b|cosθ这个定义,因为0<=cosθ<=1,显然柯西-施瓦茨不等式是成立的。但是这样的证明方式同样又犯了本末倒置的错误。柯西-施瓦茨不等式并没有限定向量的维度,换言之它对于任意维度的向量都是成立的,这时夹角的定义是不明确的。正确的思路同样应该从本小节最开始的定义出发来证明柯西-施瓦茨不等式,因为存在这样一个不等式关系,然后我们才会想到内积与向量模的乘积之间存在一个介于0和1之间的系数,然后我们才用cosθ来表述这个系数,于是才会得到a·b = |a||b|cosθ这个表达式。下面就来证明柯西-施瓦茨不等式。

证明:

与内积类似,向量a,b的外积也可以狭义地定义为

1.4.5   卷积定理及其证明

卷积定理是傅立叶变换满足的一个重要性质。卷积定理指出,函数卷积的傅立叶变换是函数傅立叶变换的乘积。换言之,一个域中的卷积对应于另一个域中的乘积,例如,时域中的卷积对应于频域中的乘积。

这一定理对拉普拉斯变换、Z变换等各种傅立叶变换的变体同样成立。需要注意的是,以上写法只对特定形式的变换正确,因为变换可能由其它方式正规化,从而使得上面的关系式中出现其它的常数因子。
下面我们来证明时域卷积定理,频域卷积定理的证明与此类似,读者可以自行证明。
证明:将卷积的定义

傅立叶变换的作用在频域对信号进行分析,我们可以把时域的信号看做是若干正弦波的线性叠加,傅立叶变换的作用正是求得这些信号的幅值和相位。既然固定的时域信号是若干固定正弦信号的叠加,在不改变幅值的情况下,在时间轴上移动信号,也就相当于同时移动若干正弦信号,这些正弦信号的相位改变、但幅值不变,反映在频域上就是傅立叶变换结果的模不变、而相位改变。所以,时移性质其实就表明当一个信号沿时间轴平移后,各频率成份的大小不发生改变,但相位发生变化。
既然这里提到了傅立叶变换的性质,这里我们还将补充一些关于帕塞瓦尔定理的有关内容。该定理最早是由法国数学家帕塞瓦尔(Marc-Antoine Parseval)在1799年推导出的一个关于级数的理论,该定理随后被应用于傅立叶级数。帕塞瓦尔定理的表述是这样的:

综上所述,原结论得证。
前面我们也介绍过复数形式的傅立叶级数,下面我们来推导与复数形式傅立叶变换相对应的帕塞瓦尔等式。这里再次给出傅立叶级数的复数形式表达式,具体推导过程请读者参阅前文

帕塞瓦尔定理把一个信号的能量或功率的计算和频谱函数或频谱联系起来了,它表明一个信号所含有的能量(功率)恒等于此信号在完备正交函数集中各分量能量(功率)之和。换言之,能量信号的总能量等于各个频率分量单独贡献出来的能量的连续和;而周期性功率信号的平均功率等于各个频率分量单独贡献出来的功率之和。

1.1.2 级数的敛散

关于上面这个级数敛散性的讨论,在数学史上曾经是一个非常有名的问题。大数学家莱布尼兹曾经在惠更斯的指导下对级数的敛散性进行过研究。后来莱布尼兹的学生伯努利兄弟(雅各·伯努利和约翰·伯努利)从他们老师的某些研究成果出发,最终证明了调和级数的发散性,以及几何级数的收敛性。但是几何级数最终收敛到多少这个问题却一直困扰着他们。最终,雅各布也不得不带着几分绝望的恳求宣告了他的失败:“如果有人能够发现并告知我们迄今为止尚未解出的难题的答案,我们将不胜感谢。”所幸的是,几何级数到底等于多少这个难题最终被约翰·伯努利的学生欧拉所破解。欧拉使用了一种极其巧妙的方法得出

1.1 极限及其应用


极限的概念是微积分理论赖以建立的基础。在研究极限的过程中,我们一方面会证明许多在图像处理中将要用到的公式,另一方面还会得到所谓的自然常数(或称纳皮尔常数)。图像处理技术中的很多地方都会遇到它,例如用来对图像进行模糊降噪的高斯函数,以及泊松噪声中都会有自然常数出现。而且在本文稍往后的内容还会讲到欧拉公式,届时自然常数还将会再次出现。

1.1.1 数列的极限

1.3.7 曲面积分

关于这部分内容的讨论,既阐明了第二类曲面积分的实际意义,其实也明确了两类曲面积分之间的关联。需要说明的是,在后面的介绍中,我们将更多地采用通量这个提法来替代此前所用的流量。通量是更广义的说法,如果考虑的向量场是流速场的话,那么通量就是流量,如果考虑的是电场或者磁场的话,那么通量就是电通量或者磁通量。

在泛函分析中,索伯列夫空间并不像 巴拿赫空间或者希尔伯特空间那么引入注意。但是在图像处理中,索伯列夫空间在介绍BV空间(有界变差函数空间)时,会被提到。而BV函数空间对于理解TV算法(偏微分方程在图像处理中的重要内容)至关重要!所以我特别在“图像处理中的数学原理详解”系列文章中留出一个小节来对索伯列夫空间进行必要的介绍。

2.3.7 索伯列夫空间

由广义导数的定义可以看出,这种导数不是关于函数的个别点处局部性质反映,因为它是通过在整个区间上积分的极限来确定的,而积分是一种关于函数的整体性质的概念。但也应该指出,广义导数其实是对通常意义下导数概念的推广。如果函数本身是通常意义下可微的,则其导函数与广义导数是一致的。

2.3.5 内积空间

前面我们已经讨论过关于内积的话题,此处以公理化的形式给出内积的定义。

2.3.2 距离空间
        尽管在线性空间上我们已经可以完成简单的线性运算,但这仍然不能满足我们的需求。为了保证数学刻画的精确性,还必须引入距离的概念。本文最初是从极限开始讲起的,它是因此微积分的必备要素之一,而极限的概念显然也是基于距离上无限接近这样一种角度来描述的。

由此,在距离空间中,可以引入“任意逼近”的概念,即极限概念。一般来说,一个集合如果能够在其中确切地引入任意逼近的概念,就称之为“拓扑空间”。而距离空间是一种最常用的拓扑空间。

2.3  泛函与抽象空间

牛顿说:“把简单的问题看得复杂,可以发现新领域;把复杂的问题看得简单,可以发现新规律。”而从历史的角度来看,一个学科的发展也亦是如此。随着学科的发展,最开始的一个主干方向会不断衍生出各自相对独立的分支,这也就是所谓“把简单的问题看得复杂”的过程。然而,一旦学科发展到一定程度之后,某些分支学科又开始被抽象综合起来,这也就是所谓“把复杂的问题看得简单”的过程。例如,在很长一段时间里,物理学家们都把电和磁看成是两种独立的物理现象在研究,当学科研究积累到一定程度时,麦克斯韦就创立了电磁学从而完成了物理学中的一次大综合。而在数学发展的历史中,几何与代数也曾经在很长的一段时间里是彼此独立的。直到笛卡尔引入了直角坐标系的概念之后,人们才开始建立了一种代数与几何之间的联系,也就是所谓的解析几何。泛函分析也是对以往许多数学问题或者领域进行高度抽象和综合的结果,其主要研究对象之一是抽象空间。其实在学习线性代数的过程中,读者已经建立了一种从矩阵到线性方程组之间的一种联系。而在泛函分析中,实数系、矩阵、多项式以及函数族这些看似关联不大的概念都可以抽成空间。由于泛函分析是一门比较晦涩抽象的学问,读者应该注意联系以往学习中比较熟悉的一些已知的、具体的概念,从而帮助自己理解那些全新的、抽象的概念。此外,需要说明的是本部分内容的重点在于有关定义或者概念的介绍,希望读者能够努力领会这些定义或者概念。

2.3.1  线性空间

图像处理中常用数学知识相关推荐

  1. 【图像处理中的数学修炼(第1版)】总纲:详解图像背后的数学原理

    数字图像处理技术的研究与开发对数学基础的要求很高,一些不断涌现的新方法中,眼花缭乱的数学推导令很多期待深入研究的人望而却步.一个正规理工科学生大致已经具备了包括微积分.线性代数.概率论在内的数学基础. ...

  2. 【图像处理中的数学修炼(第1版)】一书之代码

    数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步.在阅读图像处理方面的论文时,面对梯度.散度.黑塞矩阵.傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展.为了弭平图像 ...

  3. 深度学习常用数学知识

    深度学习常用数学知识 为什么图片能被计算机读取?为什么我们可以用CNN对成千上万中图片进行分类,这背后的原理是什么?在了解原理之前,先给大家补点数学知识.因为无论是深度学习还是机器学习,背后都是有一些 ...

  4. 【图像处理中的数学修炼(第1版)】的特别说明及其勘误表

    由清华大学出版社出版的<图像处理中的数学修炼>这本书是今年3月左右正式上市销售的.现在三个多月过去了,已经积累了大量的读者.但是,随着读者数量的增加,近来有部分读者在跟我交流和咨询的时候表 ...

  5. 机器学习中的数学知识(part4)--拟牛顿法

    学习笔记,仅供参考,有错必究 文章目录 机器学习中的数学知识 拟牛顿法 面临的问题(局部极小/鞍点) 机器学习中的数学知识 拟牛顿法

  6. 机器学习中的数学知识(part3)--凸优化

    学习笔记,仅供参考,有错必究 文章目录 机器学习中的数学知识 凸优化 非凸优化 机器学习中的数学知识 凸优化 下面是实际问题中常见的凸集,记住它们对理解后面的算法非常有帮助. n n

  7. 机器学习中的数学知识(part2)

    学习笔记,仅供参考,有错必纠 参考自:<机器学习与应用>–雷明 文章目录 机器学习中的数学知识 泰勒展开 梯度下降法 牛顿法 机器学习中的数学知识 泰勒展开 梯度下降法

  8. 机器学习中的数学知识(part1)

    学习笔记,仅供参考,有错必纠 参考自:<机器学习与应用>–雷明 文章目录 机器学习中的数学知识 偏导数与梯度 雅克比矩阵 Hessian矩阵 奇异值分解 向量与矩阵求导 机器学习中的数学知 ...

  9. matlab线束,matlab中常用数学词汇.doc

    matlab中常用数学词汇 数学词汇出处: 作者:(转载) FanE『翻译中国』 2004-6-9 22:21:18English?Chineseabbreviation?简写符号:简写absciss ...

最新文章

  1. Vue指令v-for之遍历输出JavaScript数组,json对象的几种方式
  2. 初创公司谁来当你们的运维
  3. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)
  4. 《数学与泛型编程:高效编程的奥秘》一1.4 各章概述
  5. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行
  6. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...
  7. WaitForMultipleObjects函数有效值分析
  8. 马云欣赏你,你的创业就已成功了一半
  9. 从零开始学数据分析之——《微积分》第一章 函数与极限
  10. matlab做多元统计分析,matlab多元统计分析
  11. mac下的c语言程序开发,mac VS Code配置C语言开发环境(小白简单Clang版)
  12. Java网络编程基础--Netty预备知识
  13. jsp:通过Session控制登陆时间和内部页面的访问
  14. 怎样卸载teams_如何在Windows 10上永久卸载Microsoft Teams
  15. JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化
  16. 一道分蛋糕的joj题
  17. Uniqlo与Fast Retailing发出警告 46万消费者账号遭入侵
  18. 剑指Offer-05:替换空格
  19. 堆排序:大顶堆和小顶堆 + 前K个高频元素
  20. 中新峰会 | MOV:DeFi的下一个可能

热门文章

  1. 【图解Java】这下可以真的弄懂Java IO了~
  2. 【队列】队列的基本操作总结
  3. 10 个冷门但又非常实用的 Docker 使用技巧
  4. 五分钟入门文本处理三剑客grep awk sed
  5. Java7 ConcurrentHashMap详解
  6. Apache FileUpload介绍
  7. hibernate的一对一主键双向映射关系和外键双向映射关系(一)
  8. ds18b20温度转换指令_DS18B20温度传感器(附代码并浅谈与或运算)
  9. 随机算法python_在python中实现随机选择
  10. (Java常用类)Object类