Questions tagged «tree»

树是图的一种特殊类型,它只允许与树相似的边缘层次集。从数学上讲,它实际上是树状结构。树具有根节点和子节点。正式而言,它被描述为一个无环连接图。

20
树上的NP难题
当输入图是一棵树时,可以在多项式时间内(甚至在线性时间内甚至是多项式)轻松解决一般图上对NP困难的几个优化问题。示例包括最小顶点覆盖,最大独立集,子图同构。列举一些自然优化问题,这些问题在树上仍然很难解决。

4
为什么有人会在KD树上使用八叉树?
我在科学计算方面有一些经验,并且在BSP(二进制空间分区)应用程序中广泛使用了kd树。最近,我对八叉树越来越熟悉,八叉树是一种类似的数据结构,用于对3-D欧几里得空间进行分区,但是从我收集到的数据中,它以固定的固定间隔工作。 一点独立性研究似乎表明,对于大多数数据集,kd树通常在性能上都更好-构造和查询更快。我的问题是,八叉树在空间/时间性能或其他方面的优势是什么?在什么情况下它们最适用(我听说过3D图形编程)?我将不胜感激地总结两种类型的优点和问题。 另外,如果有人能详细说明R树数据结构的用法及其优势,我也将不胜感激。R树(比八叉树更是如此)似乎与kd树非常相似地应用于k最近邻或范围搜索。

1
是否存在规则的树语言,其中大小为
我们在TATA一书中定义了规则的树语言:这是非确定性有限树自动机所接受的树集(第1章),或者等效地,是由规则树语法生成的树集(第2章)。两种形式主义都与众所周知的字符串类似物非常相似。 是否存在规则的树语言,其中大小为的树的平均高度nnn既不是Θ(n)Θ(n)\Theta(n)也不是Θ(n−−√)Θ(n)\Theta(\sqrt{n})? 显然,有一些树语言使得树的高度在大小上是线性的。并在书中解析组合学中,示出例如该大小的二叉树nnn具有平均高度2πn−−−√2πn2\sqrt{ \pi n}。如果我正确地理解了该书的第VII.16号提案(p.537),则存在大量的常规树语言子集,平均高度为Θ(n−−√)Θ(n)\Theta(\sqrt{n}),即树语言也是满足某些额外条件的简单树种的树。 所以我想知道是否有一种普通的树语言显示出不同的平均高度,或者是否有一种真正的二叉法。 注意:这个问题在计算机科学上曾被问过,但是三个多月没有得到回答。我想在这里重新发布它,因为这个问题太老了,无法移植,并且仍然对该问题感兴趣。这是原始帖子的链接。

2
树木和Levenshtein距离的高效diff算法
我最近阅读了有关在树间进行区分的问题的摘要,这使我对了解此问题的最新状态感兴趣。 另外,假设您允许的编辑操作之间是传统的添加/删除节点,您在编辑内容中添加了复制/移动子树的扩展操作,这是否使问题(寻找最佳差异)更容易或更难?

1
查找两个多项式之间的距离(表示为树)
一位从事基因编程工作的同事问了我以下问题。我首先尝试基于贪婪方法来解决它,但经过第二次思考,我找到了贪婪算法的反例。因此,我认为在这里值得一提。 考虑由它们的表达式树表示的两个多项式。例如,x3−2x+1x3−2x+1x^3-2x+1和x2+4x2+4x^2 + 4说明如下: 规则: 每个节点可以是变量名(x,y,z,…x,y,z,…x, y, z, \ldots),数字或运算符(+,-,×)。 树的有序遍历将导致有效的多项式。 操作节点的度数为2。其他节点的度数为0。所有节点的度数为1(除了root,其度数为0)。 在树的节点N上,如下定义基本操作: xxx××\times 基本操作可以在N之上构建一个表达式树(请参见下面的示例)。 类型1的基本操作的成本为1。类型2的成本等于新建的表达式树中{+,-,×}操作的数量。 类型2的示例:由于在节点N顶部构建的表达式树使用两个操作(-和×),因此以下基本操作的成本为2。 令T1和T2是代表多项式的两个表达式树。定义T1和T2 的距离如下:将T1转换为T2的基本操作的最低成本。请注意,我们不需要转换后的树具有与T2相同的结构。我们只希望它计算与T2相同的多项式。(有关示例,请参见注释。) 问题:给定T1和T2,提出了一种计算距离的算法。 示例1:假设T1和T2是本文开头所示的两棵树。要将右树转换为左树,可以在×的顶部构建成本为3的树,然后将4更改为1(总成本为4)。 x4x4x^4x4+4x3+6x2+4x+1x4+4x3+6x2+4x+1x^4+4x^3+6x^2+4x+1xxx(x+1)4(x+1)4(x+1)^4xxx4x34x34x^36x26x26x^24x4x4x

