数据结构基础
文章平均质量分 83
对于数据结构这种基础内容,在构建其知识体系时要避免自己再造轮子,需要高一点层次整体上去理解它(格局要大一点,不要盯着代码),要了解算法思想,性能及适用场景,用一些工具和别人梳理的结果帮助自己构建知识体系等。
毕设王同学
毕业设计、源码、论文、开发部署
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构基础】图 - AOE & 关键路径
我们可以由事件的最早发生时间和事件的最晚发生时间求出活动的最早和最晚开工时间。事件最晚发生时间ltv(lastest time of vertex),即顶点Vk的最晚发生时间,也就是每个顶点对应的事件最晚需要开始的事件,超出此事件将会延误整个工期。AOE网络(Activity On Edge): 有向图,用顶点表示事件,用弧表示活动,用权值表示活动消耗时间(带权的有向无环图)活动的最晚开工时间lte(lastest time if edge),即弧的最晚发生时间,也就是不推迟工期的最晚开工时间。原创 2023-02-07 08:30:00 · 850 阅读 · 0 评论 -
【数据结构基础】图 - 拓扑排序(Topological sort)
对于任何有向图而言,其拓扑排序为其所有结点的一个线性排序(对于同一个有向图而言可能存在多个这样的结点排序)。该排序满足这样的条件——对于图中的任意两个结点u和v,若存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。例如一个有向无环图如下:结点1必须在结点2、3之前结点2必须在结点3、4之前结点3必须在结点4、5之前结点4必须在结点5之前则一个满足条件的拓扑排序为[1, 2, 3, 4, 5]。原创 2023-02-07 07:45:00 · 2676 阅读 · 0 评论 -
【数据结构基础】图 - 最短路径(Dijkstra & Frolyd)
最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。最短路径不一定是经过边最少的路径,但在这些最短路径中,长度最短的那一条路径上只有一条边,且它的权值在从源点出发的所有边的权值最小。从图中某一顶点(称为源点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边上的权值总和达到最小,例: 公交查询系统。路径长度最短的最短路径的特点:在这条路径上,必定只含一条弧,并且这条弧的权值最小。原创 2023-02-06 20:42:10 · 801 阅读 · 0 评论 -
【数据结构基础】图 - 最小生成树(Prim & Kruskal)
因为Kruskal涉及大量对边的操作,所以它适用于稀疏图;普通的prim算法适用于稠密图,但堆优化的prim算法更适用于稀疏图,因为其时间复杂度是由边的数量决定的。原创 2023-02-06 20:34:14 · 531 阅读 · 0 评论 -
【数据结构基础】图 - 遍历(BFS & DFS)
它的思想: 假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归的过程。广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。原创 2023-02-06 20:28:47 · 2377 阅读 · 0 评论 -
【数据结构基础】图 - 基础和Overview
图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。原创 2023-02-03 10:03:56 · 1808 阅读 · 0 评论 -
【数据结构基础】树 - 前缀树(Trie Tree)
在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。原创 2023-02-03 09:44:47 · 5457 阅读 · 0 评论 -
【数据结构基础】树 - 哈夫曼树(Huffman Tree)
路径与路径长度: 从树中一个节点到另一个节点之间的分支构成了两个节点之间的路径,路径上的分支数目称作路径长度。树的带权路径长度: 树的带权路径长度为所有叶子节点的带权路径长度之和,称为WPL。在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;从根节点到每一个叶子节点的路径上,左分支记为0,右分支记为1,将这些0与1连起来即为叶子节点的哈夫曼编码。节点的权: 将树中的节点赋予一个某种含义的数值作为该节点的权值,该值称为节点的权;原创 2023-02-02 10:01:27 · 1781 阅读 · 0 评论 -
【数据结构基础】树 - 红黑树(R-B Tree)
我们在上一篇博客认识到了平衡二叉树(AVLTree),了解到AVL树的性质,其实平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小. 这个时候就有人开始思考,并且提出了红黑树的理论,那么红黑树到底比AVL树好在哪里?对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点。如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点)原创 2023-02-02 09:56:20 · 246 阅读 · 0 评论 -
【数据结构基础】树 - 平衡二叉树(AVL)
平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。原创 2023-02-01 10:41:07 · 4725 阅读 · 1 评论 -
【数据结构基础】树 - 二叉搜索树(BST)
本文主要介绍 二叉树中最基本的二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。原创 2023-02-01 10:23:38 · 1370 阅读 · 0 评论 -
【数据结构基础】树 - 基础和Overview
我们知道,实际应用当中,我们经常使用的是查找和排序操作,这在我们的各种管理系统、数据库系统、操作系统等当中,十分常用。数组的下标寻址十分迅速,但计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;而且无序数组的查找最坏情况需要遍历整个数组;后来人们提出了二分查找,二分查找要求数组的构造一定有序,二分法查找解决了普通数组查找复杂度过高的问题。任何一种数组无法解决的问题就是插入、删除操作比较复杂,因此,在一个增删查改比较频繁的数据结构中,数组不会被优先考虑。原创 2023-01-31 08:30:00 · 484 阅读 · 0 评论 -
【数据结构基础】线性表 - 栈和队列
而队列的默认插入顺序是队列尾部,因此在将 x 插入队列尾部之后,需要让除了 x 之外的所有元素出队列,再入队列。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。对于实现最小值队列问题,可以先将队列使用栈来实现,然后就将问题转换为最小值栈,这个问题出现在 编程之美: 3.7。在遍历数组时用栈把数组中的数存起来,如果当前遍历的数比栈顶元素来的大,说明栈顶元素的下一个比它大的数就是当前元素。使用数组实现的叫静态队列。原创 2023-01-31 08:15:00 · 283 阅读 · 0 评论 -
【数据结构基础】线性表(散列)- 哈希表
用 HashMap 存储数组元素和索引的映射,在访问到 nums[i] 时,判断 HashMap 中是否存在 target - nums[i],如果存在说明 target - nums[i] 所在的索引和 i 就是要找的两个数。,利用 HashMap 就可以存储精简后的 url 到原始 url 的映射,使得不仅可以显示简化的 url,也可以根据简化的 url 得到原始 url 从而定位到正确的资源。和谐序列中最大数和最小数只差正好为 1,应该注意的是序列的元素不一定是数组的连续元素。原创 2023-01-30 08:30:00 · 721 阅读 · 1 评论 -
【数据结构基础】线性表 - 链表
当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针访问到链表尾部时,令它从链表 A 的头部开始访问链表 A。设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。循环链表 能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点从而实现循环。链表是空节点,或者有一个值和一个指向下一个链表的指针,因此很多链表问题可以用递归来处理。原创 2023-01-30 08:00:00 · 312 阅读 · 0 评论 -
【数据结构基础】线性表 - 数组和矩阵
题目描述: S[i] 表示一个集合,集合的第一个元素是 A[i],第二个元素是 A[A[i]],如此嵌套下去。题目描述: 数组的度定义为元素出现的最高频率,例如上面的数组度为 3。要求找到一个最小的子数组,这个子数组的度和原数组一样。题目描述: 数组元素为 1~n 的整数,要求构建数组,使得相邻元素的差值不相同的个数为 k。一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数。主要思想是通过交换数组元素,使得数组上的元素在正确的位置上。,寻找所有重复的元素。原创 2023-01-29 15:37:55 · 250 阅读 · 0 评论
分享