理解流压缩算法中的最终值



流压缩算法中的最终独占扫描值应该发生什么?

这是一个挑选所有"A"字符的例子。

序列A:

Input:       A B B A A B B A
Selection:   1 0 0 1 1 0 0 1
Scan:        0 1 1 1 2 3 3 3
0 - A
1 - A
2 - A
3 - A

序列B(除最后一个值外相同):

Input:       A B B A A B B B
Selection:   1 0 0 1 1 0 0 0
Scan:        0 1 1 1 2 3 3 3
0 - A
1 - A
2 - A
3 - B

显然,第二个例子给出了错误的最终结果,基于对写入这些地址的扫描值进行天真的循环。

我在这里错过了什么?

更新:

根据我对扫描算法的理解,我会做以下等效的操作:

for (int i = 0; i < scan.length(); i++)
{
    result[scan[i]] = input[i];
}

同时,这将涉及分散指令。

在一个A之后,你假设至少会有另一个A。因此,你假设序列以A结束。如果没有,你就选错了最后一个字母。

你只需要计算A。不要从1开始。从0开始。只有当你找到A.时才增加这个计数

或者更新:

Input:       A B B A A B B A
Selection:   1 0 0 1 1 0 0 1
Scan:        0 1 1 1 2 3 3 3 4
                             ^
0 - A                        |
1 - A                        Four elements
2 - A
3 - A

Input:       A B B A A B B B
Selection:   1 0 0 1 1 0 0 0
Scan:        0 1 1 1 2 3 3 3 3
                             ^
0 - A                        |
1 - A                        Three elements
2 - A

相关内容

  • 没有找到相关文章

最新更新