2
保持增长的无向图的平衡生成树
我正在寻找方法来维护图的相对平衡的生成树,因为我向图添加了新的节点/边。 我有一个无向图,该图以单个节点“根”开始。 在每个步骤中,我都会在图上添加一个新节点和将其连接到图的边,或者仅添加一个新的边来连接两个旧节点。随着图形的增长,我会维护一棵生成树。大多数情况下,这意味着当我添加新节点和边时,会将新节点设置为它所连接的旧节点的子节点。 我无法控制新节点的添加顺序,因此上述树构建算法显然会导致生成树不平衡。 有谁知道在线启发式技术可以使生成树“相对平衡”,同时最大程度地减少重新树的工作量?我对树结构有完全控制。我无法控制的是图形连接性,或者添加新节点的顺序。 请注意,标准的Google对诸如“平衡”,“生成”和“树”之类的术语的响应似乎是二叉树和B树,两者均不适用。我的图节点可以具有任意数量的邻居,因此树节点可以具有任意数量的子代,而不是像二叉树那样的2个子代。B树通过更改其邻接表来保持平衡,而我无法更改图的连接性。

5
是否可以测试可计算数字是有理数还是整数?
是否可以通过算法测试可计算数是有理数还是整数?换句话说,将有可能为图书馆实现可计算数提供的功能isInteger还是isRational? 我猜测这是不可能的,并且这在某种程度上与以下事实有关:无法测试两个数字是否相等,但是我看不出如何证明这一点。 编辑:可计算的数字xxx由函数给出,该函数fx(ϵ)fx(ϵ)f_x(\epsilon)可以返回精度为ϵ的的有理近似值:| x − f x(ϵ )| ≤ ε,对于任何ε > 0。鉴于这样的功能,就是可以测试,如果X ∈ Q或X ∈ ž?xxxϵϵ\epsilon|x−fx(ϵ)|≤ϵ|x−fx(ϵ)|≤ϵ|x - f_x(\epsilon)| \leq \epsilonϵ>0ϵ>0\epsilon > 0x∈Qx∈Qx \in \mathrm{Q}x∈Zx∈Zx \in \mathrm{Z}
18 computability  computing-over-reals  lambda-calculus  graph-theory  co.combinatorics  cc.complexity-theory  reference-request  graph-theory  proofs  np-complete  cc.complexity-theory  machine-learning  boolean-functions  combinatory-logic  boolean-formulas  reference-request  approximation-algorithms  optimization  cc.complexity-theory  co.combinatorics  permutations  cc.complexity-theory  cc.complexity-theory  ai.artificial-intel  p-vs-np  relativization  co.combinatorics  permutations  ds.algorithms  algebra  automata-theory  dfa  lo.logic  temporal-logic  linear-temporal-logic  circuit-complexity  lower-bounds  permanent  arithmetic-circuits  determinant  dc.parallel-comp  asymptotics  ds.algorithms  graph-theory  planar-graphs  physics  max-flow  max-flow-min-cut  fl.formal-languages  automata-theory  finite-model-theory  dfa  language-design  soft-question  machine-learning  linear-algebra  db.databases  arithmetic-circuits  ds.algorithms  machine-learning  ds.data-structures  tree  soft-question  security  project-topic  approximation-algorithms  linear-programming  primal-dual  reference-request  graph-theory  graph-algorithms  cr.crypto-security  quantum-computing  gr.group-theory  graph-theory  time-complexity  lower-bounds  matrices  sorting  asymptotics  approximation-algorithms  linear-algebra  matrices  max-cut  graph-theory  graph-algorithms  time-complexity  circuit-complexity  regular-language  graph-algorithms  approximation-algorithms  set-cover  clique  graph-theory  graph-algorithms  approximation-algorithms  clustering  partition-problem  time-complexity  turing-machines  term-rewriting-systems  cc.complexity-theory  time-complexity  nondeterminism 

