Questions tagged «balanced-search-trees»

4
为什么红黑树如此受欢迎?
在我看来,似乎到处都在使用红黑树(std::set在C ++,SortedDictionaryC#等中)实现数据结构。 在我的算法课程中刚刚覆盖了(a,b),红黑和AVL树之后,这就是我的收获(也是从问问教授,翻阅几本书并仔细研究一下)得出的: AVL树的平均深度小于红黑树,因此在AVL树中搜索值的速度始终更快。 与AVL树相比,红黑树进行结构调整以平衡自身的可能性要小一些,这可能会使它们的插入/删除速度更快。我可能会说,因为这将取决于对树的结构更改的成本,因为这将在很大程度上取决于运行时和隐含(当树是不可变的时,功能语言是否也可能完全不同?) 网上有很多基准可以比较AVL和红黑树,但令我惊讶的是,我的教授基本上说过,通常您会做以下两件事之一: 要么您根本就不在乎性能,在这种情况下,大多数情况下AVL与Red-black的10-20%的差异根本不重要。 或者,您真的很在乎性能,在这种情况下,您会抛弃AVL树和红黑树,并选择B树,可以对B树进行调整以使其工作得更好(或(a,b)树),我将所有这些都放在一个篮子里。) 这样做的原因是因为B树将数据更紧凑地存储在内存中(一个节点包含许多值),因此缓存未命中的情况将大大减少。您还可以根据用例来调整实现,并使B树的顺序取决于CPU缓存大小等。 问题在于,我几乎找不到任何可以分析现实硬件上不同实现的搜索树实际使用情况的资源。我浏览过许多有关算法的书,但没有发现可以将不同的树变体进行比较的任何东西,除了表明一棵树的平均深度比另一棵树小(这并没有真正说明树的行为方式)在实际程序中。) 话虽这么说,是否有一个特定的原因为什么到处都使用红黑树,而根据上述内容,B树应该胜过它们?(作为唯一的基准测试,我还可以看到http://lh3lh3.users.sourceforge.net/udb.shtml,但这可能只是具体实现的问题)。还是为什么每个人都使用Red-black树是因为它们很容易实现,或者换句话说,很难实现不好呢? 另外,当人们进入功能语言领域时,这将如何改变?似乎Clojure和Scala都使用Hash数组映射的trys,其中Clojure使用32的分支因子。

1
想象一棵红黑的树。是否总会有一系列插入和删除操作来创建它?
让我们假设以下是红黑树的定义: 它是二叉搜索树。 每个节点都被涂成红色或黑色。根是黑色的。 通过边连接的两个节点不能同时为红色。 像Wiki一样,这应该是NIL叶的良好定义。NIL叶为黑色。 从根到任何NIL叶的路径都包含相同数量的黑色节点。 题 假设您已经为红黑树实现了insert和delete操作。现在,如果为您提供了有效的红黑树,是否总有一个构造它的insert和序列delete? 动机 这个问题是由这个问题和这个问题的讨论引起的。 就个人而言,我确实相信,如果您想象一个仅由黑色节点组成的有效红黑树(这意味着您正在想象一个完美平衡的树),那么将有一个由insert和delete构成的序列。然而, 我不知道如何准确证明 我也对更一般的情况感兴趣

2
为什么C的void类型不同于Empty / Bottom类型?
维基百科以及我发现的其他来源都将C的void类型列为单位类型,而不是空类型。我觉得这很混乱,因为在我看来,它void更适合于空/底类型的定义。 void据我所知,没有价值观存在。 返回类型为void的函数指定该函数不返回任何内容,因此只能执行某些副作用。 类型的指针void*是所有其他指针类型的子类型。同样,void*在C中进行来回转换是隐式的。 我不确定最后一点是否可以作为void空类型的参数,void*或多或少是与无关的特例void。 另一方面,void它本身不是所有其他类型的子类型,据我所知,这是将类型作为底部类型的要求。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

1
AVL树不平衡吗?
在上一个问题中,有一个平衡树的定义和一个关于红黑树的问题。 这个问题是要问同样的问题,但对于AVL树。 问题是,鉴于平衡树的定义与其他问题相同,μμ\mu 是否有一些使所有足够大的AVL树达到平衡?μμ > 0μ>0\mu \gt 0μμ\mu 我认为AVL树只有一种定义,没有歧义。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.