Преобразование случайных чисел в координаты XY для построения графиков - PullRequest
0 голосов
/ 19 января 2010

Мой профессор дал нам задание проверить разницу во времени выполнения и размерах поиска, используя линейные и двоичные алгоритмы, и данные должны быть получены.

У меня есть методы поиска, которые помещают во время выполнения и размеры массива как Точки в 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 тестов. Есть ли более эффективный способ присвоения номера в зависимости от размера номера?

Ответы [ 3 ]

2 голосов
/ 19 января 2010

Когда вы пытаетесь определить диапазон вашего измерения, вы можете разделить сумму на размер диапазона, а затем вычислить число, которое вы хотите отобразить на графике.

Кстати, в вашем коде,Вы допустили логическую ошибку, если значение 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;

Обратите внимание, что индекс вне диапазона действует как диапазон, найденный для значения, которое больше, чем самое большое значение в вашем массиве.

1 голос
/ 19 января 2010

Я бы переформатировал ваш код в нечто более похожее на это:

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

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

1 голос
/ 19 января 2010

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

...