Algorithm & Data Structure
文章平均质量分 72
基本算法与数据结构!
智绘山河
硕士,AI算法工程师。曾获华为杯中国研究生数学建模竞赛一等奖,省优秀毕业生等。写过几篇中文核心,发过几篇国际会议,还有几个授权专利。喜欢搞搞代码,写写博客,没事还会搞搞LaTeX。
展开
-
【算法与数据结构】堆
定义堆(Heap)是一种特别的树。要想成为树需要满足以下条件:给定堆中任意节点A和B,若A是B的父节点,那么A的值会小于等于(或大于等于)B的值。这也就衍生最小堆和最大堆了即:若父节点的值恒小于等于子节点的值,这个堆就称为最小堆(min heap);反之,父节点的值恒大于等于子节点的值,则称为最大堆(max heap)。在堆中,最顶端的那个点也就是根节点(root node),他的值要么最大,要么最小,其不会有父节点了(parent node)。用途:构建优先队列(Priority Queue)堆原创 2022-03-27 16:07:14 · 1167 阅读 · 0 评论 -
【算法与数据结构】树——以二叉树的最大深度为例
定义树这种数据结构属于图这种数据结构的子集,其应用也相当广泛。在图论中,树是一种无向图(undirected graph),并且任意两个顶点间存在唯一一条路径。或者,只要没有回路的连通图就可以看成树。在实际场景中,如二叉查找树,Trie树(前缀树),霍夫曼树(数据压缩)就会使用到树这种数据结构。在NLP中的Word2vec就使用霍夫曼树进行优化。提到树,不得不提到树的几种遍历方式:1.前序遍历,先访问根节点,然后再访问所有的子树,即:根节点–>左子树–>右子树(记得需要把树走完,从顶点原创 2022-03-27 15:35:24 · 308 阅读 · 0 评论 -
【算法与数据结构】哈希表——以无重复字符的最长子串为例
定义哈希表也称为散列表(Hash table),是根据键(Key)直接访问内存存储位置的一种数据结构。也就是哦,我们可以通过计算一个关于键值的函数,将所需要查询的数据映射到表中一个位置来访问记录,这么一来就可以快速查找数据了。而这个映射函数我们称为散列函数,存放记录的数组称做散列表。生活中也会经常遇到哈希表的使用案例。例如通讯录,无论手机通讯录,还是微信,qq等,可以通过昵称,备注找到对应的联系人,虽然背后的实现方式可能不同,但是都使用了哈希表的这个思想。在编程语言中,字典(dict)通常也被称为映射原创 2022-03-27 13:59:28 · 1461 阅读 · 0 评论 -
【算法与数据结构】动态规划——以最大子数组之和、最长公共子序列为例
背景动态规划也是一种比较好的问题解决方法。算法内容动态规划是用来解决多阶段决策过程最优化的一种数量方法,可以把一个n维决策问题变换为几个一维最优化问题,从而逐个解决。其求解的多阶段问题特点:每个阶段的最优决策过程只与本阶段的初始状态有关,而与之前各阶段的决策无关。案例最大子数组之和(一维)剑指 Offer 42. 连续子数组的最大和,LeetCode地址:剑指 Offer 42. 连续子数组的最大和描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。原创 2022-03-24 18:55:47 · 169 阅读 · 0 评论 -
【算法与数据结构】分治(Divid Conquer)算法——以快排,归并排序,二分查找为例
背景虽然平时工作涉及的主要内容是NLP相关,但是在处理数据,以及实现相关NLP的过程中难免不遇上一些基本算法的内容。分治就是一种比较好的算法思维,有必要对他进行深入了解和熟练使用。算法内容所谓分治算法就是采取分而治之的思想。在分析一些问题的时候可以从以下三个步骤考虑能否使用:Divid: 待解决的问题能否分割成多个相同的子问题Conquer:将子问题找到合适的解决方法Combine:将每个子问题的解决方法进行合并,形成主问题的最终解决方法总结一下,这些问题的特征:子问题之间相互独立,子问题原创 2022-03-24 15:37:54 · 222 阅读 · 0 评论 -
【Theory】单调栈及其应用
最近在学习数据结构和算法相关内容,非科班出身的我,也只能慢慢地,一步一个脚印的学习、理解基本概念,很多笔记的内容来源于网上,文末也附上相应的链接,自己根据网上的博客内容以及自己的理解写出以下内容。1. 什么是单调栈在此之前,我们应该知道,什么是栈,一种先进后出的数据结构(存储数据的一种方式),只从数据集的一端进、出数据。而单调栈就是栈中的数据的排列具有单调性,分为单调递增栈和单调递减栈。需要注...原创 2019-08-27 21:50:01 · 350 阅读 · 0 评论 -
【Theory】前缀和及其应用
1 什么是前缀和假设我们有一个数组x=[x0,x1,⋯ ,xn]x=[x_0, x_1, \cdots,x_n]x=[x0,x1,⋯,xn],那么对应的前缀和数组y满足下式:yj=∑i=0jxiy_j=\sum_{i=0}^jx_iyj=i=0∑jxi例如x=[0,1,2,3,4,5,6]x=[0,1,2,3,4,5,6]x=[0,1,2,3,4,...原创 2019-08-27 15:48:58 · 403 阅读 · 0 评论 -
编辑距离计算与Python实现
1 什么是编辑距离在计算文本的相似性时,经常会用到编辑距离(Levenshtein距离),其指两个字符串之间,由一个字符串转成另一个所需的最少编辑操作次数。在字符串形式上来说,编辑距离越小,那么两个文本的相似性越大,暂时不考虑语义上的问题。其中,编辑操作包括以下三种:插入:将一个字符插入某个字符串删除:将字符串中的某个字符删除替换:将字符串中的某个字符串替换为另一个字符为了更好地说明...原创 2019-08-31 16:26:49 · 2004 阅读 · 0 评论