【发布时间】:2020-08-28 13:32:46
【问题描述】:
假设你已经绘制了大量的盒子,用户可以在它们上面绘制一个矩形区域。
虽然我将在浏览器中实现它,但让我们将其抽象出来,并假设我们已经获得了每个矩形的每个点的坐标。
如果我想检查哪些框a) intersectb) are contained by选择,这里最有效的数据结构和算法是什么?
我目前的想法是:
- 按
x对所有框排序 - 通过 binsearch,检查哪些框与选择区域在 x 方向上重叠,然后,对于每个 x 方向重叠的框,检查它们是否也与 y 方向对齐。
或
- 按
x和y对所有框进行排序,每个框都在单独的数组中 - 通过 binsearch,首先找到所有 x 重叠的框,然后找到所有 y 重叠的框,然后检查两组中都有哪些框,
...虽然我很确定有一些众所周知的算法可以解决这样的问题。
【问题讨论】:
-
注意这里有一个区别:“我有大量的框,加上一个矩形区域;计算哪些框被选中最有效的方法是什么?”和“我有大量的框,我想准备一个数据结构,以便在将来最有效地找到选择了哪些框时,我得到了矩形区域”。
-
例如,逐一测试每个盒子,盒子的数量是线性的;而对盒子进行排序需要
n log n操作,其中n是盒子的数量;因此,虽然从长远来看排序可能是有效的(如果你只排序一次,然后重复呈现矩形区域),如果你想要一个只有一个矩形区域的即时结果,它实际上比简单算法效率低。 -
确实,我的意思是第二个:允许快速搜索的数据结构。将其添加到问题中。
标签: algorithm