📝 数据结构和算法

20661篇技术文档
  Dijkstra的算法

📅  最后修改于: 2020-09-27 17:05:36        🧑  作者: Mango

Dijkstra的算法使我们能够找到图的任意两个顶点之间的最短路径。它与最小生成树不同,因为两个顶点之间的最短距离可能不包括图形的所有顶点。Dijkstra算法的工作原理Dijkstra的算法的工作原理是,顶点A和D之间的最短路径A -> DB -> D的任何子路径B -> D也是顶点B和D之间的最短路径。每个子路径是最短路径Djikstra在相反的方向上使用了此属性,即我们高估了每个顶点到起始顶...

  分而治之算法

📅  最后修改于: 2020-09-27 17:06:31        🧑  作者: Mango

在本教程中,您将学习分而治之算法的工作原理。此外,您将发现分而治之方法与其他解决递归问题的方法之间的比较。分而治之算法是一种通过以下方法解决大问题的策略将问题分解为较小的子问题解决子问题,以及合并它们以获得所需的输出。要使用分治法,需要使用递归。了解不同编程语言中的递归:Java中的递归Python的递归C++中的递归分而治之算法如何工作?涉及的步骤如下:除法:使用递归将给定的问题分为子问题。征服...

  动态编程

📅  最后修改于: 2020-09-27 17:07:12        🧑  作者: Mango

在本教程中,您将学习什么是动态编程。此外,您还将发现动态编程和贪婪算法之间的比较来解决问题。动态编程是计算机编程中的一种技术,可帮助有效解决具有重叠子问题和最佳子结构属性的一类问题。这些问题涉及重复计算相同子问题的值以找到最佳解决方案。动态编程实例以生成斐波那契数列为例。如果序列是F(1)F(2)F(3)…….. F(50),则遵循规则F(n)= F(n-1)+ F(n-2) )注意,子问题重叠,...

  福特-富克森算法

📅  最后修改于: 2020-09-28 02:16:39        🧑  作者: Mango

在本教程中,您将学习什么是Ford-Fulkerson算法。此外,您还将找到在C,C++,Java和Python中找到流网络中最大流的工作示例。Ford-Fulkerson算法是一种贪婪方法,用于计算网络或图形中的最大可能流量。术语流动网络用于描述具有源(S)和宿(T)的顶点和边的网络。除了S和T之外,每个顶点都可以通过它接收和发送相等数量的东西。S只能发送,而T只能接收东西。我们可以使用不同容量...

  全二叉树

📅  最后修改于: 2020-09-28 02:17:48        🧑  作者: Mango

在本教程中,您将学习完整的二叉树及其不同的定理。此外,您还将找到一些工作示例来检查C,C++,Java和Python的完整二进制树。完整的二叉树是二叉树的一种特殊类型,其中每个父节点/内部节点都有两个或没有子节点。它也被称为适当的二叉树。全二叉树完整二叉树定理叶数为i + 1。节点总数为2i + 1。内部节点的数量为(n – 1)/ 2。叶数为(n + 1) / 2。节点总数为2l – 1。内部节...

  邻接表

📅  最后修改于: 2020-09-28 02:19:16        🧑  作者: Mango

在本教程中,您将学习什么是邻接表。此外,您还将在C,C++,Java和Python找到邻接表的工作示例。邻接表将图表示为链接列表的数组。数组的索引表示一个顶点,其链接列表中的每个元素表示与该顶点形成边的其他顶点。邻接表表示图及其等效的邻接表表示如下所示。邻接表表示邻接表在存储方面非常有效,因为我们只需要存储边的值即可。对于具有数百万个顶点和边的稀疏图,这可能意味着节省了很多空间。邻接表结构最简单的...

  邻接矩阵

📅  最后修改于: 2020-09-28 02:20:20        🧑  作者: Mango

在本教程中,您将学习什么是邻接矩阵。此外,您还将在C,C++,Java和Python找到邻接矩阵的工作示例。邻接矩阵是将图形G = {V,E}表示为布尔矩阵的一种方式。邻接矩阵表示矩阵的大小为VxV,其中V是图形中的顶点数,条目Aij的值是1还是0,这取决于是否存在从顶点i到顶点j的边。邻接矩阵示例下图显示了一个图形及其等效的邻接矩阵。图的邻接矩阵在无向图的情况下,由于每个边缘(i,j),矩阵关于...

  广度优先搜索

📅  最后修改于: 2020-09-28 02:21:20        🧑  作者: Mango

