0

私の教授は、線形アルゴリズムと二分アルゴリズムを使用してランタイムと検索サイズの違いをテストする割り当てを私たちに与えました。データはグラフ化されます。

検索メソッドにランタイムと配列のサイズをArrayListのPointsとして配置させ、それをGraphResultsクラスに送信してプロットします。前に、これらのデータポイントをxy座標に変換する必要があります。検索サイズはx軸で、実行時間はy軸です。

検索サイズは128の倍数に固定されており、サイズは8つしかないため、x値の計算にはスイッチを使用しましたが、ランタイムを座標に変換するより効率的な方法を探しています。

現在、私は次のように5のネストされた条件を使用しています。

if (y<=1000) {
    if (y<= 500) { 
        if (y<= 250) {
            newy= yaxis-32; }//equals to 250ms category
        else {
            newy= yaxis-(32*2); }//500ms category
   } 
else if (y<=750) {
    newy= yaxis-(32*3);} //750ms category
else {
    newy= yaxis-(32*4);} //1000ms category
} //end of the 1000ms tests

現在、5000msを超える数値には7回のテストが必要です。番号のサイズに基づいて番号を割り当てるより効率的な方法はありますか?

4

3 に答える 3

2

測定範囲を決定しようとしているので、量を範囲サイズで割ってから、グラフに表示する数値を計算できます。

ところで、あなたのコードでは、値がy <= 1000最初の条件がtrueと評価され、2番目の条件が評価されない場合に論理エラーが発生しましy <= 750た。

また、値の範囲が高いほど、グラフのポイントは低くなるようです。それは意図したとおりですか?(1000-> ymax --128、1-> ymax --32)

余談ですが、値を不均一な範囲と比較したい場合は、配列ルックアップ(擬似コード)のようなこともできます。

int[] ranges = new int { 50, 500, 5000, 50000 };

for (int n = 0; n < ranges.length && value > ranges[n]; n++) {
}

int range = n;
int newy = yaxis - range * 32;

範囲外のインデックスは、配列の最大値よりも大きい値に対して検出された範囲として機能することに注意してください。

于 2010-01-19T17:15:44.803 に答える
1

どうですかnewy = yaxis - 32 * ((y/250)% 8);?

于 2010-01-19T16:52:01.817 に答える
1

コードを次のように再フォーマットします。

newy = yaxis - 32 * ((y-1)/250 + 1);

このように、手動で選択するのではなく、乗数を計算します。

于 2010-01-19T16:53:13.433 に答える