3
合并两个二叉搜索树
我正在寻找一种算法来合并两个任意大小和范围的二进制搜索树。我实现此目标的明显方法是找到整个子树,其范围可以适合另一棵树中的任意外部节点。然而,运行时间对于这类算法的最坏情况似乎是数量级的O(n+m)地方n,并m分别为每棵树的大小。 但是,有人告诉我可以在中完成此操作O(h),其中h的树的高度更大。我完全不知道这是怎么可能的。我尝试过先旋转一棵树,但是将一棵树旋转成脊柱已经是O(h)了。

1
订单维护问题(或“维护列表中的订单”)是为了支持以下操作: singleton:创建一个包含一个项目的列表,并返回指向它的指针 insertAfter:给定一个指向项目的指针,在其后插入一个新项目,并返回指向该新项目的指针 delete:给定指向项目的指针,将其从列表中删除 minPointer:给定两个指向同一列表中项目的指针,则返回更靠近列表前面的那个 我知道此问题的三种解决方案可以在摊销时间内执行所有操作。它们都使用乘法。O(1)O(1)O(1) Athanasios K. Tsakalidis:维护广义链表中的顺序 Dietz,P.,D. Sleator,两种用于维护列表顺序的算法 Michael A. Bender,Richard Cole,Erik D. Demaine,Martin Farach-Colton和Jack Zito,“维护列表中顺序的两种简化算法” 是否可以在摊销时间内以列表形式维护订单,而无需使用A C 0以外的任何算术运算?O(1)O(1)O(1)AC0AC0AC^0

3
Bob的销售(对具有约束的对进行重新排序以最大程度地减少产品总和)
我前一阵子在Stack Overflow上问过这个问题:问题:Bob的sale。有人建议也将问题张贴在这里。 有人已经在这里提出了与此问题相关的问题- 给定基数的最小重量子森林 -但据我了解,这对我的问题没有帮助。StackOverflow上评分最高的答案也值得一看。 这是我的StackOverflow问题的逐字记录副本。该网站的格式可能不适当(哎呀,我只是在这里问这个问题而感到没有足够的知识),因此可以随时对其进行编辑: 注意:这是对现实生活中有关对SWF文件中的记录进行排序的问题的抽象措词。一个解决方案将帮助我改善开源应用程序。 鲍勃(Bob)有一家商店,并想进行销售。他的商店有许多产品,并且每种库存产品都有一定数量的单位数量。他还具有许多在架子上安装的价格标签(与产品数量一样多),并且价格已经打印在标签上。他可以在任何产品上贴上任何价格标签(该产品的全部库存价格统一为一件产品),但是某些产品还有其他限制-任何此类产品可能都不比某些其他产品便宜。 您必须找到如何安排价格标签的方法,以使鲍勃所有商品的总成本尽可能低。总成本是每种产品分配的价格标签的总和乘以该产品的库存数量。 鉴于: N –产品数量和价格标签 小号我,0≤ 我 <N -与指数产品的库存数量我(整数) P Ĵ,0≤ Ĵ <N -具有索引价格标签上的价格Ĵ(整数) K –附加约束对的数量 甲ķ,B ķ,0≤ ķ <K -产品指数对附加的约束 任何产品索引最多只能在B中出现一次。因此,由该邻接表形成的图实际上是一组有向树。 该程序必须找到: 中号我,0≤ 我 <N -从产品索引映射到价格标签指数(P 中号我是产品的价格我) 满足条件: P 中号甲ķ ≤P 中号乙ķ,对于0≤ ķ <K Σ(š 我 ×P 中号我)为0≤ 我 <N是最小 请注意,如果不是针对第一个条件,则解决方案将是简单地按价格对标签进行排序,并按数量对产品进行排序,然后直接将二者进行匹配。 输入的典型值为N,K …



