0

我的教授给我们分配了一项任务,以使用线性和二进制算法测试运行时间和搜索大小的差异,并将数据绘制成图表。

我有搜索方法将运行时和数组大小作为点放在 ArrayList 中,然后将其发送到 GraphResults 类进行绘图。我需要先将这些数据点转换为 xy 坐标。搜索大小是 x 轴,运行时间是 y 轴

由于搜索大小固定为 128 的倍数并且只有 8 个大小,我使用 switch 来计算 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 次测试。有没有更有效的方法来根据数字大小分配数字?

4

3 回答 3

2

当您尝试确定测量范围时,您可以将数量除以范围大小,然后计算要在图表中显示的数字。

顺便说一句,在你的代码中,你犯了一个逻辑错误,如果值是y <= 1000第一个条件评估为真,第二个 fory <= 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 回答