我有一个带坐标和值的元素列表:
element: {x, y, value}
所有值都不同。
然后我有一个查询列表要求具有最高值的元素,其到给定点A的水平或垂直距离小于或等于r
。
abs(element.x - A.x) <= r && abs(element.y - A.y) <=r
查询A
中点Q(i)
的X坐标将始终大于或等于查询A
中点Q(i-1)
的x坐标(点A按升序排序) )
我已经制作了一个算法,用x坐标对元素进行排序,然后有两个迭代器表示列表中元素的间隔,它对应于给定的条件,但是我的工作速度不够快。
最多每个查询的时间复杂度应为O(log(n))。
编辑:
我当前算法的伪代码:
list = {element1, element2, element3, element4 ... }
// sotring by x-coordinate
sort( list, by_x_coordinate )
begin = list.begin
end = list.begin
for every query Q(x,y) {
while end.x > x+r {
end = end + 1
}
while begin.x < x-r {
begin = begin + 1
}
// element we are looking for is now somewhere between begin and end
// we loop over all elements with potentially greatest value
max = -inf
for i = begin to end {
if (list[i].y <= y+r) && (list[i].y >= y-r) {
if list[i].value > max {
max = list[i].value
}
}
}
}
在最坏的情况下它具有O(n * q)的时间复杂度,但在最佳情况下它具有O(q + n)。
答案 0 :(得分:0)
您可以根据值High - &gt;反向排序元素列表吗?低。 然后找到满足x / y的第一个匹配 - &gt;你想要的条件?