Algorithm 二叉树:从元素的签名获取元素的路径

Algorithm 二叉树:从元素的签名获取元素的路径,algorithm,tree,bit-manipulation,bitwise-operators,bit-shift,Algorithm,Tree,Bit Manipulation,Bitwise Operators,Bit Shift,假设您有一个对图像进行分类的二叉树。每个节点都是一个不同的二进制测试。将图像馈送到树时,将生成通过树的唯一路径 路径被描述为与树的深度一样长的二进制字 例如,对于两级二叉树,路径的示例是(0,1)((左,右),因此从左到右以树的第二个叶结束) 我们还假设,对于任何馈送到树的映像,所有节点测试都是可执行的。因此,我们可以为任何图像定义一个签名:该签名是一个长度为节点数的二进制字 例如,对于两级二叉树,签名的示例是s={0,1,1} s[i]是第i个节点测试的二进制结果 我正在寻找一种从签名中获取图

假设您有一个对图像进行分类的二叉树。每个节点都是一个不同的二进制测试。将图像馈送到树时,将生成通过树的唯一路径

路径被描述为与树的深度一样长的二进制字

例如,对于两级二叉树,路径的示例是(0,1)((左,右),因此从左到右以树的第二个叶结束)

我们还假设,对于任何馈送到树的映像,所有节点测试都是可执行的。因此,我们可以为任何图像定义一个签名:该签名是一个长度为节点数的二进制字

例如,对于两级二叉树,签名的示例是
s={0,1,1}

s[i]
是第i个节点测试的二进制结果

我正在寻找一种从签名中获取图像路径的方法

一种简单的方法是从签名的一个索引跳到另一个索引,并适当减小跳跃长度

然而,我想知道是否有一个按位计算可以产生结果(签名中的索引可以在必要时重新组织)


这可能吗?如果是,如何进行?

一个阶段有一个测试

有两个阶段,即1+2测试

有3个阶段,有1+2+4个测试

有4个阶段,有1+2+4+8个测试

在5个阶段中,有1+2+4+8+16=31个测试

计算路径速度更快的一种方法是测试第一位,然后提取对应的15位集,映射到接下来的4个阶段。只有2**15=32768个不同的选项,因此可以在表中查找路径

伪代码:

 if (x&(1<<30))
    x >>= 15;
 path = lookup[x & 0x7fff];
if(x&(1=15;
路径=查找[x&0x7fff];

查找是一个2**15长度的数组,您可以预先计算。

一个阶段有一个测试

有两个阶段,即1+2测试

有3个阶段,有1+2+4个测试

有4个阶段,有1+2+4+8个测试

在5个阶段中,有1+2+4+8+16=31个测试

计算路径速度更快的一种方法是测试第一位,然后提取对应的15位集,映射到接下来的4个阶段。只有2**15=32768个不同的选择,因此可以在表中查找路径

伪代码:

 if (x&(1<<30))
    x >>= 15;
 path = lookup[x & 0x7fff];
if(x&(1=15;
路径=查找[x&0x7fff];

查找是一个2**15长度的数组,您可以预先计算。

对于真实世界的示例,您的二叉树有多少个阶段?实践中有5个阶段。谢谢您对于真实世界的示例,您的二叉树有多少个阶段?实践中有5个阶段。谢谢