0

ストリーム圧縮アルゴリズムの最終的な排他的スキャン値はどうなりますか?

これは、すべての「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

明らかに、2 番目の例は、これらのアドレスに書き込むスキャン値を単純なループで処理することに基づいて、誤った最終結果を示しています。

ここで何が欠けていますか?

アップデート:

スキャンアルゴリズムを理解しているので、次と同等のことを行います。

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

並行して、これには分散命令が含まれます。

4

1 に答える 1

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
于 2013-02-06T04:28:13.757 に答える