最近对蛮力算法 - 基本操作

时间:2015-04-17 00:56:33

标签: algorithm brute-force

给出以下伪代码,用于通过强力计算该地方两个最近点之间的距离:

for (i <-- 1 to n-1) do
    for (j <-- i+1 to n) do
        d <-- min(d, sqrt(xi-xj)^2 + (yi-yj)^2)
return d

基本操作是计算平方根。但显然可以通过忽略平方根函数并比较值(xi-xj)^ 2 +(yi-yj)^ 2)来避免计算循环中的平方根。我查了一下,得到了“我们取根的越小,其平方根越小,意味着平方根函数严格增加”。因此,基本操作变为平方数。有人能够解释这个定义吗?

1 个答案:

答案 0 :(得分:2)

回答问题的最简单方法是了解为什么可以避免使用平方根。考虑点之间的以下一组距离,按升序排列:

{2, 5, 10, 15, 30, ...} = {d 1,1 ,d 1,2 ,d 1,3 ,d 2,1 ,d 2,2 ,...}

这些距离中的每一个都被计算为x和y距离平方之和的平方根。但是我们可以对这个集合中的每个项目进行平方并得到相同的顺序:

{4, 25, 100, 225, 900} = {d 1,1 2 ,d 1,2 2 , d 1,3 2 ,d 2,1 2 ,d 2,2 2 ,...}

请注意,距离的位置,包括最小距离(第一个条目),并未改变位置。

应该注意的是,您的伪代码实际上并不计算最小距离,但可以很容易地修改它来计算它。