【发布时间】:2019-05-31 01:42:30
【问题描述】:
我有一个长度为 N 的二进制字符串,它是 2 的幂 (N = 2^n)。
我需要提取长度为L 的特定模式,这是2 (L = 2^l) 的幂。
在全二叉树中,这些模式应该
- 从左叶节点(偶数索引)开始
- 以右叶节点(奇数索引)结束。
这些模式应该包括整个子树的叶子。 我需要提取的模式是,
(1). 0 0 --- 0 (All zero)
(2). 1 1 --- 1 (All one)
(3). 0 0 --- 1 (Only the last right leaf is one).
例如,如果我有一个二进制字符串N=16,(n=4) 比如
0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0,我要解压
索引
0 to 7为模式 (3),索引
8 to 11为模式 (2) 和最后一个
4索引为模式 (1)。
我需要它作为通道解码算法的一部分来修剪二叉树。在 Matlab 中有没有一种有效的方法来做到这一点?
【问题讨论】:
-
您是否尝试过实际构建该树并递归评估分支?
-
为了进一步澄清,这些模式可以存在于字符串中的任何位置。但是每个模式都应该从子树最左边的叶子开始,到子树最右边的叶子结束。
-
@CrisLuengo 我添加了我递归实现的代码。
-
那是很好的代码,我不知道如何显着改进它。我建议您不要使用
pattern3_indices = [pattern3_indices ; [st,ed]];,而是使用pattern3_indices(end+1,:) = [st,ed];,这通常更快。任何您可能想要将all添加到if chunk == pattern3:if all(chunk == pattern3)。all是默认应用的,但很高兴明确说明它(我一直在查找if与数组的行为是什么)。 -
@CrisLuengo 谢谢!会这样做。
标签: matlab binary-tree