Algorithm to find points that are furthest apart — better than O(n^2)?

后端 未结 7 1166
半阙折子戏
半阙折子戏 2020-12-08 22:30

In my program, I have a set of points. For purposes of rescaling, I am searching for the two nodes that are furthest apart, and then computing a factor by which to multiply

7条回答
  •  失恋的感觉
    2020-12-08 23:18

    If you just need the scale and not the exact points you can do this in O(n) time with some error margin. Think about the simple case of making a bounding box. Calculate the minimum x value from all the points, the maximum x, the minimum y and the maximum y. These four numbers give you a maximum bounding box around your points with max error of 1 - (1/sqrt(2)) about 30%. You can reduce this by adding more sides to your square. Think about the case of an octagon. To calculate the min and max values for the other sides you have to rotate your coordinate system.

    Error vs run time breaks down like this.

    shape - run time - max error

    • square - 2N - 30%
    • octagon - 4N - 16%
    • 16 sides - 8N - 4%
    • 32 sides - 16N - 1%

    Here's the equation for the max error I came up with.

    angle = 180 / sides
    max_error = (1 / cos angle) - cos angle
    

    Let me know if I should add a diagram explaining this.

提交回复
热议问题