数据结构与算法
文章平均质量分 70
数据结构与算法
リュウセイリョウ
这个作者很懒,什么都没留下…
展开
-
算法学习(二)
本文介绍求解动态规划问题的一种轨迹:从暴力递归到递归优化,再到动态规划。本文将使用两个典型案例来描述这种轨迹,文章比较长,有兴趣者可以阅读。【例题1】表达式字符串中只有0(假)、1(真)、&(与)、|(或)和^(异或)这五个符号,给定一个bool类型期望值desired,对表达式字符串进行组合,求共有多少组合方式,使得组合的结果是desired。比如,表达式字符串为 1 ^ 0 | 0 |1,desired为false,共有2各种组合方式分别是1 ^ ( ( 0 | 0 ) | 1 )和1 ^ (原创 2021-04-05 22:49:17 · 367 阅读 · 2 评论 -
算法学习(一)
【题目】求数组中的最长连续序列的长度,序列中每个值的索引不要求连续,但值时连续的。【例如】数组data={100, 1, 200, 3, 2, 4},最长连续序列为{1, 2, 3, 4},返回4。【所属范围】动态规划【解】本题使用一个HashMap存储中间状态,key为数组元素值,value为该值所在的连续序列的长度。遍历数组时,利用HashMap可以判断当前元素 data[i] 是否已经出现过,如果出现过了,就不作处理,因为它不会影响已有的连续序列的发生扩张。如果没有出现过,就把它当做是长度为1的原创 2021-04-04 21:30:16 · 128 阅读 · 0 评论 -
数据结构与算法(一)——散列表的应用
一、java容器LinkedHashMapLinkedHashMap是在普通HashMap的基础上新增了Linked功能,那Linked是什么呢?Linked表示当我们将key-value对加入到map容器中时,会按照添加的先后顺序进行排序。也就是说,当执行以下代码时,// 10表示初始大小,0,75表示装载因子,true表示按照访问时间顺序Map<Integer, String> map = new LinkedHashMap<>(10, 0.75f, true);map原创 2020-09-22 20:19:58 · 244 阅读 · 0 评论 -
数据结构与算法(二)——动态数据结构
动态数据结构是支持动态的更新操作,里面存储的数据是时刻在变化的。它支持快速地查询、快速插入、删除数据。本文没有对各种动态数据结构的定义和实现进行分析,而是简要地讨论它们的优势、劣势和应用场景。因为对于工程应用来说,更重要的是根据这些数据结构的特点,合理地使用它们。1、散列表散列表使用哈希函数进行映射,因此查找、插入、删除操作的时间复杂度一般为O(1)。限制:①要求设计合适的散列函数。要尽可能让散列后的值随机且均匀分布,这样会尽可能地减少散列冲突,即便冲突之后,分配到每个槽内的数据也比较均匀。并且,散原创 2020-09-24 15:31:43 · 1501 阅读 · 0 评论 -
数据结构与算法(三)——堆及其应用
一、什么是堆?作为一种数据结构,堆是一个完全二叉树,且堆中每个节点的值必须大于等于(或小于等于)其子节点的值。对于每个节点的值都大于等于其子节点值的堆,称作“大顶堆”。对于每个节点的值都小于等于其子节点值的堆,称作“小顶堆”。下图为大顶堆。二、堆的存储方式堆作为一种完全二叉树,比较适合用数组来存储,这样就不用像二叉树一样,每个节点都要存储左右子节点的指针了。用数组存储只需要通过数组下标,就可以找到当前节点的左右子节点。如图,数组下标为i的节点,其左子节点的下标为2 * i,右子节点的下原创 2020-09-28 17:48:16 · 272 阅读 · 0 评论 -
数据结构与算法(四)——图的简单应用
一、图的定义树是一种特殊的图,图比树更加复杂,因为图中的每个顶点都可以与其他顶点相连。图又分有向图和无向图。无向图的边没有箭头指向,是双向的;而有向图的边是有箭头指向的,是单向的。边上有权值的图称为带权图。二、图的存储图的存储方式一般有两种:邻接矩阵和邻接表。1、邻接矩阵邻接矩阵使用二维数组存储,假设图中的顶点数为n,则这是一个 n * n 的二维数组。对于非带权图来说,如果顶点 i 到顶点 j 存在指向的边,则二维数组 [i] [j] 位置赋值为1;如果是带权值的图,则二维数组 [i] [原创 2020-09-29 16:12:38 · 487 阅读 · 0 评论