質問
私の教授が私たちにランタイムの違いをテストし、リニア&バイナリのアルゴリズムを使用してサイズを検索するための割り当てを与え、データをグラフ化することである。
私は、検索方法は、その後、プロットするためGraphResultsクラスに送られArrayListに、内ポイントとしてランタイム&配列のサイズを入れています。私は前にx-y座標にそれらのデータポイントを変換する必要があります。検索のサイズは、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つのテストが必要です。数の大きさに基づいて番号を割り当てるには、より効率的な方法はありますか?
解決
、あなたがグラフに表示したい数を算出することで、その後、範囲の大きさによって量を分割することができます。
ところで、あなたのコードでは、値がtrueにy <= 1000
最初の条件評価している場合は、論理エラーをした、とy <= 750
ための第二は、評価されることはありません。
また、値の範囲が大きいほど、あなたのグラフのポイントを下げているようです。それは意図したとおりですか? (1,000 - > 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;
範囲は、あなたの配列で最大の値よりも大きい値のために見られるような範囲外のインデックスが作用することです。 注意
他のヒント
どの程度newy = yaxis - 32 * ((y/250)% 8);?
私はもっとこのような何かにあなたのコードを再フォーマットします。
newy = yaxis - 32 * ((y-1)/250 + 1);
この方法で、あなたはそれを手動で選択するのではなく、乗数を計算しています。