Ich habe folgendes Problem. Ich habe ein Objekt Buchstabe, welcher aus vielen kleinen Koordinate Objekten besteht die in einem Array gespeichert sind.
nun habe ich zwei Buchstaben im Raum und möchte den kürzesten Abstand voneinander berechnen. Sprich ich vergleiche jede Koordinate des einen Buchstaben mit jeder Koordinate des anderen Buchstaben.
Das funktioniert auch soweit alles. Allerdings habe ich ein riesiges Problem mit der Laufzeit. Ein Buchstabe hat im Durchschnitt 500 Koordinaten. Somit werden bei zwei Buchstaben 250.000 Durchläufe in den Schleifen gemacht- Wenn ich also in einem Text jeden Buchstabe mit dem Nachfolgenden Buchstaben vergleiche komme ich extrem schnell in eine hohe Laufzeit. Gibt es eine andere Möglichkeit das besser zu löesen?
PHP-Code:
class Buchstabe{
private $koordinaten = array(); // Jeder Buchstabe kann x mengen an Koordinaten haben die in dem Array gespeichert sind
}
class Koordinate{
private int $x;
private int $y;
}
nun habe ich zwei Buchstaben im Raum und möchte den kürzesten Abstand voneinander berechnen. Sprich ich vergleiche jede Koordinate des einen Buchstaben mit jeder Koordinate des anderen Buchstaben.
PHP-Code:
$koordinaten1 = $buchstabe1->getKoordinaten();
$koordinaten2 = $buchstabe2->getKoordinaten();
$FinalDistance = 10000; // Einfach nur ein hoher startwert
foreach( $koordinaten1 as $k1){
foreach( $koordinaten2 as $k2){
$distance = distance($k1->getX(),
$k1->getY(),
$k2->getX(),
$k2->getY());
if($distance<$Adistance){
FinalDistance = $distance;
}
}
}
function distance(float|int $x1,
float|int $y1,
float|int $x2,
float|int $y2){
$yValue = pow($y2-$y1, 2);
$xValue = pow($x2-$x1, 2);
$distance =sqrt($yValue+$xValue);
return $distance;
}
Kommentar