Closest-pair problem: Difference between revisions

Content added Content deleted
Line 287: Line 287:
closestPair: Tuple!(double,cdouble,cdouble)(0.0947756, 643.407+788.387i, 643.463+788.31i)</pre>
closestPair: Tuple!(double,cdouble,cdouble)(0.0947756, 643.407+788.387i, 643.463+788.31i)</pre>
Time gave 0:06.28 elapsed for brute force, and 0:00.07 elapsed for the divide & conquer one (10_000 points).
Time gave 0:06.28 elapsed for brute force, and 0:00.07 elapsed for the divide & conquer one (10_000 points).

A faster brute-force version:
<lang d>import std.stdio, std.typecons, std.math, std.random;
auto bruteForceClosestPair2(cdouble[] points) {
auto minD = typeof(points[0].re).infinity;
size_t minI, minJ;
foreach (i; 0 .. points.length-1)
foreach (j; i+1 .. points.length) {
auto dre = points[i].re - points[j].re;
auto dim = points[i].im - points[j].im;
auto dist = dre * dre + dim * dim;
if (dist < minD) {
minD = dist;
minI = i;
minJ = j;
}
}
return tuple(sqrt(minD), points[minI], points[minJ]);
}

void main() {
auto rnd = Random(1);
auto points = new cdouble[10_000];
foreach (ref p; points)
p = uniform(0.0, 1000.0, rnd) + uniform(0.0, 1000.0, rnd) * 1i;
writeln("bruteForceClosestPair2: ", bruteForceClosestPair2(points));
}</lang>
Time gave 0:01.08 elapsed for brute-force version 2 (10_000 points).


=={{header|F Sharp|F#}}==
=={{header|F Sharp|F#}}==