Questions tagged «binary-trees»

一棵树,其中每个节点最多有两个子节点


2
在BST中搜索时可能的搜索路径数
我有以下问题,但没有答案。如果我的方法正确,我将不胜感激: 问:在二叉搜索树中搜索键值60时,遍历包含键值10、20、40、50、70、80、90的节点,而不必按给定的顺序进行。从包含值60的根节点开始的搜索路径中,这些键值可以出现多少种不同的顺序? (A)35(B)64(C)128(D)5040 从这个问题中,我了解到遍历必须包括所有给定的节点,最终我们必须达到键60。例如,这样的组合之一是: 10、20、40、50、90、80、70、60。 由于我们必须遍历上面给出的所有节点,因此我们必须从10或90开始。如果我们从20开始,我们将不会达到10(因为60> 20并且将遍历20的右子树) 同样,我们不能从80开始,因为我们将无法达到90,因为80> 60,我们将在80的左子树中遍历,因此无法达到90。 取10。剩余的节点为20、40、50、70、80、90。下一个节点可以为20或90。出于前面提到的相同原因,我们不能取其他节点。 如果我们以相似的方式考虑,则在每个级别我们都有两个选择。由于有7个节点,因此前6个有2个选择,最后1个没有选择。所以完全有 2 * 2 * 2 * 2 * 2 * 2 * 12∗2∗2∗2∗2∗2∗12*2*2*2*2*2*1排列= = 6426262^6646464 这是正确的答案吗? 如果没有,更好的方法是什么? 我想概括一下。如果给出节点,则总共可能的搜索路径为2 n − 1ñnn2n − 12n−12^{n-1}


1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
一个人如何有效地产生所有相等数量的0和1的二进制序列?
甲二进制序列长度的只是一个有序序列使得每个要么是或。为了生成所有这样的二进制序列,可以按以下方式使用明显的二进制树结构:根为“空”,但是每个左子级对应于现有字符串的附加值,每个右子级对应于。现在,每个二进制序列只是一条长度为的路径,该路径从根开始并在叶处终止。x 1,… ,x n x j 0 1 0 1 n + 1ññnX1个,… ,xñX1个,…,Xñx_1,\ldots,x_nXĴXĴx_j0001个1个10001个1个1n + 1ñ+1个n+1 这是我的问题: 如果我们只想生成所有长度二进制字符串,它们恰好具有零和,我们可以做得更好吗?n n2 n2ñ2nññnññn 所谓“我们可以做得更好”,是指我们应该比笨拙的算法具有更低的复杂度,后者首先在上面构建整个树,然后尝试找到具有相等数量“左”和“右”边的路径。


2
二叉树的平均高度是多少?
关于二叉树的平均高度是否有正式定义? 我有一个有关使用以下两种方法查找二叉树的平均高度的教程问题: 自然的解决方案可能是取从根到叶的所有可能路径的平均长度,即 Avh1个(T)= 1#叶 ŧ·&ΣT的v 叶 深度(v )Avh1个⁡(Ť)=1个#留在 Ť⋅∑v 的叶 Ť深度⁡(v)\qquad \displaystyle \operatorname{avh}_1(T) = \frac{1}{\text{# leaves in } T} \cdot \sum_{v \text{ leaf of } T} \operatorname{depth}(v)。 另一种选择是递归定义它,即节点的平均高度是子树的平均高度加一的平均值,即 Avh2(N(l ,r ))= avh2(l )+ avh2(r )2+ 1Avh2⁡(ñ(升,[R))=Avh2⁡(升)+Avh2⁡([R)2+1个\qquad \displaystyle \operatorname{avh}_2(N(l,r)) = \frac{\operatorname{avh}_2(l) + \operatorname{avh}_2(r)}{2} + 1 与对于叶子和为空时隙。l avh 2(_ )= 0Avh2(l …

1
使用二进制索引树进行范围更新+范围查询
我试图了解如何修改二进制索引树(fenwick树)以处理范围查询和范围更新。 我发现以下来源: http://kartikkukreja.wordpress.com/2013/12/02/range-updates-with-bit-fenwick-tree/ http://programmingcontests.quora.com/Tutorial-Range-Updates-in-Fenwick-Tree http ://apps.topcoder.com/forums/?module = Thread&threadID = 756271&start = 0&mc = 4#1579597 但是即使通读了所有它们,我也无法理解第二个二进制索引树的目的或作用。 有人可以向我解释一下如何修改二进制索引树来处理这些吗?

3
为什么二叉树
在我的Java课上,我们正在学习不同类型的集合的复杂性。 很快我们将讨论我一直在阅读的二叉树。该书指出二叉树的最小高度为,但没有提供进一步的解释。日志2(n + 1 )− 1log2⁡(n+1)−1\log_2(n+1) - 1 有人可以解释为什么吗?

1
旋转数为奇数的八字树
将项目插入展开树时,将基于Z字形或Z字形模式成对执行旋转。如果要执行奇数个旋转,则可以从叶子开始进行额外的旋转,也可以保存额外的旋转并在根部进行。有关系吗? 例如,在附加的图像中,我将4插入BST,然后将其“展开”到根目录。在图的顶部,我首先在叶子节点处找到“ zig-zig”对,并从底部开始执行“ zig-zag”展开,最后在根部进行右旋。在图的底部,我首先从叶子开始进行奇数旋转,然后对根进行曲折展开。 哪个是对的?还是两者都会导致通常的八卦树表演?

3
对数与双对数时间复杂度
在实际应用中,使用而不是O(log (n ))算法有具体的好处吗?O(对数(日志(n ))O(log⁡(log⁡(n))\mathcal{O}(\log(\log(n))O(对数(n ))O(log⁡(n))\mathcal{O}(\log(n)) 当使用例如van Emde Boas树而不是更常规的二进制搜索树实现时就是这种情况。但是例如,如果我们取那么在最佳情况下,双对数算法的对数性能比对数算法高(大约为5)。而且一般来说,实现起来更加棘手和复杂。n &lt; 106n&lt;106n < 10^6555 考虑到我个人比VEB树更喜欢BST,您怎么看? 一个人可以很容易地证明: ∀ Ñ &lt; 106。日志 ñ日志(日志(n ))&lt; 5.26146∀n&lt;106. log⁡nlog⁡(log⁡(n))&lt;5.26146\qquad \displaystyle \forall n < 10^6.\ \frac{\log n}{\log(\log(n))} < 5.26146
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.