随笔分类 -  数据结构与算法

摘要:分治算法,顾名思义,就是分而治之,即把总数据分解成n个小规模的数据,并且这些个小规模的数据的结构符合原问题的要求,那么就变成了一个个子问题,这时就可以递归地解决这些子问题,最后合并它们的结果,就能得出顶级父问题的结果。 总结一下就是三个步骤 1.分解:把原问题分解成一系列子问题。 2.解决:递归地求 阅读全文
posted @ 2022-05-17 11:56 codemelo 阅读(66) 评论(0) 推荐(0) 编辑
摘要:动态规划的内容是一个模型三个特征,一般用来解决最优问题 模型:解决问题的过程,需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一组决策序列,经过这组决策序列,能够产生最终期望求解的最优值。 三个特征 1. 最优子结构 最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我 阅读全文
posted @ 2022-05-01 12:52 codemelo 阅读(92) 评论(0) 推荐(0) 编辑
摘要:贪心算法,突出一个贪心,总是有想用最低的成本完成任务。 贪心算法的步骤 1.首先要抓准期望值和限制值,当我们针对要解决的问题,可以数据抽象出期望值和限制值时,就要首先联想到贪心算法了。我们希望在满足限制值的同时,期望值最大。 2.我们尝试看下这个问题是否可以用贪心算法解决:每次选择当前情况下,在对限 阅读全文
posted @ 2022-04-29 22:11 codemelo 阅读(58) 评论(0) 推荐(0) 编辑
摘要:BF算法 bf算法(brute force)顾名思义,是很暴力,很朴素的算法,我们把想要匹配的字符串叫做模式串,通俗理解来说就是模板,把被进行搜索来查找有无匹配的子串的字符串叫做主串,比如用户输入的字符串。bf算法是这样的:假设主串长度为n,模式串的长度对我们从主串的初始位置0开始,每次查找长度为m 阅读全文
posted @ 2022-04-29 12:19 codemelo 阅读(99) 评论(0) 推荐(0) 编辑
摘要:广度优先搜索(Bradth - First - Search)和深度优先搜索(Depth - First - Search)是基于图的两个搜索算法。 广度优先搜索 广度优先搜索,类似于地毯式搜索,我们从起始顶点开始,先访问最近一层的所有顶点,然后次近一层的所有顶点,这样一层层地访问下去,一旦访问到目 阅读全文
posted @ 2022-04-28 10:38 codemelo 阅读(25) 评论(0) 推荐(0) 编辑
摘要:图是一种非线性结构,比树更复杂。 图也是由一个个点组成的,在图中,我们把每个点叫做顶点(vertex)。 图中的任意一个顶点可以和其他顶点建立连接联系,这种关系叫做边。 一个顶点与其他顶点建立连接关系的总数叫做度,即顶点的边的条数。 很多社交软件都是用图来保存用户之间的关系,以微信和微博来说,微信和 阅读全文
posted @ 2022-04-28 10:13 codemelo 阅读(205) 评论(0) 推荐(0) 编辑
摘要:跳表其实就是对链表进行改造,使链表能够进行类似于二分查找的算法。 我们知道,链表虽然内存消耗低,但是查询效率很低,想要去提高这个查询效率,我们可以参考下数组,数组为什么查询快?因为它是直接使用的偏移公式,按下标读取。那么我们可以参考这个思路,每隔一些结点就标记一下,比如每隔两个,这样类似于二分,把这 阅读全文
posted @ 2022-04-27 21:24 codemelo 阅读(138) 评论(0) 推荐(0) 编辑
摘要:堆是一种特殊的树,只要某棵树满足这两点,那么它就是树: 1.是一个完全二叉树。 2.该树的每个节点小于等于或者大于等于左右子树的所有节点的值,注意这不是像二叉查找树那种左小右大,而是要么左右都是小于等于,要么左右都是大于等于。、 小于等于的话叫做小顶堆,大于等于的话叫做大顶堆。 图中4不是堆,其他都 阅读全文
posted @ 2022-04-26 16:40 codemelo 阅读(163) 评论(0) 推荐(0) 编辑
摘要:树 树是由一个个节点组成的,最上层的节点叫做根节点,节点可以衍生出节点,相互之间是父子关系,同样,属于同一个父节点的叫兄弟节点,如果一个节点没有子节点,那么这个节点叫叶子节点或者叶节点,注意,树有一个很明显的特征:任意三个及以上的节点都不能形成闭合,即同一层的节点不连通,兄弟节点之间不能共享节点 树 阅读全文
posted @ 2022-04-25 21:17 codemelo 阅读(84) 评论(0) 推荐(0) 编辑
摘要:散列表,顾名思义,就是数据分散在列表中,也叫哈希表,散列表依赖于数组随机下标访问的特性,本质上是数组的一种拓展,有数组演化而来,可以说,没有数组就没有散列表。 散列思想 散列思想其实就是映射思想,即用键值对来保存信息,键(key)和值(value)之间的映射法则叫做散列函数(也叫Hash函数或哈希函 阅读全文
posted @ 2022-04-21 22:26 codemelo 阅读(537) 评论(0) 推荐(0) 编辑
摘要:如何分析一个排序算法? 执行效率 ①算出最好,最坏,平均时间复杂度,还要说出最好和最坏复杂度对应的原始数据是怎样的。 因为有些排序算法是进行了三个复杂度的区分,所以最好所有排序算法都进行区分,方便比较。 其次,要说出原始数据是因为有些原始数据非常无序,有些已经接近有序,有序度不同的数据,肯定会造成排 阅读全文
posted @ 2022-04-20 20:16 codemelo 阅读(57) 评论(0) 推荐(0) 编辑
摘要:写递归代码的关键点 ①写出递推公式,找到终止条件 ②我们看到递归时,我们总想把递归平铺展开,脑子里就会循环,一层一层往下调,然后再一层一层返回,试图想搞清楚计算机每一步都是怎么执行的,这样就很容易被绕进去。对于递归代码,这种试图想清楚整个递和归过程的做法,实际上是进入了一个思维误区。很多时候,我们理 阅读全文
posted @ 2022-04-17 22:21 codemelo 阅读(36) 评论(0) 推荐(0) 编辑
摘要:队列与栈类似,都是基于数组或者链表,都只有入和出两个操作,不过有两点不同 ①栈先进后出,队列先进先出 ②栈只需要一个栈顶指针,队列则需要一头一尾两个指针,这两个是当前队列的界限 队列的出队和入队该怎么做呢? 我们将使用循环队列,因为如果不形成循环队列,当tail指到了数组尽头,再有入队操作时,就得扩 阅读全文
posted @ 2022-04-17 16:56 codemelo 阅读(50) 评论(0) 推荐(0) 编辑
摘要:二分查找,简单来说就是在给定的数据范围,每次取完中间数后,就二分缩小范围(范围的最小值或者最大值,其中一个变成前一次范围的中间值),直到范围区间只有一个数或者找到想要的数。 举个例子 我们假设只有 10 个订单,订单金额分别是:8,11,19,23,27,33,45,55,67,98。还是利用二分思 阅读全文
posted @ 2022-04-17 16:02 codemelo 阅读(92) 评论(0) 推荐(0) 编辑
摘要:链表和数组不同,数组是必须要连续内存空间,链表是通过指针将零碎的内存空间串联起来 常见的链表有单链表,双向链表,循环链表 单向链表 单向链表每个数据后面都会有一个叫next的结点,头结点是记录链表的基地址,也就是链表第一个元素,尾结点指向null,代表链表结束,其他元素的结点均是指向下个元素。 所以 阅读全文
posted @ 2022-04-15 16:21 codemelo 阅读(70) 评论(0) 推荐(0) 编辑
摘要:时间空间复杂度是衡量代码执行效率的一个重要指标。 事后统计法依赖于测试环境,会受极端数据规模的影响,所以时间空间复杂度分析就应运而生了 大O时间复杂度表示法 T(n)代表代码执行的时间,f(n)代表每行代码执行次数的总和,O是代表前面两个变量成正比,n是数据规模 大O时间复杂度实际上并不代表代码具真 阅读全文
posted @ 2022-04-11 09:26 codemelo 阅读(215) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示