529 次浏览
在这篇文章中,我们将了解贪婪算法和动态规划方法的区别。贪婪算法它是一种算法范例,逐步构建解决方案。选择下一步的方式是,它能带来最明显和直接的益处。涉及选择局部最优值的问题将有助于选择问题的全局最优值/解决方案。这些是与贪婪算法相关的难题。不能保证贪婪算法会产生最优解。在问题的每个阶段都做出最优选择,即局部最优解。它…… 阅读更多
794 次浏览
在这篇文章中,我们将了解Prim算法和Kruskal算法的区别。用于最小生成树 (MST) 的 Kruskal 算法给定一个连通且无向的图,该图的生成树是连接所有顶点的子图。单个图可以有多个生成树。加权、连通且无向图的最小生成树 (MST)(也称为最小权重生成树)是一个生成树,其权重小于或等于所有其他生成树的权重。生成树的权重是通过添加权重来确定的…… 阅读更多
1K+ 次浏览
Yen 的 k 最短路径算法不是只给出单个最短路径,而是给出 k 个最短路径,这样我们就可以得到第二短路径、第三短路径等等。让我们考虑这样一个场景:我们必须从 A 地点旅行到 B 地点,并且在 A 地点和 B 地点之间有多条路线可用,但是我们必须找到最短路径,并且忽略所有在时间复杂度方面不太重要的路径,以便到达目的地。让我们用一个例子来理解-考虑给定的例子作为桥梁,它…… 阅读更多
8K+ 次浏览
表达式树表达式树是叶子节点具有要操作的值,而内部节点包含将对叶子节点执行的操作符的树。示例4 + ((7 + 9) * 2) 将具有如下表达式树算法来构造表达式树设 T 为表达式树。如果 T 不为空: 如果 T->data 是操作数: 返回 T.data A = solve(T.left) B = solve(T.right) -- > 对 A 和 B 计算 'T.data' 的运算符,并递归调用, 返回 calculate(A, B, T.data)如何构造表达式树?要为… 阅读更多
7K+ 次浏览
红黑树是一种自平衡二叉搜索树,其中树的每个节点都用红色或黑色着色。我们可以在红黑树上执行三种类型的操作——搜索、插入和删除。让我们假设我们必须在下面的红黑树中插入一个元素。在红黑树中插入一个元素的想法很简单——我们就像在普通的二叉树中插入一样进行插入。我们从根节点开始,检查节点的颜色,并将其插入到一个…… 阅读更多
516 次浏览
Floyd 循环是用于检测给定单链表中循环的循环检测算法之一。在 Floyd 循环算法中,我们有两个指针最初指向头部。在龟兔赛跑的故事中,兔子移动的速度是乌龟的两倍,每当兔子到达路径的尽头时,乌龟到达路径的中间。算法将 Hare 和 Tortoise 初始化为列表的头部节点。最初,兔子移动的速度是乌龟的两倍。移动兔子和乌龟,并找到兔子是否到达链表的末尾,返回…… 阅读更多
468 次浏览
我们有一个 Trie,当用户输入一个字符时,我们必须显示 Trie 中匹配的字符串。我们称此功能为自动完成。例如,如果 Trie 包含“xyzzzz”、“xyz”、“xxxyyxzzz”,并且当用户输入 xy 时,那么我们必须向他们显示 xyzzzz、xyz 等,实现结果的步骤。使用标准 Trie 算法搜索字符串。如果字符串不存在,则返回 -1。如果字符串存在并且是 Trie 中单词的结尾,则打印字符串。如果匹配的字符串没有任何节点,则返回。否则打印…… 阅读更多
405 次浏览
在本节中,我们将了解什么是线段树。在讨论之前,让我们看看一个问题。假设我们有一个数组 arr[0, …, n-1],我们可以执行以下操作——查找从索引 l 到 r 的元素之和,其中 0 ≤ l ≤ r ≤ n-1 将数组的指定元素的值更改为新值 x。我们需要执行 arr[i] = x。i 的范围为 0 到 n – 1。我们可以使用线段树来解决这个问题。线段树可以帮助我们获得总和和查询…… 阅读更多
2K+ 次浏览
在本节中,我们将了解什么是区间树。顾名思义,区间树是与区间相关的树。所以在讨论区间树之前,让我们看看基本的区间。区间基本上是一个范围。因此,如果一个区间写为 [a,b],则表示范围从 a 开始,到 b 结束。现在假设有一个区间 [10,20]。因此,存在三个范围值。第一个是 -∞ 到 10,10 到 20,最后是 20 到 ∞现在,假设我们将创建第二个…… 阅读更多
734 次浏览
这里我们将看到如何从B+树中删除节点。假设我们有一个如下所示的B+树:B+树示例 - 删除操作分为两部分。首先,我们必须找到该元素。该策略类似于查询。现在,对于删除操作,我们必须注意一些规则。一个节点必须至少包含m/2个元素。因此,如果我们删除一个元素,并且剩余元素少于m-1个,那么它将进行自我调整。如果整个节点被删除,则其子节点将被合并,如果其大小与……阅读更多