在列表中查找对应给定条件的最大元素

时间:2016-03-12 13:55:47

标签: algorithm

我有一个带坐标和值的元素列表:

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)。

1 个答案:

答案 0 :(得分:0)

您可以根据值High - &gt;反向排序元素列表吗?低。 然后找到满足x / y的第一个匹配 - &gt;你想要的条件?

相关问题