【发布时间】:2020-10-01 10:46:43
【问题描述】:
给定一个边为 N 的正方形网格。同时给定网格上的一组输入点。需要在网格上找到另一组点(可以是多个),它们与给定输入点的曼哈顿距离最大。
例如,N = 4 和输入 [p1:{0, 0}, p2:{3, 3}] 输出应该是 [{0, 3}, {1, 2}, {2, 1}, {3, 0}],距离等于 3。
0 1 2 3
┌───┬───┬───┬───┐
0 │p1 │ │ │ x │
├───┼───┼───┼───┤
1 │ │ │ x │ │
├───┼───┼───┼───┤
2 │ │ x │ │ │
├───┼───┼───┼───┤
3 │ x │ │ │p2 │
└───┴───┴───┴───┘
我的第一次尝试是简单的蛮力迭代 - 为网格中的每个点计算曼哈顿到每个输入点的距离,取最小值,最后从这些最小值中取最大值。这当然有效,但在大 N 和输入时速度较慢。
在我的第二次尝试中,我首先构建了一个 kd-tree。接下来的迭代几乎与以前相同,不同之处在于现在我不计算到 每个 输入点的距离,而是到最近的一个(或多个)输入点的距离。这有点帮助,但我被告知有更好的算法。
【问题讨论】: