📝 数据结构和算法
20661篇技术文档📅  最后修改于: 2020-09-27 16:47:14        🧑  作者: Mango
在本教程中,我们将借助示例学习什么算法。算法是顺序解决问题的一组定义明确的指令。好的算法的质量输入和输出应精确定义。算法中的每个步骤均应清晰明确。在解决问题的许多不同方式中,算法应该是最有效的。算法不应该包含计算机代码。相反,应以可以在不同编程语言中使用的方式编写算法。算法实例将两个数字相加的算法查找三个数字中最大的算法查找二次方程所有根的算法查找阶乘的算法检查素数的算法斐波那契数列的算法编程中的...
📅  最后修改于: 2020-09-27 16:48:06        🧑  作者: Mango
在本教程中,您将学习什么是渐近符号。此外,您还将了解Big-O表示法,Theta表示法和Omega表示法。算法的效率取决于执行算法所需的时间,存储空间和其他资源。借助渐近符号来测量效率。对于不同类型的输入,算法可能不会具有相同的性能。随着输入大小的增加,性能将会改变。将算法性能随输入大小顺序的变化进行的研究定义为渐近分析。渐近符号渐进符号是当输入趋于特定值或极限值时用于描述算法运行时间的数学符号。...
📅  最后修改于: 2020-09-27 16:49:25        🧑  作者: Mango
在本教程中,您将学习什么是B树。此外,您还将在C,C++,Java和Python的B树上找到搜索操作的工作示例。B树是一种特殊类型的自平衡搜索树,其中每个节点可以包含多个关键字,并且可以具有两个以上子节点。它是二叉搜索树的一般形式。它也被称为高度平衡的m-way树。B树为什么选择B树?随着访问硬盘等物理存储介质所需的时间越来越少,对B树的需求也随之增加。辅助存储设备速度较慢,容量较大。需要这种类型...
📅  最后修改于: 2020-09-27 16:50:03        🧑  作者: Mango
在本教程中,您将学习什么是回溯算法。此外,您还将找到回溯方法的示例。回溯算法是一种解决问题的算法,它使用蛮力方法来查找所需的输出。蛮力方法会尝试所有可能的解决方案,然后选择所需/最佳解决方案。术语“回溯”表示如果当前解决方案不合适,则回溯并尝试其他解决方案。因此,在此方法中使用了递归。此方法用于解决具有多种解决方案的问题。如果需要最佳解决方案,则必须进行动态编程。状态空间树空间状态树是表示问题的所...
📅  最后修改于: 2020-09-27 16:50:55        🧑  作者: Mango
在本教程中,您将了解平衡的二叉树及其不同类型。此外,您还将在C,C++,Java和Python找到平衡的二叉树的工作示例。平衡二叉树(也称为高度平衡二叉树)定义为二叉树,其中任何节点的左和右子树的高度相差不超过1。要了解有关树/节点的高度的更多信息,请访问树数据结构。以下是高度平衡的二叉树的条件:任何节点的左右子树之间的差异不超过一个左子树是平衡的正确的子树是平衡的平衡的二叉树,每个级别都有深度每...
📅  最后修改于: 2020-09-27 16:52:23        🧑  作者: Mango
Bellman Ford算法可帮助我们找到从一个顶点到加权图的所有其他顶点的最短路径。它与Dijkstra的算法相似,但可用于边线具有负权重的图形。为什么人们在现实生活中会遇到负重的边缘?负重边乍一看似乎没什么用,但是它们可以解释很多现象,例如现金流,化学反应中释放/吸收的热量等。例如,如果从一种化学物质A到达另一种化学物质B的方法不同,则每种方法都会具有涉及散热和吸收的副反应。如果我们想找到需要...
📅  最后修改于: 2020-09-27 16:54:04        🧑  作者: Mango
在本教程中,您将学习二进制搜索树的工作原理。此外,您还将在C,C++,Java和Python找到二进制搜索树的工作示例。二进制搜索树是一种数据结构,可快速使我们维护一个排序的数字列表。之所以称为二叉树,是因为每个树节点最多有两个子节点。之所以称为搜索树,是因为它可用于在O(log(n))时间中搜索数字的存在。将二分搜索树与常规二叉树分开的属性是左子树的所有节点均小于根节点右子树的所有节点均大于根节...
📅  最后修改于: 2020-09-27 16:55:32        🧑  作者: Mango
在本教程中,您将学习二进制搜索排序的工作方式。另外,您还将找到C,C++,Java和Python的Binary Search的工作示例。二进制搜索是一种搜索算法,用于在排序数组中查找元素的位置。用这种方法,总是在数组的一部分中间搜索元素。二进制搜索只能在项目的排序列表上实现。如果元素尚未排序,则需要首先对其进行排序。二进制搜索工作二进制搜索算法可以通过以下两种方式实现。迭代法递归方法递归方法遵循分...
📅  最后修改于: 2020-09-27 16:57:05        🧑  作者: Mango
在本教程中,您将学习二叉树及其不同类型。此外,您还将在C,C++,Java和Python找到二进制树的工作示例。二叉树是一种树数据结构,其中每个父节点最多可以有两个子节点。例如:在下图中,每个元素最多有两个子代。二叉树二叉树的类型全二叉树完整的二叉树是二叉树的一种特殊类型,其中每个父节点/内部节点都有两个或没有子节点。全二叉树要了解更多信息,请访问完整的二叉树。完美的二叉树理想的二叉树是一种二叉树...
📅  最后修改于: 2020-09-27 16:58:28        🧑  作者: Mango
在本教程中,您将学习气泡排序的工作原理。此外,您还将在C,C++,Java和Python找到冒泡排序的工作示例。冒泡排序是一种算法,用于比较相邻元素,并在相邻元素未按预期顺序进行交换时交换它们的位置。顺序可以是升序或降序。气泡排序如何工作?从第一个索引开始,比较第一个和第二个元素,如果第一个元素大于第二个元素,则将它们交换。现在,比较第二个和第三个元素。如果它们不正常,请交换它们。上面的过程一直持...
📅  最后修改于: 2020-09-27 16:59:53        🧑  作者: Mango
在本教程中,您将学习存储桶排序的工作方式。此外,您还将找到C,C++,Java和Python的存储桶排序的工作示例。桶排序是一种排序技术,它通过首先将元素分为几组称为桶的元素来对元素进行排序。使用适当的排序算法中的任何一个或递归调用相同的算法对每个存储桶中的元素进行排序。创建了几个存储桶。每个存储桶都填充有特定范围的元素。存储桶中的元素使用任何其他算法进行排序。最后,收集存储桶中的元素以获取排序后...
📅  最后修改于: 2020-09-27 17:00:55        🧑  作者: Mango
在本教程中,您将学习什么是循环队列。此外,您还将在C,C++,Java和Python找到循环队列的实现。循环队列避免了使用数组的常规队列实现中的空间浪费。常规队列的限制如您在上图中所看到的,经过一些入队和出队后,队列的大小已减小。只有当所有元素都已出队后,才能在重置队列后使用索引0和1。循环队列如何工作循环队列通过循环递增的过程来工作,即,当我们尝试递增指针并到达队列的末尾时,我们从队列的开头开始...
📅  最后修改于: 2020-09-27 17:01:59        🧑  作者: Mango
在本教程中,您将学习完整的二叉树及其不同类型。此外,您还将在C,C++,Java和Python找到完整的二叉树的工作示例。完整的二叉树是一棵二叉树,其中所有级别均已完全填充,但最低级别可能从左开始填充。完整的二叉树就像完整的二叉树,但有两个主要区别所有叶子元素都必须向左倾斜。最后一个叶子元素可能没有正确的同级,即完整的二叉树不必是完整的二叉树。完整的二叉树完整二叉树vs完整二叉树完整二叉树和完整二...
📅  最后修改于: 2020-09-27 17:03:06        🧑  作者: Mango
在本教程中,您将学习计数排序的工作原理。此外,您还将找到C,C++,Java和Python中计数排序的工作示例。计数排序是一种排序算法,它通过计算数组中每个唯一元素的出现次数来对数组的元素进行排序。将计数存储在辅助数组中,并通过将计数映射为辅助数组的索引来完成排序。计数排序如何工作?从给定数组中找出最大元素(让它成为max)。给定数组使用所有元素0初始化一个长度为max+1的数组。此数组用于存储数...
📅  最后修改于: 2020-09-27 17:04:23        🧑  作者: Mango
在本教程中,您将学习什么是双端队列(双端队列)。此外,您还将在C,C++,Java和Python找到在双端队列上进行不同操作的工作示例。双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除。因此,它不遵循FIFO规则(先进先出)。双端队列的表示双端队列的类型输入限制双端队列在此双端队列中,输入被限制在单端,但允许在两端删除。输出限制双端队列在此双端队列中,输出限制在单端,但允许在...