本文章共3439字,著作权由博主——南城无笙(原Mittsommer) 保留,未经允许不得转载,一旦发现抄袭、未授权转载必将追究其责任。
Start
这是一个我继网络安全后又新开的一个主题——算法。
本主题的内容、灵感均受益于《程序员的数学》这套书,多数较为好理解的概念均出自这里。
本文中,所出现的数学公式使用的工具是渗透、取证系统BackboxLinux的一款工具——LibreOfficeMath
那么先从线性代数的基础开始介绍
对于需要处理由多个数值组成的成组的数据,对于这种数据,我们一般不将其看作一组组的数,而是要结合线性代数,将其看作空间中的点来进行运算、处理。这也是线性代数的中心思想。
向量
下面开始介绍一个基本概念——向量
当我们要把几个数值放在一起作为一个整体来运算、处理时,便引入了向量。
那么向量的实际意义就是:“有向线段、空间内的点”,也可以形象化的表示为带有箭头的线段,百度词条定义为具有大小和方向的量
然而,参照前文提到的那本书,书里对于没有数学基础的读者给出了一个非常直观的理解(只不过这个理解并不是特别严谨的数学定义。):排成一列的数字。
如图所示,这就是一个典型的二维向量,那么对于这个向量,我们还可以写成这样:(T是transpose转置的缩写)
前者是列向量,而后者我们称其为行向量。
而这里的分量(比如上文例子中的2和3就是分量)我们也称其为元素,当元素是实数时,其构成的向量和矩阵我们称其为实向量和实矩阵。以此类推,当其为复数时(即“实数+(实数)i”这种形式的数,这里的i是虚数单位,i²=-1)
向量运算
向量加法
对于向量加法是很简单的,我们有如下公式:
我们可以看到,其实就是同维数向量,对应位置上的元素相加。
那么下面可以举一个例子:
以上就是向量加法
向量乘法
下面我们来继续看向量乘法。这里面的向量乘法指的是一个量乘以向量。
例如一个数:a乘以一个向量,如图
我们可以很好的看到,就是将这个量与每一个元素分别相乘,前后维数不变。
这里,在向量中存在着一个较为特殊的向量,叫做零向量,很好理解,零向量就是所有元素都为零的向量,我们称之为零向量。
任何向量加零向量都等于其本身。
空间向量
二维向量我们可以在纸上画出来,例如一个二维向量:
对应的是横坐标为2,纵坐标3的点。
那么根据这一点,我们可以得出如下的结论:向量的加法就是线段的拼接,向量的乘法就是线段的伸缩,例如,一个向量乘以3就是伸长3倍,乘以-3就是反方向延长至原来的三倍。
Ps:对于三维向量也可以表示,但是对应的是三维空间。
基底
对于刚才的理论,都是建立在一个向量表示在纸上的形式来展开说明的。但是在线性世界中,没有规定特定的例如上下左右之类的方向,所以,对于线性空间,附加了加法和乘法。
那么来看对于线性空间(也称向量空间)的标准定义:线性空间定义是设V是一个非空集合,而P则是一个域。如果在V里面定义一种运算,把它叫做加法,也就是说对于V里面的任意两个元素,α+β都要按照一定的规则对应于V里面唯一确定的元素,叫做α与β之和。然后在P与V这两个元素之间又定义一个纯乘法运算。
这段定义相比除了之前就会这个知识点的人谁看了都是一阵头疼,所以,这里推荐初学者尝试理解《程序员的数学》中,作者给出的比较好理解的定义:“对于这样一个附加了加法和数量乘法的运算的世界,我们就称他为线性空间(也就是向量空间)”,显然,对于上文提到的那本书的作者给出的这一条相比于那个晦涩难懂的定义要好理解的多,但是,当有能力理解严谨的数学定义后,还是要去以标准的定义为主,这里的也只是作为对于没有基础的人的一个辅助工具。当我们强调一个向量表示一个线段的时候,我们一般强调其方向性,将其记为如下形式:
这里我们更多的强调的就是方向性。
其实线性空间就是我们生活的空间的一个缩影,是对现实空间经过抽象化之后得到的产物,正因为不是完全复制现实世界,所以,对于这种问题,最致命的行为就是靠生活经验来解决有关于线性空间的问题
而且还要注意的是,线性空间中,角度这个概念并不存在,同时也不存在旋转操作。
Ps:定义了角度和长度的是内积空间。
选定“基准”
在线性空间中,当我们特别指定某个向量,例如向量v时,我们很难方便的表达,所以我们要有一种通用的表达方式,这种表达方式就和刚才的大标题:基底有关。
刚才提到的方法,其实我们也可以理解为给线性空间编写地址。而我们首先要做的就是,确定用什么来做基准
这里举个例子,比如我们要表示向量:
这里我们加入选定如下两个向量为基准:
然后再给出如下式子
我们可以这样来描述这个式子:向量v的位置,就是沿着向量e1走五步,然后沿着e2走六步。
这里面,作为基准的这组量我们叫他为基底。
沿着基底中向量走的步数我们叫他为坐标,基底中的两个向量叫做基向量。
本文章要写的内容到这里就结束了,对于什么样的向量能作为基底以及向量的其他知识点在下篇文章再做讲述。