4
红色和黑色树的子范围
在尝试修复库中的错误时,我搜索了有关在红树和黑树上找到子范围的论文,但没有成功。我正在考虑使用拉链的解决方案,以及与 不可变数据结构的删除算法上常用的追加操作类似的方法,但我仍在想是否还有我找不到的更好方法,甚至某些最低复杂度边界在这样的手术上? 明确地说,我正在谈论一种算法,给定一棵红黑树并有两个边界,它将生成一个新的红黑树,其中第一棵树的所有元素都属于这些边界。 当然,复杂度的上限是遍历一棵树并通过添加元素构造另一棵树的复杂度。

1
给定基数的最小权重子森林
这个问题是由关于stackoverflow的问题引起的。 假设您在节点(标记为)上得到了根树(即,有一个根并且节点具有子节点等)。TTTnnn1,2,…,n1,2,…,n1, 2, \dots, n 每个顶点都有一个关联的非负整数权重:。iiiwiwiw_i 此外,还给您一个整数,使得。kkk1≤k≤n1≤k≤n1 \le k \le n 一组节点的权重是节点的权重之和:。W(S)W(S)W(S)S⊆{1,2,…,n}S⊆{1,2,…,n}S \subseteq \{1,2,\dots, n\}∑s∈Sws∑s∈Sws\sum_{s \in S} w_s 给定输入,和,TTTwiwiw_ikkk 的任务是找到一个最小重量子森林*,中,使得 具有完全相同节点(即)。SSSTTTSSSkkk|S|=>k|S|=>k|S| = > k 换句话说,对于任何subforest的,使得,我们必须有。S′S′S'TTT|S′|=k|S′|=k|S'| = kW(S)≤W(S′)W(S)≤W(S′)W(S) \leq W(S') 如果每个节点的子节点数是有界的(例如,二叉树),则存在使用动态规划的多项式时间算法。 我觉得这对一般树木来说是NP-Hard,但我还找不到任何参考/证明。我什至看过这里,但找不到可能有帮助的东西。我觉得即使您限制,这仍将是NP-Hard (这可能更容易证明)。wi∈{0,1}wi∈{0,1}w_i \in \{0,1\} 看来这应该是一个经过充分研究的问题。 有谁知道这是否是NP-Hard问题/是否存在已知的P时间算法? *的子森林是树的节点的子集,因此,如果,则所有子代也都在。(即,它是的根子树的不交集并集)。TTTSSSTTTx∈Sx∈Sx \in SxxxSSSTTT PS:如果事实证明我错过了明显的事情,而这个问题确实是题外话,请原谅我。

2
矩形的生成树数的精确公式
该博客讨论使用计算机生成“扭曲小迷宫”并对其进行枚举。可以使用Wilson算法获得UST进行枚举,但我不记得其中有多少的公式。 http://strangelyconsistent.org/blog/youre-in-a-space-of-twisty-little-mazes-all-alike 原则上,矩阵树定理指出图的生成树数等于图的拉普拉斯矩阵的行列式。令为图,为邻接矩阵,为度矩阵,然后的特征值,然后:G = (E,V)G=(E,V)G= (E,V)一个AAdDDΔ = D − AΔ=D−A\Delta = D - Aλλ\lambda k (G )= 1ñ∏k = 1n − 1λķk(G)=1n∏k=1n−1λk k(G) = \frac{1}{n} \prod_{k=1}^{n-1} \lambda_k 在矩形的情况下,和特征值均应采用特别简单的形式,而我找不到。 m × nm×nm \times n一个AA 矩形的生成树#的确切公式(和渐近性)是什么?m × nm×nm \times n 这是威尔逊运算法则的一个很好的例子。

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.