数据结构
文章平均质量分 85
数据结构系列
GoldenaArcher
Done is better than perfect
展开
-
使用并查集生成一个迷宫
之前在做笔记的时候就想……嗯……大概能写点什么有趣的东西出来加强一下记忆?于是就整出了这个,然后发现对于setTimeout以及的应用还不行啊,晚点继续折腾一下。,总体来说并查集是一个实现非常简单的算法结构,理解起来也不是非常的困难。其中数组是一个二维数组中间的 4 个 boolean 代表的是四个方向是否与其他格子进行联通,如果没有联通那么就使用 css 绘制 border。绘制之后大概如下:double border 的问题我倒是有想过解决,但是搜了一下直接使用不太好用,我就放弃了。原创 2022-11-08 12:35:49 · 426 阅读 · 0 评论 -
并查集(Data Structure for Disjoint Sets)
为算法导论 v4 的 p520-545,p520-531 为算法内容本身,p531-541 为论证,p541-544 是题目,p544-545 则是章节笔记。Disjoint Sets 的曾用名为 Union Find,二者指的都是一个东西。这篇笔记主要是 p530-531 部分内容。算法方面,Disjoint Sets 主要应用是 Minimum Spanning Tree 中的 Kruskal 算法,当然,其应用范围也就包括各种动态连接的问题。原创 2022-11-06 04:02:30 · 274 阅读 · 0 评论 -
[数据结构] 单调栈
单调栈为栈中元素按照升序排列(递增栈)或降序排列(递减栈)的栈,通常可以用来寻找下一个最大/最小的题。,同样也满足下一个最大数字的需求,因此实现同样的弹栈、入栈操作。的下一个最大数字,在这里进行将1弹出,并将。这里其实都没有什么问题,一直是处在递增的状态。题目中需要找到的是下一个最大数字,数组依旧时。,这之后没有更大的数字了,因此将其直接压入栈中。,因此可以利用这一特性寻找下一个更大数。这一题就可以用递减栈来实现。,$3>1$,因此。递减栈中弹出的值,是碰到了。同样的思想可以应用到。...原创 2022-07-17 13:03:34 · 252 阅读 · 0 评论 -
前缀树 trie
简单的说就是一种空间换时间的数据结构,利用字符具有共同祖先的特性构建一个树,随后加速搜索速度。最近一次 除了刷题 碰到前缀树是在上 bioinformatics 的课时,主要是因为基因序列太长了,如果不使用 trie 进行搜索的话,搜索时间太长了,确实有些吃不消。它能够提速的方法很简单,参考以下案例:需求就是需要找到被检索的序列与蓝本中 match 的数量。如果是通过暴力解,那就是一条序列一条序列的进行比对,每一条检索的最差可能性是 O(m×n)O(m \times n)O(m×n) 或是 O(m′×n′)原创 2022-07-11 13:34:53 · 188 阅读 · 0 评论 -
[JavaScript刷题] 二叉树先序、中序、后序及层次四种遍历
包括前序、中序、后序、层序,前中后右两种写法,层序只用了 BFS。称之为前序是因为前序遍历时候, 在左子树和右子树之前:,以下图为例:前序遍历的顺序为:,其遍历过成为:从根部开始,此时访问的结点为 A输出的结果为:从左子树开始访问,此时访问的结点为 B输出的结果为:重复步骤,继续访问结点 B 的左子树输出的结果为:没有更多的左子树可以访问,现在开始访问右子树输出的结果为:当前左子树访问完毕,开始访问右子树输出的结果为:重复该步骤,完成当前树的访问对于树的遍历来说,递归地实现方法是最简单的,只要按照:这样的逻原创 2022-06-19 00:15:00 · 230 阅读 · 1 评论 -
链表及双向链表
这里暂时不谈环形链表(circular linked list)。链表是一个非常有用的结构,与数组不同,它并不要求数据结构的内存地址保存在一起,而是可以通过指针/引用的方式,获取下一个结点的位置,因此,链表结构可以将散落的数据串联在一起,更大程度的利用空间,减少数据的重排。链表结构如下:1234null 每一个节点包含当前的值,以及下一个结点的引用。结点代码如下: 链表本身的实现就比较简单了,下面实现一些比较基础的功能。首先是 LinkedList 的基础结构: 这里简单的实现了一个 功能,直接打印会出现原创 2022-06-17 00:15:00 · 403 阅读 · 0 评论 -
[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除
[JavaScript 刷题] 链表II,翻转链表,搜索,按值删除Node构造函数isEmpty插入实现头插尾插中间插入搜索删除头删尾删中间删除按值删除获取长度翻转链表其余有趣的实现 以单链表的功能为主。 Node class Node { constructor(value) { this.value = value; this.next = null; } } 构造函数 class LinkedList { constructor() { this.head = n原创 2021-09-18 22:27:01 · 275 阅读 · 1 评论 -
[JavaScript 刷题] 数据结构 - 树(tree)
[JavaScript 刷题] 数据结构 - 树(tree) ???? 树由 结点(nodex/vetrices) 与 边(edge) 相连接,具有 分支结构 与 层次 的数据类型。 树是一种特殊的、不存在闭环的 图(graph),每两个树的 结点 由一条 边 组成,并且 边 不存在方向。常见树的类型有: 二叉树 ❗️ 二叉搜索树 ❗️ AVL 树 红黑树 2-3 树 … 本篇主要就是一些定义类的内容。 树的主要属性 树具有以下几个特性: 根结点(root node) 没有父节点的结点,其他的结点都原创 2021-09-07 22:59:45 · 271 阅读 · 0 评论 -
[JavaScript 刷题] 数据结构 - 链表(Linked List)
[JavaScript 刷题] 数据结构 - 链表(Linked List) 链表是一种不需要占据连续物理空间去存储数据的有序结构。 它的结构由一个个的 结点(node) 组成,每个节点包含着当前存储的数据,以及下一个节点的地址,如: 图像资料来源于: https://static.javatpoint.com/interview/images/linkedlist.png/ 链表的结构对于底层的实践来说非常重要,一来它可以有效的使用碎片空间去存储数据,二来对于需要经常重写的数据,在链表中进行增删的效率原创 2021-09-07 05:53:15 · 307 阅读 · 1 评论 -
[JavaScript 刷题] 数组,字符串,ArrayList 的简单实现
[JavaScript 刷题] 数组,字符串,ArrayList 的简单实现 相比较其他语言,JavaScript 的 字符串 没有什么特别特殊的地方,它具有不可变性,每一次更新都会创建一个新的字符串,这点和大多数的编程语言一样。 数组 比起其他的编程语言来说,就有一些比较有趣的特性了:它是动态的,长度不固定,它不需要特殊的声明。这些特行比起 数组(array) 而言,其实更偏向于 数组列表(array list)。 但是,JavaScript 的数组也有两个比较特殊的功能: 它可以通过操作数组的 长度原创 2021-09-03 04:13:20 · 502 阅读 · 1 评论 -
JavaScript实现堆和栈
JavaScript实现堆和栈 没使用原生的函数,例如说 push, pop, shift,基本上都是用循环和直接改变长度完成的,算是对正在看的 JavaScript高级程序设计 的补充学习。 栈,stack 栈(Stack) 是 LIFO(Last in First out,后进先出) 或者 FILO(First in Last out,先进后出) 的一种数据结构。 栈的实现图: 实现代码,这是用 方法体写的,因为 JavaScript 的数组可以通过直接操作 length 进行长度的修改,所以 p原创 2021-04-29 02:22:32 · 579 阅读 · 2 评论