www.wikidata.de-de.nina.az
Ein Quadtree oder Quaternarbaum ist in der Informatik eine Baumstruktur in der jeder innere Knoten genau vier Kindknoten hat Quadtrees werden hauptsachlich zur Unterteilung eines zweidimensionalen Raumes genutzt indem rekursiv in vier Bereiche Quadranten unterteilt wird Die Bereiche konnen quadratisch oder rechteckig sein oder beliebige Formen haben Eine ahnliche Aufteilung ist als Q tree bekannt Alle Formen von Quadtrees teilen bestimmte Merkmale Sie zerlegen den Raum in anpassbare Bereiche Jeder Bereich hat eine Maximalkapazitat Wird diese erreicht so wird der Bereich unterteilt Das Baumverzeichnis folgt der raumlichen Unterteilung des Quadtrees Ein Punktequaternarbaum mit Punktdaten Behalterkapazitat 1 Quaternarbaumkompression eines Bildes Schritt fur Schritt Inhaltsverzeichnis 1 Klassifikation 1 1 Der Bereichsquaternarbaum 1 2 Punktquaternarbaum 1 2 1 Knotenstruktur eines Punkt Quad Trees 1 3 Kantenquaternarbaum 1 4 Komprimierter Quaternarbaum 1 5 Gut abgestimmter Quaternarbaum 2 Anwendungen 2 1 Gittererzeugung 3 Programmierung 4 Literatur 5 Weblinks 6 EinzelnachweiseKlassifikation BearbeitenQuadtrees konnen nach der Art der von ihnen reprasentierten Daten eingeteilt werden einschliesslich Flachen Punkten und Linien Quadtrees konnen auch danach eingeteilt werden ob die Form des Baumes von der Datenverarbeitungsreihenfolge abhangt oder nicht Einige gebrauchliche Arten von Quadtrees sind Der Bereichsquaternarbaum Bearbeiten Der Bereichsquaternarbaum englisch region quadtree stellt eine Aufteilung des Raums in zwei Dimensionen dar der den Bereich in vier gleiche Quadranten Unterquadranten usw zerlegt wobei jeder Endknoten Daten eines bestimmten Unterbereiches enthalt Jeder Knoten in dem Baum hat entweder genau vier Kinder oder gar keine Blattknoten Der Bereichsquaternarbaum ist eine Art von Trie Ein Bereichsquaternarbaum mit einer Tiefe von n kann benutzt werden um ein Bild aus 2n 2n Pixeln darzustellen wobei jeder Bildpunkt den Wert 1 oder 0 hat Der Wurzelknoten reprasentiert den gesamten Bildbereich Sofern in einem Bereich nicht alle Bildpunkte Nullen oder Einsen sind wird dieser unterteilt In dieser Anwendung steht jeder Endknoten fur einen Bildbereich dessen Bildpunkte samtlich Nullen oder Einsen sind Ein Bereichsquaternarbaum kann auch als eine variabel aufgeloste Reprasentation eines Datenfeldes genutzt werden Beispielsweise konnen die Temperaturen in einem Gebiet als Quadtree gespeichert werden wobei in jedem Blatt die Durchschnittstemperatur des Teilgebietes gespeichert wird Wenn ein Bereichsquaternarbaum benutzt wird um einen Punktdatensatz zu reprasentieren zum Beispiel Langengrade und Breitengrade einer Anzahl von Stadten so werden Bereiche so oft unterteilt bis jedes Blatt hochstens einen Punkt enthalt Punktquaternarbaum Bearbeiten Der Punktquaternarbaum englisch point quadtree ist eine Anpassung eines Binarbaumes die zur Darstellung zweidimensionaler Punktdaten genutzt wird Es teilt die Merkmale eines Quadtrees ist allerdings ein echter Baum da das Zentrum einer Unterteilung immer ein Punkt ist Die Form des Baumes hangt von der Reihenfolge der Datenverarbeitung ab Er ist mit einer Laufzeit von ublicherweise O log n displaystyle O log n nbsp oft sehr effizient beim Vergleichen zweidimensionaler sortierter Datenpunkte Knotenstruktur eines Punkt Quad Trees Bearbeiten Ein Knoten eines Quadtrees ahnelt einem Knoten eines Binarbaumes von dem er sich hauptsachlich durch die vier Zeiger einer pro Quadrant von den zwei Zeigern links und rechts eines gewohnlichen Binarbaumes unterscheidet Zusatzlich ist ein Schlussel gewohnlich in zwei Komponenten gegliedert die sich auf die x und die y Koordinaten beziehen Daher enthalt ein Knoten die folgende Information vier Zeiger quad NW quad NO quad SW und quad SO Punkt welcher wiederum enthalt Attribut gewohnlich als x und y Koordinaten ausgedruckt Wert beispielsweise ein NameKantenquaternarbaum Bearbeiten Kantenquaternarbaume englisch edge quadtree werden besonders zur Speicherung von Linien statt Punkten genutzt Kurven werden durch fein aufgeloste Unterteilung von Zellen angenahert Dies kann zu sehr unausgewogenen Baumen fuhren was dem Zweck der Indizierung zuwiderlaufen kann Komprimierter Quaternarbaum Bearbeiten Wenn jeder Knoten aufbewahrt werden soll der einer unterteilten Bereiche entspricht konnen am Ende viele leere Knoten gespeichert werden Die Grosse solcher sparsamen Baume kann begrenzt werden indem nur Teilbaume gespeichert werden deren Blatter interessante Daten haben Ein daraus entstehender Quadtree wird komprimierter Quaternarbaum englisch compressed quadtree genannt Wenn nur wichtige Teilbaume erhalten bleiben kann der Beschneidungsprozess lange Pfade in dem Baum hinterlassen in dem die Zwischenknoten den Grad 2 haben ein Link zu einem Elternknoten und einem Kindknoten Es stellt sich heraus dass nur der Knoten u displaystyle u nbsp am Anfang dieses Pfads gespeichert werden muss und der an seinem Ende angehangte Teilbaum an den Knoten u displaystyle u nbsp Es ist immer noch moglich dass diese komprimierten Baume eine lineare Hohe haben wenn die Eingabedaten ungunstig ist Obwohl viel von einem Baum abgeschnitten wird wenn diese Kompression durchgefuhrt wird ist es immer noch moglich eine Suche in logarithmischer Laufzeit die Operationen Suchen Einfugen und Loschen zu erreichen indem die Z Kurve verwendet wird Die Z Kurve ordnet jeden Bereich des vollstandigen Quadtrees und damit sogar des komprimierten Quadtrees in konstanter Laufzeit auf eine eindimensionale Linie ab und ordnet sie auch in konstanter Laufzeit umgekehrt zu wodurch eine Totalordnung der Elemente entsteht Daher kann der Quadtree in einer Datenstruktur fur geordnete Mengen gespeichert werden in der die Knoten des Baums gespeichert werden Mit diesen Annahmen konnen die Lokalisierung eines gegebenen Punktes q displaystyle q nbsp d h die Bestimmung des Bereichs die q displaystyle q nbsp enthalten wurde die Operationen Einfugen und Loschen alle in der Laufzeit O log n displaystyle O log n nbsp durchgefuhrt werden d h die Zeit die benotigt wird um eine Suche in der zugrunde liegenden Datenstruktur der geordneten Menge durchzufuhren 1 Gut abgestimmter Quaternarbaum Bearbeiten Ein gut abgestimmter Quaternarbaum englisch well graded quadtree ergibt eine hierarchische Unterteilung des Raums in Bereiche Hyperwurfel in der jeweiligen Dimension mit der ein gutes Polygonnetz der Eingabedaten durch Anwenden eines Nachbearbeitungsschritts hergestellt werden kann Ein gut abgestimmter Quaternarbaum wird wie folgt definiert Ein Bereich heisst selbstbedrangt englisch self crowded wenn er zwei oder mehr Eingabepunkte enthalt Ein Bereich c displaystyle c nbsp wird von einem Nachbarn c displaystyle c nbsp bedrangt wenn c displaystyle c nbsp genau einen Punkt enthalt und c displaystyle c nbsp mindestens einen Punkt enthalt Ein Bereich heisst bedrangt wenn er selbstbedrangt ist oder von einem Nachbarn bedrangt wird Ein Bereich c displaystyle c nbsp heisst schlecht abgestimmt englisch ill graded wenn er eine Nachbarzelle c displaystyle c nbsp hat deren Seitenlange hochstens 4 mal so klein ist wie die Seitenlange von c displaystyle c nbsp Ein Quaternarbaum heisst gut abgestimmt wenn jeder seiner nicht zerlegten Bereiche gut abgestimmt ist und nicht bedrangt ist 1 Anwendungen BearbeitenQuadtrees werden fur folgende Anwendungen verwendet Bilddarstellung nbsp Gittererzeugung Flachenindizierung zum Beispiel in GIS Programmen Effiziente Kollisionserkennung in zwei Dimensionen Sichtvolumenbestimmung bei Geodaten Speichern sparlicher Daten wie der Formatierungsinformation fur eine Tabelle oder fur manche Matrixberechnungen Losung von mehrdimensionalen Feldern numerische Stromungsmechanik Elektromagnetismus Conways Spiel des Lebens 2 Zustandsrekonstruktion 3 Quadtrees werden auch im Bereich der fraktalen Bildverarbeitung genutzt Grosste unzusammenhangende MengenQuadtrees sind die zweidimensionale Entsprechung zu Octrees Gittererzeugung Bearbeiten Ein 2 Quadtree zur Gittererzeugung wird abgeleitet indem Quadranten rekursiv in 4 Unterquadranten aufgeteilt werden Die Tiefe im Quadtree definiert die Level eines Quadranten Die konforme Hulle kann nur fur balancierte Quadtrees gefunden werden Der Level l q displaystyle l q nbsp eines Quadranten q displaystyle q nbsp ist wie folgt definiert l q 0 displaystyle l q 0 nbsp fur den Quadranten q displaystyle q nbsp des Wurzelknotens l q s l q 1 displaystyle l q s l q 1 nbsp wenn q s displaystyle q s nbsp der Quadrant des Kindknotens von Quadrant q displaystyle q nbsp istEin Quadtree heisst balanciert wenn gilt Fur jeden Quadranten haben entweder keine oder alle seiner Kindknoten selbst Kindknoten Fur die Level benachbarter Quadranten q displaystyle q nbsp und q displaystyle q nbsp gilt l q l q 1 displaystyle l q l q leq 1 nbsp Die folgenden Operationen konnen zum Ausgleichen eines Quadtrees verwendet werden Wenn die Bedingung 1 fur den Quadranten q displaystyle q nbsp verletzt ist teile die Kindknoten von q displaystyle q nbsp die Quadranten von Blattknoten sind Fur benachbarte Quadranten q displaystyle q nbsp und q displaystyle q nbsp der Blattknoten die die Ungleichung l q lt l q 1 displaystyle l q lt l q 1 nbsp erfullen teile q displaystyle q nbsp Um den Einfugeprozess zu steuern wird jedem Knoten der Level des kleinsten benachbarten Quadranten als Level fur die Knotenunterteilung zugewiesen Quadranten des Levels l q displaystyle l q nbsp die Knoten mit Level l v gt l q displaystyle l v gt l q nbsp haben mussen geteilt werden und die Konfiguration der markierten Knoten bestimmt die Templates die in die Ubergangsquadranten eingefugt werden Wenn mehr als 2 Knoten markiert sind wird Template 2 gewahlt Wenn 2 Knoten markiert sind bestimmt die Position des zentralen Knotens wie Template 1 eingefugt wird Bei weniger als 2 markierten Knoten bleibt der Quadrant unverandert 4 Programmierung BearbeitenDas folgende Beispiel in der Programmiersprache C zeigt die Implementierung des Quadtree der als Baum mit Zeigern gespeichert wird Jeder Knoten enthalt die Koordinaten fur einen Punkt in der zweidimensionalen Ebene Bei der Ausfuhrung des Programms wird die Funktion main verwendet die einen kurzesten Weg auf der Konsole ausgibt 5 include lt iostream gt include lt cmath gt using namespace std Dieser Datentyp deklariert einen Punkt in der zweidimensionalen Ebene struct Point int x int y Konstruktoren Point int x int y x x y y Point x 0 y 0 Dieser Datentyp deklariert einen Knoten des Baums struct Node Point point int value Konstruktoren Node Point point int value point point value value Node value 0 Diese Klasse deklariert einen Quadtree und seine 4 Teilbaume class Quadtree Wurzelknoten Node root Diese Punkte definieren den Bereich des Quadtree Point topLeft Point bottomRight Kindknoten des Quadtree Quadtree topLeftTree Quadtree topRightTree Quadtree bottomLeftTree Quadtree bottomRightTree public Konstruktoren Quadtree topLeft Point 0 0 bottomRight Point 0 0 root NULL topLeftTree NULL topRightTree NULL bottomLeftTree NULL bottomRightTree NULL Quadtree Point topLeft Point bottomRight root NULL topLeftTree NULL topRightTree NULL bottomLeftTree NULL bottomRightTree NULL topLeft topLeft bottomRight bottomRight Diese rekursive Funktion fugt dem Quadtree einen Knoten hinzu void insert Node node if node NULL return Wenn das Gebiet des aktuellen Quadtree den Punkt nicht enthalt Funktion verlassen if inBoundary node gt point return Wenn das Gebiet des aktuellen Quadtree den Punkt nicht enthalt Funktion verlassen if abs topLeft x bottomRight x lt 1 amp amp abs topLeft y bottomRight y lt 1 if root NULL root node return Bedingung fur den Teilbaum links unten if topLeft x bottomRight x 2 gt node gt point x Bedingung fur den Teilbaum links unten if topLeft y bottomRight y 2 gt node gt point y if topLeftTree NULL topLeftTree new Quadtree Point topLeft x topLeft y Point topLeft x bottomRight x 2 topLeft y bottomRight y 2 topLeftTree gt insert node Bedingung fur den Teilbaum rechts unten else if bottomLeftTree NULL bottomLeftTree new Quadtree Point topLeft x topLeft y bottomRight y 2 Point topLeft x bottomRight x 2 bottomRight y bottomLeftTree gt insert node else Bedingung fur den Teilbaum rechts oben if topLeft y bottomRight y 2 gt node gt point y if topRightTree NULL topRightTree new Quadtree Point topLeft x bottomRight x 2 topLeft y Point bottomRight x topLeft y bottomRight y 2 topRightTree gt insert node Bedingung fur den Teilbaum rechts unten else if bottomRightTree NULL bottomRightTree new Quadtree Point topLeft x bottomRight x 2 topLeft y bottomRight y 2 Point bottomRight x bottomRight y bottomRightTree gt insert node Diese rekursive Funktion sucht einen Knoten Node searchNode Point point if inBoundary point return NULL if root NULL return root Wenn der untere rechte Teilbaum leer ist if topLeft x bottomRight x 2 gt point x Wenn der Knoten im Gebiet fur den oberen linken Teilbaum liegt if topLeft y bottomRight y 2 gt point y if topLeftTree NULL return NULL return topLeftTree gt searchNode point Wenn der Knoten im Gebiet fur den unteren linken Teilbaum liegt else if bottomLeftTree NULL return NULL return bottomLeftTree gt searchNode point else Wenn der Knoten im Gebiet fur den oberen rechte Teilbaum liegt if topLeft y bottomRight y 2 gt point y if topRightTree NULL return NULL return topRightTree gt searchNode point Wenn der Knoten im Gebiet fur den unteren rechten Teilbaum liegt else if bottomRightTree NULL return NULL return bottomRightTree gt searchNode point Pruft ob der aktuelle Quadtree den Punkt enthalt bool inBoundary Point point return point x gt topLeft x amp amp point x lt bottomRight x amp amp point y gt topLeft y amp amp point y lt bottomRight y Hauptfunktion die das Programm ausfuhrt int main Quadtree center Point 0 0 Point 8 8 Node node1 Point 1 1 1 Node node2 Point 2 5 2 Node node3 Point 7 6 3 center insert amp node1 center insert amp node2 center insert amp node3 cout lt lt Knoten 1 lt lt center searchNode Point 1 1 gt value lt lt n cout lt lt Knoten 2 lt lt center searchNode Point 2 5 gt value lt lt n cout lt lt Knoten 3 lt lt center searchNode Point 7 6 gt value lt lt n cout lt lt Nicht existierender Knoten lt lt center searchNode Point 5 5 Literatur BearbeitenHanan Samet The Design and Analysis of Spatial Data Structures Addison Wesley Reading MA 1990 ISBN 0 201 50255 0 Hanan Samet Applications of Spatial Data Structures Computer Graphics Image Processing and GIS Addison Wesley Reading MA 1990 ISBN 0 201 50300 X R A Finkel J L Bentley Quad trees a data structure for retrieval on composite keys In Acta Informatica Band 4 Nr 1 ISSN 0001 5903 S 1 9 doi 10 1007 BF00288933 Mark de Berg Marc van Kreveld Mark Overmars Otfried Schwarzkopf Hrsg Computational Geometry Algorithms and applications 2 rev Auflage Springer Berlin u a 2000 ISBN 3 540 65620 0 14 Quadtrees S 291 306 Hanan Samet Robert Webber Storing a Collection of Polygons Using Quadtrees PDF Juli 1985 abgerufen am 23 Marz 2012 Weblinks Bearbeiten nbsp Commons Quadtrees Sammlung von Bildern Videos und Audiodateien Raumunterteilungsdemos englisch Besprechung des Quaternarbaumes mit einer Anwendung Besprechung und Vorfuhrungen raumlicher Indizierung Memento vom 4 Februar 2012 im Internet Archive Java Implementierung Java Anleitung C Implementierung eines Quaternarbaumes zur raumlichen Indizierung von Dreiecken Objective C Implementierung eines Quaternarbaumes fur GPS Clustering SquareLanguage Funktionsfahige Vorfuhrung des Quaternarbaumalgorithmus in JavaScript MIT lizenzierte Quaternarbaum Bibliothek in JavaScript Animierter Quaternarbaum mit Source Code in JavaScriptEinzelnachweise Bearbeiten a b Umut A Acar Benoit Hudson Dynamic Mesh Refinement with Quad Trees and Off Centers Tomas G Rokicki An Algorithm for Compressing Space and Time 1 April 2006 abgerufen am 20 Mai 2009 Henning Eberhardt Vesa Klumpp Uwe D Hanebeck Density Trees for Efficient Nonlinear State Estimation Proceedings of the 13th International Conference on Information Fusion Edinburgh United Kingdom Juli 2010 Robert Schneiders Algorithms for Quadrilateral and Hexahedral Mesh Generation GeeksforGeeks Quad Tree Abgerufen von https de wikipedia org w index php title Quadtree amp oldid 233096257