Преобразование случайных чисел в координаты XY для графика
Вопрос
Мой профессор дал нам задание проверить разницу в времени запуска и размерах поиска с использованием линейных и двоичных алгоритмов, и данные должны быть графиками.
У меня есть методы поиска, размещающие размеры времени выполнения и массива в качестве точек в массиве, который затем отправляется в класс графства для построения построения. Мне нужно преобразовать эти точки данных в координаты 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
первое условие оценивается в True, а второе для 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);
Таким образом, вы рассчитываете множитель, а не выбираете его вручную.