数学之美梳理(二)如何用数学的方法进行分词
上一篇关于如何计算一句话是否具有实际意义博客中的方法中,通过将一句话被拆分成不同的词,然后计算这个词的序列的可能性大小来实现的。
对于西方拼音语言来讲,词之间有明显的分界符,统计和使用语言模型非常直接。而对于一些亚洲语言,如中,日,韩,泰等,词之间没有明确的分界符,所以我们需要先对句子进行分词。
上一篇关于如何计算一句话是否具有实际意义博客中的方法中,通过将一句话被拆分成不同的词,然后计算这个词的序列的可能性大小来实现的。
对于西方拼音语言来讲,词之间有明显的分界符,统计和使用语言模型非常直接。而对于一些亚洲语言,如中,日,韩,泰等,词之间没有明确的分界符,所以我们需要先对句子进行分词。
自然语言从诞生开始,逐渐演变成一种上下文相关的信息表达和传递方式(即要理解一个词汇的真实意思,需要结合它前后的内容一起看),因此让计算机处理自然语言,一个基本问题就是为自然语言中这种上下文相关的特性建立数学模型,这个数学模型就是在自然语言处理中常说的统计语言模型(Statistical Language Model),它是所有语言处理的基础,并且广泛应用于机器翻译,语音识别,手写字体识别等领域
树状数组(Binary Indexed Tree,简称BIT),有时也被称作Fenwick树,是一种用于高效处理前缀和、区间求和、以及相应更新等问题的数据结构。它提供了比普通数组更好的方法来实现这些操作,特别是在需要频繁更新元素和查询前缀和的场景中。树状数组在时间复杂度和空间复杂度上都很优秀,实现也相对简单。
普通树状数组维护的信息及运算要满足 结合律 且 可差分,如加法(和)、乘法(积)、异或等。
结合律:(x∘y)∘z=x∘(y∘z),其中∘ 是一个二元运算符。
可差分:具有逆运算的运算,即已知x∘y 和 x 可以求出 y。
事实上,树状数组能解决的问题是线段树能解决的问题的子集:树状数组能做的,线段树一定能做;线段树能做的,树状数组不一定可以。然而,树状数组的代码要远比线段树短,时间效率常数也更小,因此仍有学习价值。
有时,在差分数组和辅助数组的帮助下,树状数组还可解决更强的 区间加单点值 和 区间加区间和 问题。
最近在leetcode看到了一道题,很有意思,可以用动态规划解,也可以用Dijkstra算法来解,这道题最大的启发就是:
动态规划的每个节点就是图中的节点,状态转移方程其实就是两个节点之间的连线,我们可以用Dijkstra算法求解从开始节点到目标结点的最短路径。
最近在极客时间上买了一个关于K8S的课程,第一个部分讲的是Docker容器的基本原理,简单总结一下。
最近在项目中使用了vditor但是它的数学公式,流程图,脑图等都没法用,看了它的源码后,找到了解决方案,这里记录下。
最近拼多多的推金币比较火,就尝试想用一下2D的游戏引擎试一下效果,做了一个简单的Demo。
引擎选择的是Eva,采用这个引擎是因为它基于ECS的微内核架构,让扩展非常方便,同时也提供了几个官方的插件,足以支持大部分需求,它的渲染引擎插件是基于PixiJS,物理引擎插件是基于MatterJS,它的插件所依赖的版本比较低了,对于我来说还够用,如果有需要完全可以自己实现。
单源最短路径算法和多源最短路径算法的区别在于它们解决的问题不同。
单源最短路径算法是指在给定一个起点,计算该起点到图中其他所有顶点的最短路径。其中最著名的算法是Dijkstra算法和Bellman-Ford算法。Dijkstra算法适用于有向图中没有负权边的情况,而Bellman-Ford算法可以处理有负权边的情况。
多源最短路径算法是指计算图中任意两个顶点之间的最短路径。其中最著名的算法是Floyd-Warshall算法。Floyd-Warshall算法通过动态规划的方式计算任意两个顶点之间的最短路径,可以处理有向图和负权边的情况。
总结起来,单源最短路径算法解决的是从一个起点到其他所有顶点的最短路径问题,而多源最短路径算法解决的是任意两个顶点之间的最短路径问题。
贝尔曼-福特算法(Bellman–Ford algorithm )用于计算出起点到各个节点的最短距离,是一种单源最短路径算法,支持存在负权重的情况