2010-02-27 2 views
1

У меня есть 2 набора интервалов, как:Учитывая число, с каким интервалом оно вписывается?

xCoords: (0, 60], (60, 120], (120, 180] ... 
yCoords: (0, 60], (60, 120], (120, 180] ... 

Размер каждого интервала гарантированно будет то же самое, но размер в интервале xCoord не должны быть размером с yCoord интервала , (Я мог бы сделать эту жертву в общности, если это необходимо для оптимизации, но это возможно в будущем я могу хотеть различные yCoord и xCoord размеров.)

Я также данные пары, такие как:

(x, y) 
(0, 60) 
(123, 52) 
(34, 196) 

Sample ответы на вышесказанное:

(lowerBoundX, lowerBoundY) 
(0, 60) 
(120, 0) 
(0, 180) 

Что является наиболее оптимальным способом найти, с каким интервалом они принадлежат? Вот то, что я в настоящее время:

 // we'll need to be able to access these outside of the loops 
     uint minWidth = 0; 
     uint minHeight = 0; 

     for (minWidth = 0; minWidth + cellWidth <= xToFind; minWidth += cellWidth) ; 
     for (minHeight = 0; minHeight + cellHeight <= yToFind; minHeight += cellHeight) ; 

В конце этого цикла, minWidth представляет собой нижнюю границу интервала x и minHeight представляет нижнюю границу интервала y.

Итак, могу ли я найти более быстрый способ сделать это? Профилировщик идентифицирует петли for как самые медленные части функции.

ответ

3

Если размеры в X постоянны, вы можете найти это гораздо более эффективно:

public int GetPosition(int size, int coord) 
{ 
    int index = coord/size; 
    return index * size; 
} 

Тогда вы можете сделать:

lowerBoundX = GetPosition(xSize, xCoord); 
lowerBoundY = GetPosition(ySize, yCoord); 
+1

Причина это работает, потому что INT/INT = INT, с усечением десятичных знаков. Когда вы снова умножаете делитель, вы получаете нижнюю границу. –

+0

Целочисленное подразделение отлично подходит для оптимизации многих подобных подпрограмм. :) - Однако, если размеры вашей ячейки меняли каждый шаг и не были постоянными, вам, вероятно, пришлось бы вернуться к более сложному алгоритму (хотя все же были бы намного лучшие варианты, чем цикл ...) –

Смежные вопросы