2010-01-19 4 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, а второе для y <= 750 никогда не будет оценено.

Также кажется, что чем выше диапазон значений, тем ниже ваша точка графика. Это так, как предполагалось? (1000 -> уты - 128, а 1 -> уты - 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

1

Как насчет newy = yaxis - 32 * ((y/250)% 8);?

+0

Для y <250 это даст newy = yaxis. – wtaniguchi

+0

Похоже, что это сработает, и нужно провести некоторое тестирование. Благодаря! – Jason

1

Я бы переформатировать ваш код что-то больше, как это:

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

Таким образом, вы вычисления множителя, а не выбирать его вручную.

+0

Действительно ли это удар по эффективности? Поскольку на оси y имеется <20 точек, для получения множителей – Jason

+0

потребовалось менее 3 минут. Я не уверен, что понимаю, что вы здесь задаете. Преимущества этой строки над вложенными операциями if заключаются в том, что она масштабируется до любого количества точек на оси y и требует меньше циклов для вычисления. – Aaron