在这两种情况下,船舶不重叠,可能相邻。
案例1-所有船舶均1xN
且垂直或水平
Ship对象包含起始点的坐标(顶部
左)、方向和大小
每次发射一发子弹,我们都会在所有船只上迭代,对于每艘船只,我们计算它们的坐标,并确定
坐标与快照坐标匹配
这看起来已经很低效了,因为每次拍摄我们都要在所有的飞船上迭代。
案例2-所有船只都是任意大小的,董事会是10亿乘10亿平方米,有100万艘船只
使用前一种方法肯定行不通,因为我们必须为每艘船保存一份所有坐标的列表,而且每次拍摄都需要很长的时间来处理
跟踪船舶位置/坐标的最有效方法是什么,以便解决方案能够优雅地缩放?
最佳答案
我认为这对于四叉树来说是很自然的(https://en.wikipedia.org/wiki/Quadtree)。
这些工作通过递归地将一个二维区域划分为4个子区域。它利用了许多次区域将是相同的这一事实我引用维基百科:
四叉树是一种树型数据结构,其中每个内部节点正好有四个子节点四叉树是八叉树的二维模拟,通常用于通过递归地将二维空间细分为四个象限或区域来划分二维空间与叶单元相关联的数据因应用程序而异,但叶单元表示“感兴趣的空间信息单元”。
细分区域可以是正方形或矩形,也可以具有任意形状。这种数据结构在1974年被Raphael Finkel和J.L.Bentley命名为四叉树。类似的分区也称为q树。所有形式的四叉树都有一些共同的特点:
他们把空间分解成适应性强的细胞
每个电池(或桶)具有最大容量。当达到最大容量时,铲斗分离。
树目录遵循四叉树的空间分解。
这样可以有效地存储和查询空间。