假设我有一大组坐标,例如(3,4)
,(5,-6)
等,其中x
和y
是整数;是否可以使用BST订购它们?
如何确定 left vs right 节点应该是什么?
我之所以看BST而不是简单地使用坐标列表,是因为我可以更有效地(与线性搜索相比)确定那些将在另一个的摩尔邻域(Chebyshev距离1)中的坐标。
我考虑过与x
和y
值进行交替比较;这是一个好方法吗?
我如何才能将BST应用于这种情况?或者使用BST难以维持?
答案 0 :(得分:0)
我建议你创建一个单元格网格。每个单元格(实际上是一个列表)包含其中的所有坐标。
如果您需要找到坐标的邻居,只需查看位于同一单元格内(或相邻单元格中)的坐标。
答案 1 :(得分:0)
尽管aioobe创建一个单元网格(二维数组)的方法很简单,但是存储所有可能的单元格/坐标的状态有点沉重/低效,特别是当我可能有某些情况下在一个非常大的空间(稀疏数组)中只有少数实际坐标。
最终我意识到使用BST是可行的(还有其他方法),这就是我使用平衡BST有效地找到Moore Neighbors的方法:
然后,为了搜索坐标的摩尔邻居,我可以在O(log n)中查找/搜索树中的8个可能的邻居坐标(如aioobe建议的那样)。