问题标签 [clrs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 如何在 BST 中找到一个节点的前任,每个节点都有 3 个属性——succ、left 和 right?
来自 CLRS 的问题,3ed。
12.3-5
假设不是每个节点 x 保持属性 xp 指向 x 的父节点,而是保持 x.succ 指向 x 的后继节点。使用这种表示法在二叉搜索树 T 上给出 SEARCH、INSERT 和 DELETE 的伪代码。这些过程应该在 O(h) 时间内运行,其中 h 是树 T 的高度。(提示:您可能希望实现一个返回节点父节点的子程序。)
我知道如何实现一个在 O(h) 时间内返回节点父节点的子程序。
要找到节点的父节点,我们应该首先找到以子树为根x
的最大键。然后,我们从 向右下。当我们到达时,我们之前遇到的节点是的父节点。M
x
M.succ.left
x
x
x
查看代码。
时DELETE
x
,x
前身的succ应该被修改为指向x.succ
,不再x
。那么问题来了——如何x
在 O(h) 时间内找到 的前身?
当 的左子树不x
为空时,它是 的左子树中最右边的节点x
。但是,当 的左子树x
为空时,前驱是x
的祖先,要找到调用 的 O(h) 次PARENT
。这需要 O(h*h) 时间吗?还是应该从根向下搜索?
请注意,操作INSERT
, 还需要找到一个节点的前任。
有一个问题——如果所有的键共享相同的值怎么办?那么我们不能通过x
比较找到 ' 的前任,因为与 keya
相等的 keyx
可能出现在x
' 的左子树或右子树中。
math - CLRS 练习 3.2-4 Big-Oh vs Little Oh
我正在自学 CLRS,我已经达到了这一点——我要回答的问题是:
我把它减少到
现在,在这一点上,所有解决方案手册似乎都很少使用哦
=o(lglgn⋅lglgn)
这一步让我有点困惑;我以为我理解的很少——哦,但显然不够好——有人可以在这个特定的背景下框架它吗?接下来的步骤也从
至
这仅仅是L'hopitals规则的应用吗?
c++ - 有人可以解释为什么这个堆排序实现不起作用吗?
我在这上面花了几个小时,但我是 C++ 面向对象编程的新手,所以可能某些函数参数没有按应有的方式传递,但我找不到它。对于此代码,我得到以下输出:1 2 7 10 3 2 4 15
algorithm - 对于哈希表,如何得出 n=O(m) 的结论,其中 n 是表中的元素数,m 是槽数?
在 CLRS 的第 260 页上,它说,
如果哈希表槽的数量至少与表中元素的数量成正比,我们有 n = O(m),因此,a = n/m = O(m)/m = O(1) . 因此,搜索平均花费恒定的时间。
如何得出 n = O(m) 的结论?n(表中元素的总数)如何被 m(槽数)限制?不应该是 m = O(n) 吗?
algorithm - 什么被认为是红黑树上的叶子?
我正在研究CLRS的红黑树。关于讨论红黑树属性的部分,我有两个问题。来自CLRS的段落如下:
红黑树是满足以下红黑性质的二叉树:
每个节点不是红色就是黑色
根是黑色的
每片叶子(NIL)都是黑色的
如果一个节点是红色的,那么它的两个子节点都是黑色的
对于每个节点,从节点到后代叶子的所有简单路径都包含相同数量的黑色节点
首先,它说红黑树是二叉树。为什么他们不说红黑树是二叉搜索树。我认为红黑树的全部目的是保持搜索树的平衡以确保logN操作。其次,为什么红黑树中的叶子是NIL?
在常规二叉树中,我们习惯于这样:
在这种情况下,3、2 和 7 是叶子。为什么在 CLRS 中叶子被描绘成 Nil 的?
algorithm - 为什么关键路径的权重提供了执行所有工作的总时间的下限?
在算法介绍 P657,第 3 版中,它说:
关键路径是通过 dag 的最长路径,对应于执行任何作业序列的最长时间。因此,关键路径的权重提供了执行所有作业的总时间的下限。
我明白第一句话。但在第二句话中,它说
关键路径提供了一个下限
为什么它提供了执行所有工作的总时间的下限而不是上限?
我想我可能会误解关键路径?
algorithm - 何时能够计算增长顺序很重要?
我正在阅读CLRS的第 2 章和第 3 章,并且经常被卡住,尤其是在每章末尾提供的问题中,我想知道是否值得付出这么多的努力。我无法理解这样的在线解决方案:http: //clrs.skanev.com/02/problems/01.html
我听说这本书是大学 CS 课上最受欢迎的教科书之一,但是人们会跳过复杂的部分而只记住重要的东西吗,比如插入排序有这种增长顺序,合并排序有这种增长顺序,然后继续?
仅仅熟悉许多有用的算法就足以像拥有 CS 学位的人一般对计算机科学有同样多的了解吗?
python - python合并排序问题
不知道我在 python 中实现合并排序时哪里出错了。
如果有人能指出是什么破坏了我当前的合并排序实现,我将不胜感激。