已经有一段时间了,因为我估计了某些东西的大O符号,我似乎无法掌握这个。基本上我的脚本通过美国纬度/经度的点列表运行,并找到覆盖国家的集合,如果这些点是半径100英里的圆的中心。像这样:
答案 0 :(得分:1)
您的算法为O(N^2)
,其中n
。如果我正确理解你的描述,它就是这样的:
for point A in array:
for point B in array:
d = dist(A,B)
//optionally remove from list
在最坏的情况下,每对点相距超过100英里,因此您最终会检查每对点之间的距离,因此O(N^2)
。
请注意,您最多只进行n + (n-1) + (n-2) + ... + 2 + 1 = (n(n+1))/2
距离计算,但仍为O(N^2)
。
答案 1 :(得分:1)
算法的运行时间为O(n^2)
,因为在最坏的情况下,您遍历数组并检查数组中所有以下点的每个点,因此n(n-1)/2
比较,{{1 }}
我必须告诉你,我不认为这个算法能为你的问题提供正确的解决方案。
答案 2 :(得分:0)
假设n
是您输入的点数。
开始循环遍历列表,索引i = 0.
...
如果i =列表长度,则结束,否则,循环
这就是n
次迭代。
找到列表中第i个点与列表中所有点之间的距离。
每次迭代的n
次操作。如果它只是这两个,它最终成为n^2/2
(每个点与其他每一点,除了顺序无关紧要,所以你做了一半的比较)。
删除100英里内的所有点
重新索引数组
听起来,你将那些在100英里范围内的元素归零,然后移动阵列。这两项操作都是O(n)
次操作,因为您O(n^2)
次操作重复O(n)
次,所以n
结果为O(n^2)
。
所以你最终得到{{1}}。