Find Rectangle包含来自矩形数组的Point

时间:2017-06-13 20:57:01

标签: ios objective-c cgrect

我有一个矩形数组。试图找出一个包含给定点的矩形。我可以迭代这个数组并使用CGRectContainsPoint来找到包含这一点的rect。伪代码如下

bar@foonabisco.com
nabisco

我觉得如果我的数组太大而我必须迭代大数组,这在性能方面可能不是优雅的解决方案。如果有任何最佳解决方案或算法以乐观的方式找到它,有人可以帮助我。

2 个答案:

答案 0 :(得分:0)

对于大型数组,您可以使用枚举循环,它将在后台线程上运行而不会妨碍您的主线程。

答案 1 :(得分:0)

  

我觉得如果我的数组太大而我必须迭代大数组,这在性能方面可能不是优雅的解决方案。如果有任何最佳解决方案或算法以乐观的方式找到它,有人可以帮助我。

首先,您确实遇到了性能问题吗?在考虑如何改进算法之前确定。一旦你确信需要做些什么,那就继续......

您当前的解决方案是通过矩形集合进行线性搜索,它是一种O(N)解决方案。要改进这一点,您需要一种搜索​​方法,以减少您需要进行的测试次数,例如:有序集合中的二进制搜索具有更好的O(log N)行为。

要使用有序集合,您不希望为每次搜索排序无序集合,完整排序为O(NlogN)。相反,你需要考虑保持你的集合排序添加项目,以便维持排序,每次插入的性能可以是O(log N),与二进制搜索相同。

这就是一个大问题,您能为矩形设计合适的排序,以便对它们进行排序吗?如果点的x坐标小于原点的x坐标,则在测试包含时,可以通过x-coordindate对原点进行排序,然后该点不能在排序后面的任何矩形中。您可能希望根据原点坐标等来查看排序。

TL; DR:

  1. 对矩形列表进行排序并保持排序(每次插入O(log N))
  2. 以某种方式订购矩形,考虑使用此
  3. 的原点坐标
  4. 使用二分搜索(O(log N))
  5. 等搜索点的包含

    这可能会让一切变得更快。

    如果您在研究排序和搜索后遇到问题并编写了一些代码,请提出一个新问题,显示您的代码,详细说明您的算法(特别是您选择的顺序),并描述您遇到的问题。毫无疑问,有人会帮助你。

    HTH