私のベンチマークの結果は、分岐の確率が 50% ではなく 15% (または 85%) の場合にパフォーマンスが最悪であることを示しています。
説明はありますか?
コードは長すぎますが、関連する部分は次のとおりです。
private int diff(char c) {
return TABLE[(145538857 * c) >>> 27] - c;
}
@Benchmark int timeBranching(int reps) {
int result = 0;
while (reps-->0) {
for (final char c : queries) {
if (diff(c) == 0) {
++result;
}
}
}
return result;
}
指定された文字列内のBREAKING_WHITESPACE文字の数をカウントします。結果は、分岐確率が約 0.20 に達すると、急激な時間の低下 (パフォーマンスの向上) を示しています。
ドロップの詳細。シードを変化させると、より奇妙なことが起こっていることがわかります。崖の近くを除いて、最小値と最大値を示す黒い線が非常に短いことに注意してください。