816 Shortest Distance Among Points
原题链接:https://projecteuler.net/problem=816
给定序列
令二维点序列是
用 表示 个点 任意不同的两点之间的最短距离。
比如 。这个可以小范围验证程序。
求 。
求 和 都是线性的,没啥问题。关键是如何求 。
如果使用暴力法,每两个之间都计算距离,那么需要 的时间开销, 是一个很大的值,不现实。
于是乎我想了一个比较朴素的方法。
对点按照 排序,如果一样就按照 排序。
对于某个点 ,只需要考虑坐标轴右边的点 和它的距离即可。
如果最小距离 已经比要考察的点 和点 的横坐标差值还小了,那么 右边的点都不需要计算了。