-3

値を比較する必要があります。値が 3 以下の場合は何かを行い、値が 4 と 27 の間の場合は別のことを行いますが、値が 28 を超える場合は別のことを行います。多くのリソースを消費しない方法で、if のスイッチの使用を避けることができます?? 約 60k+ の値を比較する必要があります。

4

4 に答える 4

3

これ以上速いものはないと思います。データがどのように分散されているかを知っていれば、少しスピードアップできるかもしれません。たとえば、ほとんどの値が 27 を超えている場合は、まずその条件を確認するなどです。データが並べ替えられている場合は、それを利用する方法を見つけることもできます。

于 2012-10-07T22:15:51.327 に答える
1

条件演算子 ( ?:) を使用して、次のようにすることができます。

i = (i <= 3) ? DoSomething() : (i <= 27) ? DoSomething(): DoSomething();

これはさらに圧縮されており、私のコンピューター (6 GB RAM) ではif..else571400 ナノ秒かかり、ステートメントは 407400 ナノ秒かかるため、if..elseステートメントは高速ですが、条件演算子はより圧縮されています。

于 2012-10-07T22:48:20.823 に答える
1

クイックソートを使用して値をソートします。この実装により、if 比較の量が削減されますが、おそらく高速ではありません。

于 2012-10-07T22:18:52.683 に答える
1

私はこのようなチェックの時間を計った:

if (i <= 3) {
  DoSomething();
} else if (i <= 27) {
  DoSomethingElse();
} else {
  DoSomethingElse();
}

これを 60000 回実行すると、私のコンピューターでは約 35 マイクロ秒かかります。何をしていてもそれが長すぎる場合は、別の方法を試すのではなく、自分がしていることを再考する必要があります.

于 2012-10-07T22:27:03.803 に答える