攻城狮·建哥
全栈开发工程师以及IT教育从业者。
展开
-
【数据结构】动态规划:如何通过最优子结构,完成复杂问题求解
那么,什么是多轮决策呢?其实多轮决策的每一轮都可以看作是一个子问题。原创 2022-08-28 08:53:13 · 490 阅读 · 0 评论 -
【数据结构】排序:经典排序算法原理解析与优劣对比
4 种常见的排序算法,包括冒泡排序、插入排序、归并排序以及快速排序。这些经典算法没有绝对的好和坏,它们各有利弊。**如果对数据规模比较小的数据进行排序,可以选择时间复杂度为 O(nn) 的排序算法。**因为当数据规模小的时候,时间复杂度 O(nlogn) 和 O(nn) 的区别很小,它们之间仅仅相差几十毫秒,因此对实际的性能影响并不大。但对数据规模比较大的数据进行排序,就需要选择时间复杂度为 O(nlogn) 的排序算法了。...原创 2022-08-28 08:52:45 · 1090 阅读 · 0 评论 -
【数据结构】分治:如何利用分治法完成数据查找
分治法经常会用在海量数据处理中。这也是它显著区别于遍历查找方法的优势。在面对陌生问题时,需要注意原问题的数据是否有序,预期的时间复杂度是否带有 logn 项,是否可以通过小问题的答案合并出原问题的答案。如果这些先决条件都满足,你就应该第一时间想到分治法。......原创 2022-08-28 08:52:08 · 692 阅读 · 0 评论 -
【数据结构】递归:如何利用递归求解汉诺塔问题
递归的核心思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。递归的应用非常广泛,之后我们要讲的很多数据结构和算法的编码实现都要用到递归,例如分治策略、快速排序等等。...原创 2022-08-27 20:21:44 · 2089 阅读 · 0 评论 -
【数据结构】哈希表:如何利用好高效率查找的“利器”
哈希表在我们平时的数据处理操作中有着很多独特的优点,不论哈希表中有多少数据,查找、插入、删除只需要接近常量的时间,即 O(1)的时间级。实际上,这只需要几条机器指令。哈希表运算得非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录通常使用哈希表(例如拼写检查器),哈希表的速度明显比树快,树的操作通常需要 O(n) 的时间级。哈希表不仅速度快,编程实现也相对容易。如果不需要有序遍历数据,并且可以提前预测数据量的大小。那么哈希表在速度和易用性方面是无与伦比的。...原创 2022-08-27 20:20:40 · 951 阅读 · 0 评论 -
【数据结构】树和二叉树:分支关系与层次结构下,如何有效实现增删查
要想利用二叉树实现增删查操作,你需要熟练掌握二叉树的三种遍历方式。遍历的时间复杂度是 O(n)。有了遍历方式之后,你可以完成在指定位置的数据增删操作。增删操作的时间复杂度都是 O(1)。对于查找操作,如果是普通二叉树,则查找的时间复杂度和遍历一样,都是 O(n)。如果是二叉查找树,则可以在 O(logn) 的时间复杂度内完成查找动作。树结构在存在“一对多”的数据关系中,可被高频使用,这也是它区别于链表系列数据结构的关键点。...原创 2022-08-27 20:19:32 · 222 阅读 · 0 评论 -
【数据结构】字符串:字符串匹配算法
字符串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。在线性表的基本操作中,大多以“单个元素”作为操作对象;在字符串的基本操作中,通常以“串的整体”作为操作对象;字符串的增删操作和数组很像,复杂度也与之一样。但字符串的查找操作就复杂多了,它是参加面试、笔试常常被考察的内容。...原创 2022-08-27 20:18:10 · 493 阅读 · 0 评论 -
【数据结构】数组:如何实现基于索引的查找
由于数组中没有栈和队列那样对于线性表的限制,所以增删查操作变得灵活很多,代码实现的方法也更多样,所以我们要根据实际需求选择适合的方法进行操作。在实际操作中,我们还要注意根据数组的优缺点合理区分数组和链表的使用。数组定义简单,访问方便,但在数组中所有元素类型必须相同,数组的最大长度必须在定义时给出,数组使用的内存空间必须连续等。相对而言,数组更适合在数据数量确定,即较少甚至不需要使用新增数据、删除数据操作的场景下使用,这样就有效地规避了数组天然的劣势。...原创 2022-08-27 20:16:52 · 810 阅读 · 0 评论 -
【数据结构】队列:先进先出的线性表,如何实现增删查
了解了队列的基本原理和队列对于数据的增删查的操作。可以发现,队列与栈的特性非常相似,队列也继承了线性表的优点与不足,是加了限制的线性表,队列的增和删的操作只能在这个线性表的头和尾进行。在时间复杂度上,循环队列和链式队列的新增、删除操作都为 O(1)。而在查找操作中,队列和线性表一样只能通过全局遍历的方式进行,也就是需要 O(n) 的时间复杂度。在空间性能方面,循环队列必须有一个固定的长度,因此存在存储元素数量和空间的浪费问题,而链式队列不存在这种问题,所以在空间上,链式队列更为灵活一些。...原创 2022-08-27 20:15:19 · 389 阅读 · 0 评论 -
【数据结构】栈:后进先出的线性表,如何实现增删查
栈继承了线性表的优点与不足,是个限制版的线性表。限制的功能是,只允许数据从栈顶进出,这也就是栈后进先出的性质。不管是顺序栈还是链式栈,它们对于数据的新增操作和删除操作的时间复杂度都是 O(1)。而在查找操作中,栈和线性表一样只能通过全局遍历的方式进行,也就是需要 O(n) 的时间复杂度。栈具有后进先出的特性,当你面对的问题需要高频使用新增、删除操作,且新增和删除操作的数据执行顺序具备后来居上的相反关系时,栈就是个不错的选择。例如,浏览器的前进和后退,括号匹配等问题。...原创 2022-08-27 20:12:48 · 363 阅读 · 0 评论 -
【数据结构】如何完成线性表结构下的增删查
线性表是 n 个数据元素的有限序列,最常用的是链式表达,通常也叫作线性链表或者链表。在链表中存储的数据元素也叫作结点,一个结点存储的就是一条数据记录。第一是具体的数据值;第二是指向下一个结点的指针。在链表的最前面,通常会有个头指针用来指向第一个结点。对于链表的最后一个结点,由于在它之后没有下一个结点,因此它的指针是个空指针。链表结构,和小朋友手拉手站成一排的场景是非常相似的。例如,你需要处理的数据集是 9个同学考试的得分。...原创 2022-08-27 19:53:30 · 559 阅读 · 0 评论 -
【数据结构】数据处理的基本操作——增删查
数据处理的基本操作只有 3 个,分别是增、删、查。其中,增和删又可以细分为在数据结构中间的增和删,以及在数据结构最后的增和删。区别就在于原数据的位置是否发生改变。查找又可以细分为按照位置条件的查找和按照数据数值特征的查找。几乎所有的数据处理,都是这些基本操作的组合和叠加。...原创 2022-08-27 19:50:53 · 1032 阅读 · 0 评论 -
【数据结构】如何衡量程序运行的效率——时间复杂度和空间复杂度
复杂度通常包括时间复杂度和空间复杂度。在具体计算复杂度时需要注意以下几点。它与具体的常系数无关,O(n) 和 O(2n) 表示的是同样的复杂度。复杂度相加的时候,选择高者作为结果,也就是说 O(n²)+O(n) 和 O(n²) 表示的是同样的复杂度。O(1) 也是表示一个特殊复杂度,即任务与算例个数 n 无关。复杂度细分为时间复杂度和空间复杂度,其中时间复杂度与代码的结构设计高度相关;空间复杂度与代码中数据结构的选择高度相关。...原创 2022-08-27 19:44:08 · 912 阅读 · 0 评论 -
【数据结构】----- 将时间复杂度转换成空间复杂度
将时间复杂度转换成空间复杂度原创 2022-08-26 23:12:45 · 443 阅读 · 0 评论