Frage

Wenn wir suchen Linie Kreuzungen (horizontale und vertikale Linien nur), und wir haben n Zeilen mit der Hälfte von ihnen senkrechter und keine Kreuzungen dann

Die Sortierung der Liste der Linienendpunkte auf y-Wert nehmen N log N mit mergesort

Jeder Einsatz löschen und die Suche unserer Daten structue (es ist ein B-Baum unter der Annahme) wird

so die gesamte Suchzeit wird N log N

Was bin ich hier fehlt, wenn die Zeit mit mergesort zu sortieren eine Zeit von N log N nimmt und Einfügen und Löschen dauert eine Zeit von

Danke

War es hilfreich?

Lösung

Die Big-O-Notation beschreibt das asymptotische Verhalten des Algorithmus. Das heißt, es beschreibt das Verhalten des Algorithmus als N Trends in Richtung Unendlichkeit. Der Teil des Algorithmus, der N log N Zeit, um den Teil des Algorithmus wird Zwerg nimmt das Protokoll nimmt N Zeit. Die Bedeutung des log N Teil abnimmt relativ nichts als N groß wird.

Andere Tipps

Ich vermute, dass Ihr Tutor für das Problem bezieht sich auf von Liniensegment Überschneidung , das ist komplexer als einfach die Segmente sortieren. Sie werden bemerken, dass dieser Artikel verweist die Shamos-Hoey-Algorithmus, der einen binären Baum der Liniensegmente zu speichern, verwendet und effizient Kreuzungen erkennen.

ist Michael richtig, dass ein binären Baum verwendet, ist sinnlos für eine einmalige Art der Liniensegmente. Doch im Zusammenhang Schnittpunkte zu erfassen, durch eine Suche gefolgt Sortierung quadratische Leistung ergeben wird und ist nicht der beste Ansatz, also warum Linienerkennungsalgorithmen verwenden Binärbäumen.

Zum Beispiel: Angenommen, Sie sortieren Sie Ihre Liniensegmente entlang der x-Achse von links nach rechts. Ein naiver Erkennungsalgorithmus wäre dann so etwas wie:

for (int i=0; i<segs.length - 1; ++i) {
  boolean searching = true;

  for (int j=i+1; j<segs.length && searching; ++j) {
     if (segments overlap on x-axis) {
       // Check for intersection.
     } else {
       // No overlap so terminate inner loop early.
       // This is the advantage of having a sorted list.
       searching = false;
     }
  }
}

Aufgrund der doppelt verschachtelten Schleife ist der schlimmste Fall O (n ^ 2) und tritt auf, wenn alle Liniensegmente auf der x-Achse überlappen. Der beste Fall ist linear und tritt auf, wenn keines der Segmente auf der x-Achse überlappt.

Sie können anschließend den naiven Algorithmus gestartet werden soll, indem man durch die Implementierung, die eine B-Baumstruktur verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top