题
我的教授给我们的分配,以测试在运行时间的差异,使用线性和二进制搜索算法的大小,并且数据将被绘制。
我有搜索方法把运行&数组大小作为一个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周的测试。是否有基于多个尺寸分配的号码的更有效的方式?
解决方案
如你正在试图确定你的测量范围,则可以除以的范围内大小的量,然后通过计算要在图形以显示该号码。
顺便说一下,在代码中,则制成的逻辑错误,如果该值是y <= 1000
第一条件评估为真,而对于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;
请注意外的范围中的索引作为范围找到的比阵列中的最大值更大的值的作用。
其他提示
如何newy = yaxis - 32 * ((y/250)% 8);?
我会重新格式化您的代码,以更多的东西是这样的:
newy = yaxis - 32 * ((y-1)/250 + 1);
这样,你计算乘数,而不是手动选择它。
不隶属于 StackOverflow