熬夜想瑞瑞
努力努力再努力
展开
-
第十三章:数据结构-图的进阶(拓扑排序,最小生成树,加权无/有向图,Prim+kruskal算法)
在实际生活中,很多应用相关的图都是有方向性的,最直观的就是网络,可以从A页面通过链接跳转到B页面,那么a和b连接的方向是a->b,但不能说是b->a,此时我们就需要使用有向图来解决这一类问题,它和我们之前学习的无向图,最大的区别就在于连接是具有方向的,在代码的处理上也会有很大的不同。原创 2023-02-27 14:00:43 · 908 阅读 · 0 评论 -
第十二章:数据结构-图的入门(图的定义、无向图、图的搜索、路径查找)
在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。地图: 我们生活中经常使用的地图,基本上是由城市以及连接城市的道路组成,如果我们把城市看做是一个一个的点,把道路看做是一条一条的连接,那么地图就是我们将要学习的图这种数据结构。原创 2023-02-21 15:58:23 · 174 阅读 · 0 评论 -
第十一章:数据结构-并查集以及应用
并查集是一种树型的数据结构 ,并查集可以高效地进行并查集也是一种树型结构,但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样,这种树的要求比较简单:1. 每个元素都唯一的对应一个结点;2. 每一组数据中的多个元素都在同一颗树中;3. 一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系;4. 元素在树中并没有子父级关系的硬性要求;- 查询元素p和元素q是否属于同一组- 合并元素p和元素q所在的组原创 2023-02-02 13:44:25 · 144 阅读 · 0 评论 -
第十章:数据结构-平衡树、红黑树
之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕。原创 2023-02-01 14:26:30 · 103 阅读 · 0 评论 -
第九章:数据结构-队列(最大优先、最小优先、索引优先)
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列来完成这种需求,优先队列。原创 2023-01-31 11:18:29 · 220 阅读 · 0 评论 -
第八章:数据结构(堆的定义、实现以及排序)
堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。原创 2023-01-29 10:09:49 · 124 阅读 · 0 评论 -
第七章:数据结构(二叉树入门、遍历以及折纸问题)
之前我们实现的符号表中,不难看出,符号表的增删查操作,随着元素个数N的增多,其耗时也是线性增多的,时间复杂度都是O(n),为了提高运算效率,接下来我们学习树这种数据结构。树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。 树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。原创 2023-01-17 17:45:40 · 90 阅读 · 0 评论 -
第六章:数据结构(无序、有序符号表)
符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。原创 2023-01-17 17:39:26 · 128 阅读 · 0 评论 -
第五章:线性表、链表、栈以及队列
我们把生活中的栈的概念引入到计算机中,就是供数据休息的地方,它是一种数据结构,数据既可以进入到栈中,又可以从栈中出去。 栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。原创 2023-01-16 09:19:32 · 164 阅读 · 0 评论 -
第四章:高级排序(希尔、归并、快速排序以及排序的稳定性)
之前我们学习过基础排序,包括冒泡排序,选择排序还有插入排序,并且对他们在最坏情况下的时间复杂度做了分析,发现都是O(N^2),而平方阶通过我们之前学习算法分析我们知道,随着输入规模的增大,时间成本将急剧上升,所以这些基本排序方法不能处理更大规模的问题,接下来我们学习一些高级的排序算法,争取降低算法的时间复杂度最高阶次幂。原创 2023-01-14 10:12:02 · 353 阅读 · 0 评论 -
第三章:简单排序算法(冒泡排序、选择排序、插入排序)
在我们的程序中,排序是非常常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则进行排序。比如查询一些订单,按照订单的日期进行排序;再比如查询一些商品,按照商品的价格进行排序等等。所以,接下来我们要学习一些常见的排序算法。在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List,Set,Map等等,都是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装到某个类中,那如果是这样,在我们写java代码之前,就需要先进行APi的设计。原创 2023-01-13 17:54:00 · 100 阅读 · 0 评论 -
第一、二章:大学课程你真的理解嘛?数据结构与算法时间、空间复杂度分析
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。原创 2023-01-13 11:31:10 · 117 阅读 · 0 评论