我在这里读到了一个名为验证二叉搜索树的访谈练习.
这究竟是如何工作的?在验证二叉搜索树时会有什么需要?我写了一个基本的搜索树,但从未听说过这个概念.
我正在寻找计算AVL树中节点平衡的最佳方法.我以为我有它工作,但经过一些繁重的插入/更新,我可以看到它的工作正常(根本没有).
这是一个由两部分组成的问题,第一部分是如何计算子树的高度,我知道定义"节点的高度是从该节点到叶子的最长向下路径的长度".而我理解它,但我没有实现它.并且为了进一步混淆我这个引用可以在维基百科的树高上找到"传统上,值-1对应于没有节点的子树,而零对应于具有一个节点的子树."
而第二部分是得到一个子树的平衡因素,AVL树,我没有问题理解概念,"让你的高度L和R子树和减去R从L".这被定义为这样的事情:BALANCE = NODE[L][HEIGHT] - NODE[R][HEIGT]
在维基百科上阅读在描述插入到AVL树中的前几行中说:"如果平衡因子变为-1,0或1,那么树仍然是AVL形式,并且不需要旋转."
然后继续说,"如果平衡因子变为2或-2,那么植根于此节点的树是不平衡的,并且需要树旋转.最多需要单次或双次旋转来平衡树." - 我没有抓麻烦.
但是(是的,总有一个但是).
这是令人困惑的地方,文本说明"如果R的平衡因子为1,则意味着插入发生在该节点的(外部)右侧,需要左旋转".但是从理解的角度来看,正如我所引用的那样,如果平衡因素在[-1, 1]那之内,那么就没有必要进行平衡了吗?
我觉得我是如此接近抓概念,我已经得到了树旋转下来,实现正常的二叉搜索树,抓AVL树的边缘,但只是似乎缺少必要的顿悟.
编辑:代码示例比学术公式更受欢迎,因为我总是更容易在代码中掌握一些东西,但是非常感谢任何帮助.
编辑:我希望我能将所有答案都标记为"已接受",但对我而言,NIck的答案是第一个让我走"aha"的答案.
algorithm binary-tree avl-tree data-structures tree-balancing
我指的是当用户在Google中键入搜索字词时用于提供查询建议的算法.
我主要感兴趣的是:1.最重要的结果(最有可能是查询而不是匹配的任何东西)2.匹配子串3.模糊匹配
我知道你可以使用Trie或generalized trie来找到匹配,但它不符合上述要求......
这里提到类似的问题
algorithm scalability autocomplete autosuggest data-structures
在Python 3.3中,一个ChainMap类被添加到collections模块中:
提供了一个ChainMap类,用于快速链接多个映射,以便将它们视为一个单元.它通常比创建新字典和运行多个update()调用快得多.
例:
>>> from collections import ChainMap
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = ChainMap(y, x)
>>> for k, v in z.items():
print(k, v)
a 1
c 11
b 10
Run Code Online (Sandbox Code Playgroud)
据我所知,它是一个替代,有一个额外的字典,并用update()s 维护它.
问题是:
ChainMap包括哪些用例?ChainMap吗?额外问题:有没有办法在Python2.x上使用它?
我在Transforming Code into Beautiful, Idiomatic PythonRayCon Hettinger的PyCon演讲中听说过它,我想将它添加到我的工具包中,但我不知道何时应该使用它.
下面的函数试图寻找nth到最后一个单向链表的元素.
例如:
如果元素是8->10->5->7->2->1->5->4->10->10结果是
7th最后一个节点是7.
任何人都可以帮助我解释这段代码是如何工作的,还是有更好更简单的方法?
LinkedListNode nthToLast(LinkedListNode head, int n) {
if (head == null || n < 1) {
return null;
}
LinkedListNode p1 = head;
LinkedListNode p2 = head;
for (int j = 0; j < n - 1; ++j) { // skip n-1 steps ahead
if (p2 == null) {
return null; // not found since list size < n
}
p2 = p2.next;
}
while (p2.next != …Run Code Online (Sandbox Code Playgroud) 我尝试了"heapq"并得出结论,我的期望与我在屏幕上看到的不同.我需要有人解释它是如何工作的以及它在哪里有用.
从第2.2 节中的本周Python模块一书中可以看出
如果在添加和删除值时需要维护排序列表,请查看heapq.通过使用heapq中的函数来添加或删除列表中的项,您可以以较低的开销维护列表的排序顺序.
这就是我所做的和得到的.
import heapq
heap = []
for i in range(10):
heap.append(i)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
heapq.heapify(heap)
heapq.heappush(heap, 10)
heap
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
heapq.heappop(heap)
0
heap
[1, 3, 2, 7, 4, 5, 6, 10, 8, 9] <<< Why the list does not remain sorted?
heapq.heappushpop(heap, 11)
1
heap
[2, 3, 5, 7, 4, 11, 6, 10, 8, 9] …Run Code Online (Sandbox Code Playgroud) 我正在努力完全理解Haskell的所有概念.
代数数据类型在哪些方面类似于泛型类型,例如在C#和Java中?它们有何不同?无论如何,他们有什么代数呢?
我熟悉通用代数及其环和字段,但我对Haskell的类型如何工作只有一个模糊的概念.
haskell types functional-programming algebraic-data-types data-structures
什么是在mysql数据库中存储链表的最佳方法,这样插入很简单(即你不必每次都重新索引一堆东西),这样就可以很容易地按顺序拉出列表了.
我想请求推荐JavaScript库/库,它们提供一些基本数据结构的实现,例如优先级队列,带有任意键的映射,尝试,图形等,以及对它们进行操作的一些算法.
我最感兴趣的是:
我想指出,我知道可以使用JavaScript实现以下数据结构:
目前我最感兴趣的是优先级队列(不要与常规队列混淆),图形实现对输入图的格式不是非常干扰.例如,他们可以使用回调来遍历图的结构,而不是访问具有固定名称的一些具体属性.
data-structures ×10
algorithm ×5
python ×2
autocomplete ×1
autosuggest ×1
avl-tree ×1
binary-tree ×1
collections ×1
dictionary ×1
haskell ×1
heap ×1
javascript ×1
linked-list ×1
n-triples ×1
python-3.x ×1
rdf ×1
scalability ×1
sql ×1
types ×1