在本教程中,您将学习广度优先搜索算法。此外,您还将在C,C++,Java和Python找到bfs算法的工作示例。遍历是指访问图的所有节点。广度优先遍历或广度优先搜索是一种递归算法,用于搜索图形或树数据结构的所有顶点。BFS算法一个标准的BFS实现将图的每个顶点分为以下两类之一:来过未造访该算法的目的是将每个顶点标记为已访问,同时避免循环。该算法的工作原理如下:首先将图形的任意一个顶点放在队列的后面...

  DFS算法

📅  最后修改于: 2020-09-28 02:22:20        🧑  作者: Mango

在本教程中,您将学习什么是DFS算法。此外,您还将在C,C++,Java和Python找到DFS算法的工作示例。遍历是指访问图的所有节点。深度优先遍历或深度优先搜索是一种用于搜索图形或树数据结构的所有顶点的递归算法。在本文中,您将借助示例学习DFS算法,DFS伪代码以及深度优先搜索算法的代码,并在C++,C,Java和Python程序中实现。DFS算法一个标准的DFS实现将图形的每个顶点分为以下两...

  图形数据结构

📅  最后修改于: 2020-09-28 02:23:07        🧑  作者: Mango

在本教程中,您将学习什么是图数据结构。此外,您还将找到图形的表示形式。图形数据结构是具有数据并连接到其他节点的节点的集合。让我们尝试通过一个例子来理解这一点。在facebook上,一切都是节点。包括用户,照片,相册,事件,组,页面,评论,故事,视频,链接,注释…任何有数据的都是节点。每个关系都是从一个节点到另一个节点的一条边。无论您发布照片,加入群组(例如页面)等,都会为该关系创建新的边缘。图形数...

  贪婪算法

📅  最后修改于: 2020-09-28 02:23:48        🧑  作者: Mango

在本教程中,您将学习什么是贪婪算法。此外,您还会找到一个贪婪方法的示例。贪婪算法是一种通过选择当前可用的最佳选项来解决问题的方法,而无需担心它会带来的未来结果。换句话说,本地最佳选择旨在产生全球最佳结果。对于所有问题,该算法可能都不是最佳选择。在某些情况下可能会产生错误的结果。该算法永远不会返回来扭转所做出的决定。该算法以自顶向下的方式工作。该算法的主要优点是:该算法更易于描述。该算法的性能可能优...

  哈希表

📅  最后修改于: 2020-09-28 02:25:04        🧑  作者: Mango

在本教程中,您将学习什么是哈希表。此外,您还将找到C,C++,Java和Python中哈希表操作的工作示例。哈希表是一种数据结构,以键值对的形式表示数据。每个键都映射到哈希表中的一个值。这些键用于索引值/数据。关联数组也采用了类似的方法。数据通过键在键值对中表示,如下图所示。每个数据都与一个键相关联。键是一个指向数据的整数。1.直接地址表当程序使用的表空间量不是问题时,将使用直接地址表。在这里,我...

  堆数据结构

📅  最后修改于: 2020-09-28 02:26:13        🧑  作者: Mango

在本教程中,您将学习什么是堆数据结构。此外,您还将找到C,C++,Java和Python中堆操作的工作示例。堆数据结构是满足堆属性的完整二叉树。也称为二进制堆。完整的二叉树是一种特殊的二叉树,其中除最后一个级别外,每个级别都已填充所有节点都尽可能地向左堆属性是节点的属性,其中(对于最大堆)每个节点的密钥始终大于其子节点,并且根节点的密钥在所有其他节点中最大;(对于最小堆)每个节点的密钥始终小于子节...

  堆排序算法

📅  最后修改于: 2020-09-28 02:27:36        🧑  作者: Mango

在本教程中,您将学习堆排序算法的工作原理。此外,您还将找到使用C,C++,Java和Python进行堆排序的工作示例。堆排序是计算机编程中一种流行且高效的排序算法。学习如何编写堆排序算法需要了解两种类型的数据结构-数组和树。我们要排序的初始数字集存储在一个数组中,例如[3,10,23,32,34,76][10, 3, 76, 34, 23, 32],排序后,我们得到一个排序后的数组[3,10,23...

  霍夫曼编码

📅  最后修改于: 2020-09-28 02:29:05        🧑  作者: Mango

在本教程中,您将学习霍夫曼编码的工作原理。此外,您还将找到C,C++,Java和Python的霍夫曼编码的工作示例。霍夫曼编码是一种压缩数据以减小其大小而又不丢失任何细节的技术。它最早由David Huffman开发。霍夫曼编码通常可用于压缩其中经常出现字符。哈夫曼编码的工作原理?假设下面的字符串要通过网络发送。初始字符串每个字符占用8位。上面的字符串总共有15个字符 。因此,总共需要8 * 15...