从0开始的算法(数据结构和算法)基础
文章平均质量分 94
对于没有基础的比较友好,比起书本上的解释更加简单一点,还有一些实际的例子,对这些算法和数据结构有更深的体验,拉近和知识的距离
Solidao
Java后端开发者,备战考研中。
展开
-
从0开始的算法(数据结构和算法)基础(十一)
回溯算法,根据字面意思来理解这个算法是将每一步的操作可以进行回溯,实际上是对这个每一步的操作进行记录,确保可以返回上一步的操作,可能是对回溯操作之前的做一个复现,也有可能是可操作的回退,这个观点是错误的通过尝试不同的选择并记录当前状态,当遇到不符合要求的解时,能够回溯到之前的状态进行新的尝试,备份回退。特别适用于解决组合、排列、子集等问题。原创 2024-09-12 20:36:44 · 1047 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(十)
分治的字面意思是分而治之,将问题进行分化,从而进行处理,最后将结果进行合并。尽量的将问题分的不可以再分,分到和操作系统里面的原语是一样的,用较为多空间进行多线程的并行,节省时间运行。递归调用可能会导致较大的递归开销,特别是在递归深度较大的情况下,可能会导致栈溢出。在某些情况下,分治方法可能会导致对同一子问题的重复计算,从而降低效率。例如,在动态规划问题中,使用简单的分治方法可能会导致大量重复计算。原创 2024-09-12 00:24:20 · 902 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(八)
说了这么久的数据结构,理论性比较强,下面我们来进入算法部分,运用之前学的数据结构来实现算法。今天的主体部分是排序,难度不大。原创 2024-08-14 15:29:31 · 991 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(九)
二分查找作为一种高效的搜索算法,在实际的软件工程中有着广泛的应用,特别是在需要快速查找的场景中。要么用时间换取空间,用空间换取时间,还是要看实际情况的,不过现在的情况就是空间便宜,时间成本贵追求效率,大多数时候都牺牲空间。:在用户体验至上的应用中,快速响应是关键,二分查找可以帮助构建高效的搜索功能,使得应用程序响应更快。:在需要频繁查找的场景中,二分查找可以显著减少查找时间,尤其是当数据量非常大且数据是有序的情况下。:作为许多算法的基础,二分查找常用于解决更复杂的问题,例如在数据结构如树、图中进行搜索。原创 2024-08-19 10:24:37 · 844 阅读 · 3 评论 -
从0开始的算法(数据结构和算法)基础(六)
二叉树什么是二叉树 二叉树是一种非线性数据结构(层次关系结构),代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。 首先要明白什么是树,面向对象编程学过吧(c++、Java等),学过Java的更加符合一点,因为取消了多继承,父类和子类的管理图,画出来就是树状的。从一个根节点开始,逐级向下扩展的层次关系。部分家庭还会有家谱,像一原创 2024-08-06 10:02:22 · 1075 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(二)
快速排序在每次划分操作中,都会将数组分成两部分,平均情况下这需要对数次的划分操作,每次划分需要线性时间来处理,所以平均时间复杂度是 (O(n log n))。常数空间复杂度表示算法所需的额外空间不随输入规模的变化而变化。有时,算法的空间复杂度可能不仅仅是 (O(1)) 或 (O(n)),还可能是其他形式的复杂度。此处,每次迭代都将搜索范围减半,因此基本操作的执行次数是对数级别的,时间复杂度是 (O(log n))。二分查找算法的空间复杂度通常是 (O(\log n)),因为递归调用栈的深度是对数级别的。原创 2024-07-25 10:59:37 · 905 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(三)
循环的就是成环形的没有太大区别就不做赘述了,我们进一步完善了链表的操作,包括插入、删除和查找节点的功能,并为每种类型的链表提供了相应的测试代码。连续就是一片连续的空间,分散就是将内存分散来存储,两个在时间和空间上面有区别,一个通过连续的方式减少了在检索花费的时间,如数组一类的,索引本质上是内存地址的偏移量。内存管理是一个好的习惯,保证分配空间临时要回收,虽然储存现在比较便宜,很多的软件并不注意,导致缓存垃圾太大了,这种东西越大,发生问题的可能性就越大。单向链表的节点数据是不可变的,因此通常不需要更新操作。原创 2024-07-29 10:46:11 · 1000 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(七)
图是一种非线性数据结构,由顶点(也称为节点)和边(连接顶点的线)组成。在图论中,边的添加和删除、顶点的添加和删除是基本的操作。该矩阵的大小为 ( V \times V ),其中 ( V ) 是图中顶点的数量。他们之间的相关性没有那么高,链表的线性关系,树状图的派生关系。邻接矩阵是一个二维数组,其中的元素表示图中顶点之间的连接情况。表示从顶点 ( i ) 到顶点 ( j ) 的边的权重(若无边则为0或无穷大)。:传入 ( V ) 个顶点,初始化长度为 ( V ) 的顶点列表。时间复杂度为 ( O(1) )。原创 2024-08-08 15:05:48 · 763 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(四)
首先我们需要定义一个节点类,表示链表中的每个节点。每个节点包含值和指向下一个节点的指针。原创 2024-07-30 10:19:42 · 967 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(一)
根据计算机科学的标准定义,算法(Algorithm)是一系列定义明确的操作步骤,用于解决特定的计算问题。这个定义源自《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs)等经典计算机科学教材,强调了算法的精确性、有序性和有限性。原创 2024-07-24 11:24:10 · 765 阅读 · 0 评论 -
从0开始的算法(数据结构和算法)基础(五)
哈希表(Hash Table)是一种数据结构,用于快速存储和查找数据。它通过将键(key)映射到数组中的索引位置来实现高效的查找、插入和删除操作。乍一看不明白很正常,如果你学过数据库就会觉得很熟悉,哈希表的功能拓展一下不就是数据库中的表。一维的哈希,组成二维的表,二维表组成关系数据库。而且数据库里面也有基于这个数据结构的哈希索引。再看一下sql语句,是不是两个重合了。原创 2024-08-02 17:14:33 · 672 阅读 · 0 评论