Algorithm 当一个点移动时,有效地重新计算点集的边界矩形
我有一系列的要点。我需要找到最小的边界矩形,它包含每次移动点时的所有点 可以在每次移动一个点时迭代所有点并查找最小/最大坐标-Algorithm 当一个点移动时,有效地重新计算点集的边界矩形,algorithm,complexity-theory,asymptotic-complexity,Algorithm,Complexity Theory,Asymptotic Complexity,我有一系列的要点。我需要找到最小的边界矩形,它包含每次移动点时的所有点 可以在每次移动一个点时迭代所有点并查找最小/最大坐标-O(n) 我想知道,在第一次移动之后,这能比O(n)更快吗 我想我可以找到初始边界矩形,然后以某种方式只更新它。一种方法是使用4堆 x坐标的Minheap x坐标的Maxheap y坐标的Minheap y坐标的Maxheap 堆的顶部条目给出了边界框的位置,对于每个移动的点,堆可以在O(logn)时间内更新 (注意,这只提供了一个轴对齐的边界框)一种方法是使用4个堆 x
O(n)
我想知道,在第一次移动之后,这能比O(n)
更快吗
我想我可以找到初始边界矩形,然后以某种方式只更新它。一种方法是使用4堆
(注意,这只提供了一个轴对齐的边界框)一种方法是使用4个堆
(注意,这只提供一个轴对齐的边界框)轴对齐的矩形,或否?是,与水平X轴和垂直Y轴对齐。轴对齐的矩形,或否?是,与水平X轴和垂直Y轴对齐。谢谢!我在想我需要什么样的数据结构——数组、链表和排序链表也提供了
O(n)
。我对堆知之甚少,但我会了解的。嗯。。。移动点时,如何识别该点?除非我们已经知道它在每个堆中的位置,否则我们需要首先找到它,即O(n)(至少对于二进制堆)。使用2个二叉树而不是4个堆将为移动和查找BB留出O(logn)查找时间。@j_random_hacker您可以在堆中存储指向点结构的指针,在点结构中存储指向堆中位置的指针。无论何时移动堆中的元素,都会更新点结构中相应的指针。然而,二叉树可能是一个更好的选择。尽管我突然想到,如果点查询以“Move(x,y)to(a,b)”的形式到达(而不是“by handle”--如“将地址z处的结构表示的点移动到(a,b)”,那么(x,y)可能会通过在中查找而转换为方法所需的地址z。。。一个二叉树:)(或者一个哈希,不可否认。)谢谢!我在想我需要什么样的数据结构——数组、链表和排序链表也提供了O(n)
。我对堆知之甚少,但我会了解的。嗯。。。移动点时,如何识别该点?除非我们已经知道它在每个堆中的位置,否则我们需要首先找到它,即O(n)(至少对于二进制堆)。使用2个二叉树而不是4个堆将为移动和查找BB留出O(logn)查找时间。@j_random_hacker您可以在堆中存储指向点结构的指针,在点结构中存储指向堆中位置的指针。无论何时移动堆中的元素,都会更新点结构中相应的指针。然而,二叉树可能是一个更好的选择。尽管我突然想到,如果点查询以“Move(x,y)to(a,b)”的形式到达(而不是“by handle”--如“将地址z处的结构表示的点移动到(a,b)”,那么(x,y)可能会通过在中查找而转换为方法所需的地址z。。。二叉树:)(或者说是散列