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

时间:2013-02-05 20:43:55

标签: algorithm sorting stream-compaction

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

这是挑选所有'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];
}

与此同时,这将涉及散布指令。

1 个答案:

答案 0 :(得分:0)

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

你只需要算上As。不要从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