Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 当一个点移动时,有效地重新计算点集的边界矩形_Algorithm_Complexity Theory_Asymptotic Complexity - Fatal编程技术网

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堆

  • x坐标的Minheap
  • x坐标的Maxheap
  • y坐标的Minheap
  • y坐标的Maxheap
  • 堆的顶部条目给出了边界框的位置,对于每个移动的点,堆可以在O(logn)时间内更新


    (注意,这只提供了一个轴对齐的边界框)

    一种方法是使用4个堆

  • x坐标的Minheap
  • x坐标的Maxheap
  • y坐标的Minheap
  • y坐标的Maxheap
  • 堆的顶部条目给出了边界框的位置,对于每个移动的点,堆可以在O(logn)时间内更新


    (注意,这只提供一个轴对齐的边界框)

    轴对齐的矩形,或否?是,与水平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。。。二叉树:)(或者说是散列