- 博客(52)
- 收藏
- 关注
原创 汉明距离及其高效计算方式
什么是汉明距离下面引用自维基百科:在信息论中,两个等长字符串之间的汉明距离(英语:Hamming distance)是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。对于两个数字来说,汉明距离就是转成二进制后,对应的位置值不相同的个数。例如,假设有两个十进制数a=93和b=73,如果将这两个数用二进制表示的话,有a=1011101、b=1001001,可以看出,二者的从右往左数的第3位、第5位不同(从1开始数),因此,a和b的汉明距离是2。
2021-04-29 17:19:05 4798
原创 十分钟简明易懂搞定堆排序算法,附Python源码
什么是堆(heap)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个节点对应数组中的一个元素,而且是从左向右填充。从上述描述,我们可以做出总结:从存储的角度来看,堆是一个数组从结构的角度来看,堆是一棵完全二叉树举例:有一个数组A=[2, 9, 5, 3, 6, 7, 19, 1, 4, 8],那么可以把这个数组看作如下图所示的二叉树:从上述定义中,自然会引申出一...
2020-01-14 19:06:20 283
原创 《线性代数及其应用》系列笔记
写在前面的话《线性代数及其应用》,英文名:Linear Algebra and Its Applications,是关于线性代数的一本很出色的教材。由于工作中需要用到线性代数相关知识,所以通过这本教材来进行复习和巩固。依据费曼学习法的原则,也为了方便自己日后回顾,将每一章节的笔记整理成册(原书第5版)。目录第1章 线性代数中的线性方程组1.1 线性方程组1.2 行化简和阶梯形矩阵1.3...
2019-11-06 15:19:21 2298
原创 合并两个有序链表的方法
什么是合并两个有序链表假设有两条链表,这两条链表分别都是升序排列的,如下图所示:现在要求将二者合并成一条链表,并且该链表也是升序排列的,合并后的链表如下图所示:思路如果对归并排序有所了解,那么这个问题就很简单。在归并排序的递归过程中,我们的算法是将原始数组a切割成两段:a1和a2,对a1和a2分别排序后,再将二者归并成一个有序的数组。这里的思路是一样的,只不过将数组变成了链表。大体的思路是:确定合并后的新链表的头节点head使用一个指针l3,初始化为head,用这个指针来组织新链表的各个
2021-04-29 18:51:40 4296
原创 难倒Homebrew发明人的翻转二叉树到底有多简单?
什么是翻转二叉树大家都知道Homebrew发明人Max Howell面试谷歌时,被一道翻转二叉树的题目给难倒了。那么什么是翻转二叉树呢?看看下图就明白了。简单地说,就是对于一棵二叉树及其所有子树,交换其左右位置。思路首先,看到一棵二叉树时,我们不要被庞大的分支结构所吓倒,其实,其基本构成就是根节点、左子树、右子树这三个元素而已。大多数问题只需要考虑这三者之间的关系就能被解决;其次,对于树相关的问题,我们的第一反应是尝试能否通过递归的方法来实现。理清了二叉树的基本结构(根节点、左子树、右子树),
2021-04-29 18:50:32 607
原创 反转链表及其考察的知识点
什么是反转链表如下图所示,原来的链表指向性是从第一个节点1依次指向最后一个节点5,反转链表后,要让原来的链表中的最后一个节点变成第一个节点,并逆转整个链表的指向性。考察的知识点链表相关的操作,难度都不大,但很能够考察思维的严密性,主要体现在:处理每个节点时,各个操作的先后顺序;边界情况的考虑,例如,对于头节点和尾节点的考虑是否完善。如果能充分考虑以上两点,那么链表相关的操作就大体没有问题了。思路当我们遍历到某一个节点cur时,面临的情况如下:根据题意,我们的目标是:让cur节点
2021-04-29 18:49:10 216
原创 栈的最简应用:leetcode #1544之整理字符串
什么是栈?栈是大家很熟悉的一种数据结构了,人们之所以使用栈,就是为了使用其后进先出的特性。入栈和出栈是栈的两个灵魂操作。如图所示,以Python中的list模拟栈结构,原始list是[1,2],通过两次push()操作,我们先后将3,4这两个元素加入到list中,这个操作被称作压栈,之后我们再对list施加两次pop()操作来模拟出栈,值得注意的是,元素4虽然是最后被压栈的元素,但却是第一个出栈的元素,这就是我们所说栈结构的后进先出的特性。leetcode #1544之整理字符串原题如下:给你
2021-04-29 17:21:59 237 4
原创 4.1 向量空间与子空间
主要内容本节讲述了向量空间的概念,这里要把之前由几何概念得到的对向量空间的直觉进行进一步抽象和泛化,只要满足定义的一组向量,都可以构成向量空间,例如多项式、实函数等等。在向量空间的基础上,引入了子空间的概念。向量空间的定义定义:一个向量空间是由一些被称为向量的对象构成的非空集合VVV,在这个集合上定义了两个运算,称为加法和标量乘法,服从以下公理,这些公理必须对VVV中所有向量u,v,w\...
2020-04-26 10:33:20 6245 2
原创 3.3 克拉默法则、体积和线性变换(第三章 行列式)
主要内容本节讲述了行列式的一些应用。首先是利用克拉默法则去求解线性方程的解,接着,以克拉默法则为基础,引出一种求矩阵的逆的方法。最后讲述了从几何意义上去理解行列式,行列式代表了矩阵围成的平行四边形或平行六面体的面积或体积,并可以通过行列式关联线性变换前后的区域面积或体积。克拉默法则为描述方便,首先做一个约定:对任意n×nn \times nn×n矩阵AAA和任意的Rn\mathbb R^...
2020-04-08 14:39:34 1684
原创 3.2 行列式的性质(第三章 行列式)
主要内容这一节的核心内容是,将求一个矩阵的行列式的问题,转化为求该矩阵进行行变换后矩阵的行列式的问题。通过这种转化,可以非常灵活地降低求一个复杂矩阵行列式的难度。此外,还在论述过程中,顺便证明了行列式为0和矩阵可逆的关系定理。并讲解了一些围绕核心内容的推论,例如列变换定理,行列式和矩阵乘积的关系等。行变换定理计算某个方阵的行列式,可以转换为计算其过行变换的矩阵的行列式。有如下定理:若AA...
2020-03-26 17:13:31 1363
原创 3.1 行列式介绍(第三章 行列式)
主要内容本节首先由矩阵行化简为三角阵时的过程中,矩阵可逆的条件引出了行列式的定义,从行列式的形式中寻找规律,引出了行列式的递归定义法。接着对行列式的计算方法进行进一步改进,引出余因子展开式的计算方法,用以适应不同情况下的行列式计算,以减少运算量。3×33\times 33×3矩阵的行列式之前学习过,一个2×22 \times 22×2矩阵是可逆的,当且仅当它的行列式非零。这里将这个结论推广到...
2020-03-17 09:54:13 1026
原创 2.9 维数与秩(第二章 矩阵代数)
主要内容本节首先引入了坐标系的概念,利用子空间的一组基,将子空间的任意一个向量用这组基来表示。接着引入了子空间的维数的概念,其实质是子空间中任意一组基的个数。并讨论了矩阵列空间的维数(也称作秩)和子空间的维数。坐标系根据上一节的定义,子空间HHH中的一组基是线性无关的。由于基是线性无关的,所以HHH中的每个向量可以被表示为基向量的线性组合的唯一形式。证:假设β={b1,⋯ ,bp}\b...
2020-03-05 14:24:09 4663
原创 2.8 Rn的子空间(第2章矩阵代数)
主要内容本节引入了Rn\mathbb R^nRn中子空间的概念,子空间并不是Rn\mathbb R^nRn的任意一组向量的切割,而是需要满足向量加法和乘法的封闭性(Rn\mathbb R^nRn中通过原点的线、平面),接着引入了两个典型的子空间:矩阵的列空间和矩阵的零空间。最后,引入了基的概念,并以列空间和零空间为例,讲述了如何求解列空间和零空间的基。Rn\mathbb R^nRn子空间的定义...
2020-02-26 16:44:46 6988
原创 2.6 列昂惕夫投入产出模型(第2章矩阵代数)
主要内容本章以列昂惕夫生产消费模型为例,讲解了矩阵在实际生活中的应用。列昂惕夫投入产出模型列昂惕夫是著名的经济学家,曾经获得诺贝尔奖,其中线性代数为他获得诺奖提供了重要帮助。有这么一个复杂的经济命题:假设某国的经济体系分为nnn个部门,这些部门分别生产不同类型的产品,例如制造业、农业产品、服务业业产品。可以用Rn\mathbb R^nRn中的向量x\boldsymbol xx来代表这个...
2020-01-15 14:30:00 11044
原创 2.5 矩阵因式分解(第2章矩阵代数)
主要内容本节首先讲解了LU分解的意义:用来简化线性方程组的计算过程。接着,根据LU分解的形式,得出了求解LU分解的算法。LU分解的形式和意义矩阵AAA的因式分解是把AAA表示为两个或更多个矩阵的乘积。矩阵乘法是数据的综合(把两个或更多个线性变换的作用结合成一个矩阵),矩阵因式分解是数据分解。在计算机科学中,将AAA表示为矩阵的乘积对应于对AAA中数据的预处理过程,把这些数据分成两个或更多个部...
2020-01-06 16:31:08 6469
原创 2.4 分块矩阵(第2章矩阵代数)
主要内容本节引入了分块矩阵的概念,讲解了分块矩阵的乘法运算(将子矩阵当作数处理),并由此引出了看待矩阵乘法的另一种观点(左边矩阵的列乘以右边矩阵的行),最后讲解了分块矩阵的逆矩阵是如何运算的。分块矩阵的概念之前,我们尝试过把矩阵看作一个数的矩形表,也可以把矩阵看作一组列向量,现在可以尝试以另一种新的角度来看待矩阵,也就是用水平线和垂直线将它分割成几块,如下图的矩阵AAA。 以这种观点来看矩阵...
2020-01-02 09:55:33 2120
原创 如何从股市曲线看出买进卖出的最佳时期?利用Python和分治策略轻松搞定
问题描述如果我们进行过投资行为,都知道一个简单的原则:低价买进,高价卖出。例如下图所示的曲线,股票价格是一直在波动的,我们想知道哪天买入,哪天卖出,收益最高。如下图所示,是一个很好的示例:这个问题的实质是要求出一个最大子数组,使得首尾两个元素的差值最大。思路为简化问题,我们把原始数组[100, 113, 110, 85, 105, 102, 86, 63, 81, 101, 94, 10...
2019-12-30 19:48:13 875
原创 2.3 可逆矩阵的特征(第2章矩阵代数)
内容概述本节将可逆矩阵的概念和之前学到的一些概念进行了关联,说明了这些概念之间的等价性。最后以空间变换为例,讲述了逆矩阵和逆变换之间的联系。可逆矩阵的特征本节重点讲逆矩阵的概念和第一章中nnn个未知量nnn个方程的方程组以及方阵联系起来。定理:设AAA为n×nn \times nn×n矩阵,则下列命题是等价的,即对某一特定的AAA,它们同时为真或同时为假:a. A是可逆矩阵b. A...
2019-12-26 11:00:00 3144
原创 2.2 矩阵的逆(第2章矩阵代数)
内容概述本章首先由倒数的概念,引申出逆矩阵的概念。接着讲解了利用行列式来计算二阶方阵逆矩阵的方法。接下来,讲解了可逆矩阵对应线性方程解的唯一性,以及可逆矩阵的几个有用的性质。本章的最后,讲解了计算逆矩阵的一种通用方法,即利用初等矩阵来计算逆矩阵。由倒数引申出矩阵的逆假设有一个实数555,555的乘法逆是1/51/51/5或5−15^{-1}5−1,它满足方程:5−1⋅5=15^{-1} \c...
2019-12-19 10:36:50 11281
原创 常用LaTex语法积累,附示例代码和呈现效果
积累常用的LaTex语法,并附上示例代码和呈现效果。持续更新。上标和下标上标用^表示,下标用_表示。示例:E=mc^2,效果:E=mc2E=mc^2E=mc2示例:x_1=x_2,效果:x1=x2x_1=x_2x1=x2行内公式和行间公式行内公式以$作为开始和结束,行间公式以$$作为开始和结束。示例:这是质能转换公式:\$E=mc^2\$效果:这是质能转换公式:...
2019-12-17 11:59:50 779
原创 归并排序算法的Python实现
思路归并排序算法使用的是典型的分治思维。要对一个数组A排序,那么可以将这个数组分成两个部分B和C,对B和C分别排序后,再将B和C按顺序进行归并。这种分治的思想可以很轻松地应用到MapReduce架构。由于B和C的排序过程是彼此独立的,因此可以进行并行运算(对应于Map的过程),而B和C的归并过程则可以通过Reduce实现。归并排序排序是一个递归的过程,需要将原始序列不停地拆分成两个小序列,直...
2019-11-28 19:36:10 278
原创 2.1 矩阵运算(第2章矩阵代数)
内容概述本节讲解了一些矩阵运算的基本法则,其中最重要的是要理解矩阵乘法的意义(复合变换)和矩阵乘法的性质(比如很重要的矩阵乘法结合律),除了矩阵乘法,还讨论了矩阵的和、矩阵的标量乘法、矩阵的乘幂、矩阵的转置等概念和计算方法。矩阵标记若AAA是m×nm \times nm×n矩阵,则AAA的第iii行第jjj列的元素用aija_{ij}aij来表示。AAA的各列是Rm\mathbb R^mR...
2019-11-26 15:44:19 1333
原创 插入排序算法的Python实现
思路这里假定对一个数组里的数据进行非递减排序,思路如下:在原始数组上操作总共两层循环第一层循环,从原数组第二个元素开始,正序遍历到数组最后一个元素,每次进行下述第4步的操作第二层循环,从当前元素逆序遍历到数组开始位置,让当前元素和前一个元素比较,如果当前元素小于前面一个元素,则交换这两个元素,否则立即终止循环这个过程类似于玩牌时,每抓到一张新牌,就把这张新牌按大小顺序插入到原始牌序...
2019-11-25 10:30:24 455
原创 开启NFS服务,实现两台Linux机器之间共享目录
1. 目的利用NFS服务,使得一台Linux机器可以通过网络访问另一台Linux机器上的目录。2. 实验环境两台Fedora 31 Linux机器,一台作为服务器(提供共享的目录),另一台作为客户端(用于访问服务器的共享目录)服务器地址:192.168.1.125客户端地址:192.168.1.1703. 服务器配置3.1 安装NFS工具集dnf -y install nfs-u...
2019-11-23 11:16:07 1683
原创 1.10 商业、科学和工程中的线性模型(第1章 线性代数中的线性方程组)
内容概述原书讲解了三个例子:构造营养食谱、电学、线性差分方程。这里记录差分方程的例子,一是这个例子可以帮助很容易地构建差分方程的缘起,又说明了线性代数的一大重要应用-解差分方程。还为将来理解特征值和特征向量的意义打下了基础。差分方程科学中,往往需要研究随时间变化的动力系统,这种系统通常在离散的时刻测i狼,得到一个向量序列:x0,x1,x2,⋯\boldsymbol x_0,\boldsymb...
2019-11-21 11:09:11 921
原创 1.9 线性变换的矩阵(第1章 线性代数中的线性方程组)
内容概述本节首先指出了线性变换和矩阵变换的等价性,并介绍了用矩阵来描述线性变换的方法;接着,举了几个二维空间线性变换的几何特性;最后,从线性变换的角度讨论了解的存在性和唯一性问题,并和之前的概念进行了关联。Rn\mathbb R^nRn到Rm\mathbb R^mRm的线性变换和矩阵变换的关系下面的讨论指出,从Rn\mathbb R^nRn到Rm\mathbb R^mRm的每一个线性变换...
2019-11-20 09:16:54 915
原创 1.8 线性变换介绍(第1章 线性代数中的线性方程组)
内容概述本节先从矩阵方程引入了向量变换的一系列概念,接着以矩阵变换为例,探讨了引入向量变换概念后,一些思考问题的新角度以及和之前章节一些概念的结合。最后,由矩阵变换的性质引入了一类比较重要的变换:线性变换,并探讨了线性变换的性质和几个线性变换的例子。变换的概念矩阵方程Ax=bA\boldsymbol x = \boldsymbol bAx=b:在线性代数中的应用不仅仅是直接与向量的线性组合...
2019-11-15 17:19:29 1110
原创 1.7 线性无关(第1章 线性代数中的线性方程组)
内容概述本节首先从向量的代数关系出发,引入了向量组的线性无关、线性相关两个重要的概念;接着,以递进的方式,首先研究了一个或两个向量之间的关系,引入一些判断向量关系的方法,例如通过观察法来判定两个向量之间的关系,并从几何的角度去理解这种关系,接着研究了两个或多个向量彼此之间的关系,并引入了一些新的定理,用来判定向量集合的相关关系,例如从线性组合的角度、方程组的行列数量等等。本节的重点是要从代数的、...
2019-11-14 11:12:16 11084
原创 1.5 线性方程的解集(第1章 线性代数中的线性方程组)
内容概述本节首先从齐次线性方程组的入手,研究了解集的向量形式,由此建立了解向量、解空间的思考模式;接着为了完备性,扩展到非齐次线性方程组,说明了从向量、空间的角度线性方程组解集的一般表示形式。总之,本节的重点是建立从向量的线性组合、空间的集合意义的角度来研究线性方程组的解集。齐次线性方程组线性方程组称为齐次的,若它可写成Ax=0A\boldsymbol x = \boldsymbol 0Ax...
2019-11-11 11:42:07 2902
原创 NumPy之 索引技巧
系列文章一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝NumPy之索引技巧利用array作为索引索引一维ndarray当被索引的ndarray是一维时,利用array做索引,相当于一次性从被索引对象中挑选出索引指定的所有元素,索引出的对象仍然是一个ndarray对象。>>> a = np.arange(12)**2 ...
2019-11-07 11:07:33 259
原创 1.4 矩阵方程(第1章 线性代数中的线性方程组)
内容概述本节引入了矩阵方程的概念,并指出了矩阵方程、向量方程、线性方程组之间的等价关系,这种等价关系可以指导我们在解决现实问题时根据不同的情况灵活运用。接着,讲了矩阵方程Ax=bA\boldsymbol x =\boldsymbol bAx=b的一些基本性质,例如解的存在性,AxA\boldsymbol xAx如何计算,以及AxA\boldsymbol xAx这一矩阵-向量积的运算法则。矩阵方...
2019-11-07 10:31:57 2376
原创 NumPy之浅拷贝和深拷贝
系列文章一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝NumPy之索引技巧概述NumPy经常会操作size很大的数据结构,如果不加小心,会产生很大的内存和性能浪费,因此要理解操作中的各种行为,根据实际情况选择最合理的方法。完全没有拷贝如果只是进行简单的赋值操作,是不会发生拷贝行为的。>>> a = np.arang...
2019-11-06 15:54:39 469
原创 NumPy之操控ndarray的形状
系列文章一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝NumPy之索引技巧概述这里主要总结针对ndarray形状的三种操作:改变ndarray的形状堆叠几个ndarray拆分ndarray改变ndarray的形状以下列ndarray为例:>>> a = np.floor(10*np.random.rand...
2019-11-06 15:53:20 1260
原创 一次性搞定NumPy入门基础知识
系列文章一次性搞定NumPy入门基础知识NumPy之操控ndarray的形状NumPy之浅拷贝和深拷贝NumPy之索引技巧1. 基本数据结构NumPy最核心的数据结构就是所谓的多维数组(ndarray, n-dimensional array)。这里,所谓的“维度”,指的是数据嵌套的层数,每一层叫做一个axis。例如:[[1., 0., 0.], [0., 1., 2.]]这...
2019-11-06 15:29:59 217
原创 1.3 向量方程(线性代数及其应用-第5版-系列笔记)
内容概述本节首先以R2\mathbb{R}^2R2和R3\mathbb{R}^3R3空间为例,引入了向量的概念、向量的几何表示,并介绍了向量的一些基本运算和性质,例如向量的加法和标量乘法、交换律、结合律等。接着引入了线性组合的概念,并将线性组合和线性方程组结合了起来。R2\mathbb{R}^2R2中的向量仅含一列的矩阵称为列向量,或简称向量。举例如下:u=[12]\boldsymbol ...
2019-11-06 15:23:21 7438
原创 1.2 行化简和阶梯形矩阵(线性代数及其应用-第5版-系列笔记)
内容概述本节首先讲解了矩阵变换的两种形式:阶梯形和简化阶梯形,并讲述了这两种变换之间的关系(最重要的关系是二者的主元位置和主元列是相同的)。之所以引入这两种变换,是为了给解线性方程组和研究线性方程组解的性质提供方便。接下来,讲解了利用简化阶梯形求解线性方程组解的方法,最后讨论了利用阶梯形矩阵判断方程组解的存在性和唯一性的方法,并得出了解线性方程组的一般步骤。术语约定非零行:矩阵中至少包含一...
2019-11-06 15:21:41 10420 1
原创 1.1 线性方程组(线性代数及其应用-第5版-系列笔记)
内容概述本节首先引入了线性方程以及线性方程组的概念,通过解一个线性方程组,指出了线性方程组解的几个一般情况(无解,有唯一解,有无穷多解);接着,引入了矩阵的概念,指出可以利用矩阵来表示线性方程组的系数和方程等号右边的常数。最后,讲解了一种解线性方程组的方法(高斯消元法),并论述了线性方程组的解的情况(存在性和唯一性)。概念梳理线性方程包含变量x1x_1x1, x2x_2x2, ⋯\cd...
2019-11-06 15:20:26 2681 3
原创 利用pandas对缺失值进行处理
许多原始数据集中会包含缺失值,这里总结一下常见的对缺失值的处理方式,以及如何通过pandas进行实际操作。生成一个包含缺失值的DataFrame通过如下代码,可以构造一个包含缺失值的DataFrame。这里用到一个小技巧,首先我们通过numpy的random方法构造了一个包含随机值的DataFrame,然后,用reindex方法添加了几个新的index,这样DataFrame里新增行的初始值就...
2019-11-06 15:16:12 1232
原创 Word Embedding的发展和原理简介
文本处理是NLP领域的一个重要分支,其细分领域又包括文本聚类、分类、机器翻译、人机交互等等,而这一切的前提都是将文本表示成计算机可以理解和易于处理的数据。经过成千上万年的进化,人类的语言本身变得十分抽象和复杂,要搞懂一段文字,那么要理解词本身的意义、语义关系、上下文关系(苹果好吃/苹果公司),如何将文字用计算机语言表达出来,并尽量减少编码过程中造成的信息损失,一直是一个业界难题和很重要的研究方向...
2019-11-06 15:10:53 384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人