我正在尝试将数组的所有元素相互比较。我可以用嵌套循环来做到这一点,但这是一个非常低效的算法,我可以告诉它不是正确的方法。这就是我现在正在做的事情。
下面的PER答案我已经改变了这段代码,我正在扩展这个问题。
// Point from java.awt.Point;
private static void findShortestDistance(Point[] pt) {
ArrayList<Double> distance = new ArrayList<Double>(1000);
for(int i=0; i<pt.length; i++) {
for(int j=i+1; j<pt.length; j++) {
double tmp = pt[i].distance(pt[j]);
distance.add(tmp);
}
}
double min = distance.get(0);
for(Double d : distance) {
if(d < min) { min = d; }
}
}
到目前为止,我已经有了完整的代码。我试图找到给定数组中两点之间的最短距离。
答案 0 :(得分:3)
看看维基百科。 http://en.wikipedia.org/wiki/Closest_pair_of_points
这个问题似乎与此相同 Shortest distance between points algorithm
答案 1 :(得分:0)
将j
初始化为i+1
将跳过冗余比较。
for(int i = 0; i < pt.length; i++) {
for(int j = i + 1; j < pt.length; j++) {
if(pt[i] != pt[j]) { /* do stuff */ }
}
}
(顺便说一句,更改了if语句,假设您打算使用i
和j
作为数组的索引。)
对于最基本的情况,你需要获得数组与自身的交叉乘积,减去所有元素{x, y} | x == y
,这是最好的。 (即无序元素的无序对的详尽列表。)如果您需要有序的不同元素对,那么您的代码是最好的。
答案 2 :(得分:0)
只要您说上面的代码正是您想要的,以下将是您想要的实现:
for(int i=0; i<pt.length; i++) {
for(int j = i + 1; j<pt.length; j++) {
/* do stuff */
}
}
但是,我觉得你真的有兴趣比较数组值,或者我错了吗?
答案 3 :(得分:0)
for(int i=0; i<pt.length; i++) {
for(int j=i+1; j<pt.length; j++) {
if(pt[i] != pt[j]) { /* do stuff */ }
}
}
答案 4 :(得分:0)
for(int i=0; i<pt.length; i++) {
for(int j=i; j--; ) {
{ /* do stuff */ }
}
}
而且,为了完整性:
for(int i=pt.length; i--; ) {
for(int j=i; j--; ) {
{ /* do stuff */ }
}
}