
计算机数据结构
文章平均质量分 68
Where~Where~
这个作者很懒,什么都没留下…
展开
-
一分钟教你弄懂KMP算法
KMP算法主要应用与字符串的比较,有一个主串,有一个子串,我们要通过一种方式来查看子串是否为主串的一部分。我们通常的想法是:主串和子串左对齐,一个字符一个字符进行比较,如果其中有个字符不匹配的话,那么主串不同,子串向右移动一个范围。这样不断循环,直到找到一个完整的匹配的子串。但如果这样做的话,无疑时间复杂度是最高的,时间复杂度是mn。那有没有更快的方式呢?KMP算法的特点就是一个快速,能够在这种情况下快速地找到一个匹配的子串。原创 2023-12-07 17:30:54 · 931 阅读 · 0 评论 -
计算机应该注意的一些点
在计算查找不成功的平均长度时,只要是很指针比较,那么就不算做是一次比较,如果是和空的关键字比较,那么就算做是一次比较。原创 2022-11-30 10:45:13 · 1851 阅读 · 1 评论 -
数据结构的查找
(因为父亲节点少了一个,没有人上去补充,所以从分支数减少1,故当然要合并),由于父亲节点少了一个,所以需要检查父亲节点中的元素情况是否满足最小的元素要求,如果不满足的话,显然要将父亲节点和其父亲节点的父亲节点进行合并,直到满足要求为止。在平衡二叉树的查找,插入,删除,建立四种基本操作中,除了查找之外,其余的三种操作在基本的二叉排序树的基础之上还要加上一个平衡调整,使得每一个节点的平衡因子的绝对值为1,除了平衡调整,其余的操作都是和二叉排序树一样的。那么也是类似的操作,放在左边就好了。原创 2022-11-25 01:39:05 · 1147 阅读 · 0 评论 -
数据结构排序
2. 熟练掌握堆排序、二路归并排序、基数排序、k路归并排序的执行过程,以及了解引入置换-选择排序、最佳归并树和败者树的目的。1. 首先记住上述排序中的时间复杂度、空间复杂度和具体的执行步骤和各自执行过程中的特点(时间复杂度分最好和最坏的情况)外部排序:K路归并排序,置换-选择排序,最佳归并树,败者树。插入排序:直接插入排序,折半插入排序,希尔排序。选择排序:简单选择排序,堆排序。交换排序:冒泡排序,快速排序。原创 2022-11-23 01:10:08 · 184 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历、最小生成树、最短路径、拓扑排序、关键路径
弗洛伊德算法的原理有点复杂:首先他要求得是所有任意两条边之间的最短路径,因为是有向图,所有有向路径有两倍的数量,比如0-1,1-0这样的,那么有向最短路径之间可能会有中间节点,那那些中间节点会使得上述的有向路径距离最短呢,所以就需要依次的将各个顶点当做是中间节点,对这些有向路径进行迭代,看看那个中间节点造成的有向路径是最短的,这样就好了。AOV网(有向),这个是活动在顶点上的网,即顶点表示的是活动,而边界表示的是活动的次序。的,有两种算法,一种是Prime算法,一种是kruskal算法,两者的区别在于,原创 2022-11-22 01:04:50 · 2538 阅读 · 0 评论 -
树和二叉树的存储结构、二叉树的先、中、后遍历的递归和非递归、层次遍历总结,有向图和无向图的存储结构。
也借鉴了邻接表的方式,但邻接表的方式主要是为了方便树能将很多孩子节点挂在链上,但是二叉树只有两个孩子节点,而且有左右孩子之分,所以可以设置一个结构体,中间是data,左边是左孩子指针,右边是有孩子指针,按照二叉树的形状排列就好了。首先将根节点压入队列中,然后出队访问,然后将这个节点的左右孩子节点都压入队列中,先左后右(因为队列是先进先出,所以左孩子可以先出来),然后就是出队左孩子节点,访问,然后接着循环就好了。而边结构体数组的out是当节点结构体使用的是out的时候,指向被节点结构体指向的边结构体的,原创 2022-11-20 22:58:52 · 709 阅读 · 0 评论 -
二叉树遍历本质
初次学习上述概念的时候,觉得非常的晦涩难懂,因为无论是网上还是书本上对于上述遍历的解释都是先访问某某节点,后访问某某节点,后来发现这其实是一个递归的概念,这样的概念对于一个初学者来说非常的不友好,非常难理解其中的本质。所以二叉树的深度优先遍历就是在一堆围绕着二叉树中的箭头中,找到那几个第一次,第二次,第三次访问的节点,将其顺序写下来就好了。这样的理解可能比递归的理解要透彻的多。大致是这样的:二叉树的遍历的过程其实可以想象成包围了整个二叉树的一堆箭头,这些箭头从外围包涵了整棵树。原创 2022-11-19 15:52:24 · 462 阅读 · 0 评论