2010-01-19 70 views
0

我的教授給了我們一個任務,使用線性&二進制算法測試運行時和搜索大小的差異,並將數據繪製成圖。將隨機數轉換爲XY座標進行製圖

我有搜索方法將運行時&陣列大小作爲點數放入一個ArrayList中,然後發送給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 

眼下,即超過5000毫秒的號碼需要7次測試。有沒有更有效的方式來根據號碼大小分配號碼?

回答

2

當您試圖確定您的測量範圍時,您可以將範圍大小除以該範圍,然後計算想要在圖表中顯示的數字。

順便說一句,在您的代碼中,如果值爲y <= 1000,則表示邏輯錯誤,第一個條件的計算結果爲true,第二個條件的計算結果永遠不會被計算。

此外,它似乎越高的值範圍,你的圖點越低。那是否如預期的那樣? (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; 

請注意,超出範圍的索引作爲大於數組中最大值的值的範圍。

+0

我正在使用的圖形庫附帶了課本。它很像Turtle對象,只是更加用戶友好,並且它在屏幕上顯示光標x-y座標。對於弄清楚在哪裏放置東西非常有用。唯一的缺點是(0,0)座標位於窗口的左上角,所以這就是爲什麼值看起來偏斜 – Jason 2010-01-19 19:57:14

1

如何newy = yaxis - 32 * ((y/250)% 8);?

+0

對於y <250,它會產生newy = yaxis。 – wtaniguchi 2010-01-19 16:55:32

+0

這看起來像它會工作,並有一些測試要做。謝謝! – Jason 2010-01-19 17:13:48

1

我會重新格式化您的代碼,以更多的東西是這樣的:

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

這樣,你計算乘數,而不是手動選擇它。

+0

從效率的角度來看這真的是一個打擊?由於y軸上<20點,花費不到3分鐘就可以設置乘數 – Jason 2010-01-19 17:16:10

+0

我不確定我明白你在這裏問的是什麼。 該行對嵌套if語句的好處是可以縮放到y軸上的任意數量的點,並且需要更少的週期來計算。 – Aaron 2010-01-19 17:45:48