假设是一棵不知道其结构的恒定度树。问题是通过询问以下形式的查询来输出树:“节点是否位于从节点到节点的路径上?”。假设每个查询都可以由Oracle在固定时间内回答。我们知道的值,即树中节点的数量。目的是使输出树所需的时间最小化为。T x a b n n
是否存在针对上述问题的算法?
假设中任何节点的度数最大为3。
我知道的
有直径的情况很容易。如果树的直径为,则可以得到分治算法:
任何二叉树都有一个很好的分隔符,可以将树分成大小不小于1 / 3n的分量。
- 选择任何顶点x。如果它是一个很好的分隔符,则标签并递归。
- 找到x的所有3个邻居。
- 向节点数最多的邻居方向移动。与邻居重复步骤2。
由于找到分隔符最多需要步,因此我们得到了算法。O (n D log n )
一个随机化算法。(从下面的评论中删除)
随机选择两个顶点x和y。它们以1/9的概率位于分隔符的相对侧。选择从到的路径的中间节点。看看是否是分隔符,如果不是,则执行二进制搜索。ÿ
查找分隔符需要预期时间。这样我们得到了随机算法。O (n
背景。我从一个在概率图形模型中工作的朋友那里得知了这个问题。上面的问题大致对应于使用一个预言机学习结点树的结构,该预言机在给定三个随机变量X,Y和Z的情况下,可以根据给定的Z值来判断X和Y之间的互信息的值。为零,我们可以假设Z位于从X到Y的路径上。