📝 数据结构和算法教程
4065篇技术文档📅  最后修改于: 2021-01-11 06:45:15        🧑  作者: Mango
队列是一种抽象的数据结构,有点类似于堆栈。与堆栈不同,队列的两端都打开。一端始终用于插入数据(入队),另一端用于删除数据(出队)。队列遵循先进先出的方法,即首先存储的数据项将首先被访问。队列的真实示例可以是单车道单向道路,车辆首先进入,然后首先离开。在售票窗口和公交车站的队列中,可以看到更多实际示例。队列表示现在我们知道在队列中,出于不同原因访问两端。下面给出的下图试图将队列表示解释为数据结构-与...
📅  最后修改于: 2021-01-11 10:18:48        🧑  作者: Mango
二进制搜索是一种运行时间复杂度为O(log n)的快速搜索算法。这种搜索算法基于分而治之的原理。为了使该算法正常工作,数据收集应采用排序形式。二进制搜索通过比较集合中最中间的项来查找特定项。如果发生匹配,则返回项目的索引。如果中间项目大于该项目,则在中间项目左侧的子数组中搜索该项目。否则,将在中间项目右侧的子数组中搜索该项目。该过程也将继续在子阵列上进行,直到子阵列的大小减小到零为止。二进制搜索如...
📅  最后修改于: 2021-01-11 10:19:15        🧑  作者: Mango
插值搜索是二进制搜索的改进变体。该搜索算法在所需值的探测位置上起作用。为了使该算法正常工作,数据收集应采用排序形式并平均分配。与线性搜索相比,二进制搜索具有时间复杂性的巨大优势。线性搜索的最坏情况复杂度为Ο(n),而二进制搜索的复杂度为Ο(log n)。在某些情况下,可能会事先知道目标数据的位置。例如,在电话号码簿的情况下,如果我们要搜索Morphius的电话号码。在这里,线性搜索甚至二进制搜索似...
📅  最后修改于: 2021-01-11 10:19:58        🧑  作者: Mango
哈希表是一种以关联方式存储数据的数据结构。在哈希表中,数据以数组格式存储,其中每个数据值都有其自己的唯一索引值。如果我们知道所需数据的索引,则数据访问将变得非常快。因此,它成为一种数据结构,其中插入和搜索操作非常快,而与数据的大小无关。哈希表使用数组作为存储介质,并使用哈希技术生成要在其中插入元素或从中定位元素的索引。散列散列是一种将键值范围转换为数组索引范围的技术。我们将使用模运算符来获取一系列...
📅  最后修改于: 2021-01-11 10:20:32        🧑  作者: Mango
排序是指以特定格式排列数据。排序算法指定了按特定顺序排列数据的方式。最常见的顺序是按数字顺序或字典顺序。排序的重要性在于,如果以排序方式存储数据,则可以将数据搜索优化到很高的水平。排序还用于以更具可读性的格式表示数据。以下是现实场景中排序的一些示例-电话簿-电话簿存储按姓名排序的人员的电话号码,以便可以轻松搜索姓名。字典-字典按字母顺序存储单词,因此搜索任何单词变得容易。就地排序和非就地排序排序算...
📅  最后修改于: 2021-01-11 10:21:07        🧑  作者: Mango
气泡排序是一种简单的排序算法。该排序算法是基于比较的算法,其中比较每对相邻元素,如果元素顺序不正确,则将其交换。该算法不适用于大型数据集,因为其平均和最坏情况下的复杂度为Ο(n2),其中n是项数。气泡排序如何工作?我们以一个未排序的数组为例。气泡排序需要〇(n2)时间,因此我们将其保持简短而精确。冒泡排序从头两个元素开始,然后比较它们以检查哪个更大。在这种情况下,值33大于14,因此它已经在排序的...
📅  最后修改于: 2021-01-11 10:22:05        🧑  作者: Mango
这是基于就地比较的排序算法。在此,将始终维护一个子列表。例如,数组的下部保持被排序。要“插入”此排序子列表中的元素,必须找到其适当的位置,然后将其插入到该位置。因此,名称为insert sort。依次搜索该数组,然后将未排序的项目移动并插入到已排序的子列表中(在同一数组中)。该算法不适用于大型数据集,因为其平均和最坏情况下的复杂度均为〇(n2),其中n是项数。插入排序如何工作?我们以一个未排序的数...
📅  最后修改于: 2021-01-11 10:22:42        🧑  作者: Mango
选择排序是一种简单的排序算法。此排序算法是一种基于就地比较的算法,其中,列表分为两部分,左端为已排序部分,右端为未排序部分。最初,已排序部分为空,未排序部分为整个列表。从未排序的数组中选择最小的元素,并与最左边的元素交换,该元素成为排序数组的一部分。此过程继续将未排序的数组边界向右移动一个元素。该算法不适用于大型数据集,因为其平均复杂度和最坏情况复杂度均为〇(n2),其中n是项数。选择排序如何工作...
📅  最后修改于: 2021-01-11 10:23:14        🧑  作者: Mango
合并排序是一种基于分而治之的排序技术。最坏情况下的时间复杂度为〇(n log n),它是最受人尊敬的算法之一。合并排序首先将数组分成相等的两半,然后以排序的方式将它们合并。合并排序如何工作?为了理解合并排序,我们采用未排序的数组,如下所示:我们知道,除非获得原子值,否则合并排序首先将整个数组迭代地分为相等的两半。我们在这里看到一个由8个项目组成的数组分为两个大小为4的数组。这不会更改原件中项目出现...
📅  最后修改于: 2021-01-11 10:23:47        🧑  作者: Mango
Shell排序是一种高效的排序算法,它基于插入排序算法。如果较小的值在最右端并且必须移到最左端,则该算法避免了在插入排序的情况下发生大的移位。该算法对广泛分布的元素使用插入排序,首先对它们进行排序,然后对间距较小的元素进行排序。该间隔称为间隔。该间隔是根据Knuth的公式计算的-克努斯公式该算法对中型数据集非常有效,因为该算法的平均复杂度和最坏情况下的复杂度取决于间隙序列,众所周知的间隙序列为Ο(...
📅  最后修改于: 2021-01-11 10:24:10        🧑  作者: Mango
快速排序是一种高效的排序算法,它基于将数据数组划分为较小的数组。一个大数组被划分为两个数组,其中一个数组的值小于指定值(例如,枢轴),基于该数组进行分区,另一个数组的值大于该枢轴值。Quicksort对数组进行分区,然后递归调用两次以对两个结果子数组进行排序。该算法对于大型数据集非常有效,因为其平均和最坏情况下的复杂度分别为O(nLogn)和image.png(n2)。快速排序分区下面的动画表示法...
📅  最后修改于: 2021-01-11 10:24:38        🧑  作者: Mango
图形是一组对象的图形表示,其中一些对象对通过链接连接。相互连接的对象由称为顶点的点表示,连接这些顶点的链接称为边。形式上,图是一对集合(V,E),其中V是顶点集合,E是连接顶点对的边集合。看一下下图-在上图中,V = {a,b,c,d,e}E = {ab,ac,bd,cd,de}图形数据结构数学图可以用数据结构表示。我们可以使用顶点数组和边缘二维数组来表示图。在继续进行之前,让我们熟悉一些重要术语...
📅  最后修改于: 2021-01-11 10:25:02        🧑  作者: Mango
深度优先搜索(DFS)算法以深度运动方式遍历图形,并在任何迭代出现死角时使用堆栈记住要获取的下一个顶点以开始搜索。如上面的示例所示,DFS算法首先从S到A到D到G到E到B,然后到F,最后到C。它采用以下规则。规则1-访问相邻的未访问顶点。将其标记为已访问。显示它。将其推入堆栈。规则2-如果未找到相邻的顶点,则从堆栈中弹出一个顶点。 (它将弹出堆栈中没有相邻顶点的所有顶点。)规则3-重复规则1和规则...
📅  最后修改于: 2021-01-11 10:25:26        🧑  作者: Mango
广度优先搜索(BFS)算法以广度运动遍历图形,并在任何迭代出现死角时使用队列记住要获取的下一个顶点来开始搜索。如以上示例所示,BFS算法首先从A到B遍历到E到F,然后遍历C和G,最后遍历到D。它采用以下规则。规则1-访问相邻的未访问顶点。将其标记为已访问。显示它。将其插入队列。规则2-如果未找到相邻的顶点,请从队列中删除第一个顶点。规则3-重复规则1和规则2,直到队列为空。StepTraversa...
📅  最后修改于: 2021-01-11 10:26:12        🧑  作者: Mango
树表示通过边连接的节点。我们将专门讨论二叉树或二叉搜索树。二进制树是用于数据存储目的的特殊数据结构。二叉树有一个特殊条件,即每个节点最多可以有两个孩子。二叉树既有序数组又有链表的好处,因为搜索与排序数组一样快,插入或删除操作也与链表一样快。重要条款以下是关于树的重要术语。路径-路径是指沿着树的边缘的节点序列。根-树顶部的节点称为根。每棵树只有一个根,并且从根节点到任何节点只有一条路径。父节点-除根...