标签: data-structures

60
推荐指数
6
解决办法
4万
查看次数

你如何验证二叉搜索树?

我在这里读到了一个名为验证二叉搜索树的访谈练习.

这究竟是如何工作的?在验证二叉搜索树时会有什么需要?我写了一个基本的搜索树,但从未听说过这个概念.

algorithm binary-search-tree data-structures

60
推荐指数
5
解决办法
7万
查看次数

在二叉搜索树中计算高度的最佳方法是什么?(平衡AVL树)

我正在寻找计算AVL树中节点平衡的最佳方法.我以为我有它工作,但经过一些繁重的插入/更新,我可以看到它的工作正常(根本没有).

这是一个由两部分组成的问题,第一部分是如何计算子树的高度,我知道定义"节点的高度是从该节点到叶子的最长向下路径的长度".而我理解它,但我没有实现它.并且为了进一步混淆我这个引用可以在维基百科的树高上找到"传统上,值-1对应于没有节点的子树,而零对应于具有一个节点的子树."

而第二部分是得到一个子树的平衡因素,AVL树,我没有问题理解概念,"让你的高度LR子树和减去RL".这被定义为这样的事情: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

60
推荐指数
3
解决办法
14万
查看次数

自动完成算法?

我指的是当用户在Google中键入搜索字词时用于提供查询建议的算法.

我主要感兴趣的是:1.最重要的结果(最有可能是查询而不是匹配的任何东西)2.匹配子串3.模糊匹配

我知道你可以使用Trie或generalized trie来找到匹配,但它不符合上述要求......

这里提到类似的问题

algorithm scalability autocomplete autosuggest data-structures

60
推荐指数
4
解决办法
6万
查看次数

collections.ChainMap的目的是什么?

在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)

它是由动机这个问题,并通过公开这一个(没有PEP创建).

据我所知,它是一个替代,有一个额外的字典,并用update()s 维护它.

问题是:

  • 用例ChainMap包括哪些用例?
  • 有真实世界的例子ChainMap吗?
  • 它是否用于切换到python3的第三方库?

额外问题:有没有办法在Python2.x上使用它?


我在Transforming Code into Beautiful, Idiomatic PythonRayCon Hettinger的PyCon演讲中听说过它,我想将它添加到我的工具包中,但我不知道何时应该使用它.

python collections dictionary data-structures python-3.x

60
推荐指数
4
解决办法
1万
查看次数

如何从单链表的末尾找到第n个元素?

下面的函数试图寻找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)

algorithm linked-list data-structures

59
推荐指数
4
解决办法
9万
查看次数

什么是Python的heapq模块?

我尝试了"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)

python heap python-module data-structures

59
推荐指数
3
解决办法
5万
查看次数

Haskell的代数数据类型

我正在努力完全理解Haskell的所有概念.

代数数据类型在哪些方面类似于泛型类型,例如在C#和Java中?它们有何不同?无论如何,他们有什么代数呢?

我熟悉通用代数及其环和字段,但我对Haskell的类型如何工作只有一个模糊的概念.

haskell types functional-programming algebraic-data-types data-structures

58
推荐指数
5
解决办法
2万
查看次数

SQL中的链接列表

什么是在mysql数据库中存储链表的最佳方法,这样插入很简单(即你不必每次都重新索引一堆东西),这样就可以很容易地按顺序拉出列表了.

sql data-structures

58
推荐指数
3
解决办法
4万
查看次数

Javascript数据结构库

我想请求推荐JavaScript库/库,它们提供一些基本数据结构的实现,例如优先级队列,带有任意键的映射,尝试,图形等,以及对它们进行操作的一些算法.

我最感兴趣的是:

  • 涵盖的功能集,
  • 解决方案的灵活性 - 这主要适用于图表.例如,我是否必须使用提供的图形实现,
  • 使用该语言的功能特性 - 有时它提供了更大的灵活性,
  • 执行的表现

我想指出,我知道可以使用JavaScript实现以下数据结构:

  • 一个地图,如果键值是字符串或数字,
  • 一组,(使用地图实现),
  • 一个队列,虽然如下所述,但它在某些浏览器上效率低下,

目前我最感兴趣的是优先级队列(不要与常规队列混淆),图形实现对输入图的格式不是非常干扰.例如,他们可以使用回调来遍历图的结构,而不是访问具有固定名称的一些具体属性.

javascript algorithm data-structures

58
推荐指数
2
解决办法
2万
查看次数