Positional Notation Binary Options

(). . ,. . Aufrechtzuerhalten. . Quotquot Quotquot: quotquot quotquot. Aufrechtzuerhalten. . . Quotquot 14:,,,,,,,,,,,. Kapitel 2 Binäre Werte und Zahlensysteme. 2 624 Kapitelziele Unterscheiden zwischen Kategorien von Zahlen Beschreiben von Positionsnotation Konvertieren von Zahlen in. Präsentation zum Thema: Kapitel 2 Binäre Werte und Zahlensysteme. 2 624 Kapitelziele Unterscheiden zwischen Kategorien von Zahlen Beschreiben von Positionsnotation Konvertieren von Zahlen in. Präsentationstranskript: 2 2 624 Kapitelziele Unterscheiden zwischen Kategorien von Zahlen Beschreiben von Positionsnotation Konvertieren von Zahlen in andere Basen auf Basis 10 Konvertieren von Basis-10-Zahlen in Zahlen in anderen Basen Beschreiben Sie die Beziehung zwischen den Basen 2, 8 und 16 Erläutern Sie die Bedeutung für die Berechnung von Basen, die Befugnisse von 2 3 3 2 Natural Numbers Zero und eine beliebige Zahl durch wiederholtes Hinzufügen eines zu erhalten. 0, 1, 2, 3, 4 Beispiele: 100, 0, 45645, 32 Negative Zahlen Ein Wert kleiner als 0, mit einem Vorzeichen Beispiele: -24, -1. -32 Numbers 4 4 3 Integers Eine natürliche Zahl, eine negative Zahl, null Beispiele: 249, 0. - 32 Rationale Zahlen Eine Ganzzahl oder der Quotient aus zwei ganzen Zahlen Beispiele: -249, -1, 0, 3/7, -2 / 5 Numbers 6 6 5 Aha 642 ist in BASE 10 Die Basis einer Zahl bestimmt die Anzahl der Ziffern und den Wert der Ziffernpositionen Wenn wir mit 10s zählen, verwenden wir das Numerierungssystem Base 10, das Dezimalsystem 7 verschiedene Zählsysteme BASE Gibt die Anzahl der im System verwendeten Ziffern an. Immer beginnt mit 0 Wenn Sie 1 weitere hinzufügen, gehen Sie zur nächsten Position 10 Base 2: Zwei Ziffern, 0 und 1 Base 8: 8 Ziffern 0, 1, 2, 3 , 4, 5, 6, 7 Basis 10: 10 Ziffern 0 - 9 Basis 16: 16 Ziffern 0 9, AF 7 8 Zählsysteme in Binär / Oktal / Dezimal Diese sind nicht gleichwertig. Sie zeigen nur das Zählen nach oben um 1 Einheit 8 9 Positionsnotation 9 6 Fortsetzung unseres Beispiels 642 in der Grundposition 10 ist: 6 x 10 2 6 x 100 x 10 1 4 x 10 x 10 2 x 1 2 642 in der Basis 10 Diese Zahl ist in der Basis 10 Die Leistung zeigt die Position der Zahl 0 ist die erste Position 10 Positionsnotation 10 7 dn R n-1 d n-1 R nd 2 R d 1 Als Formel gilt: 642 ist (6 3 10 2) (4 2 10 1) (2 1 10 0) R ist die Basis der Zahl n ist die Anzahl der Ziffern in der Zahl d ist die Ziffer in der i-ten Position in der Zahl 10 1 0 11 Positionsbezeichnung Was, wenn 642 hat die Basis von 13 Rückwärts konvertieren 642 in Basis 13 entspricht 1068 in Basis 10 Sie stellen die gleiche Anzahl von Elementen oder Einheiten dar. Zahlen repräsentieren die Elemente auf verschiedene Weise. 6 x 13 2 6 x 169 x 13 1 4 x 13 x 13 2 x 1 2 1068 in Basis 10 12 12 9 Dezimal ist Basis 10 und hat 10 Ziffern: 0,1,2,3,4,5,6,7 , 8,9 Binär ist Basis 2 und hat 2 Ziffern: 0,1 Für eine Zahl, die in einer gegebenen Basis vorhanden ist, kann sie nur die Ziffern in dieser Basis enthalten, die von 0 bis zu (aber nicht inklusive) der Basis reichen. Binär 13 Basen Höher als Wie sind Ziffern in Basen höher als 10 dargestellt mit eindeutigen Symbolen für 10 und höher. Base 16 hat 16 Ziffern - HEXADECIMAL: 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E und F So erhalten Sie Zahlen wie 00FF22 Oft verwendet werden, um zu vertreten Farben in Web-Programmen Rot Grün Blau 000, bis FFFFFF 14 Basen Was Basen können diese Zahlen in 122 198 178 G1A4 Immer beginnen bei 0, Ende bei Basis 1 Also, 0-9 bedeutet Basis 10 (10-19) Identifizieren Sie die Anzahl der Mögliche Einheiten in der ersten Position, um Ihnen die Basiszahl zu geben 14 16 Oktal Oktal ist Basis 8 Numerische Darstellung kann von 0-7 Dann gehen Sie zur nächsten Position 16 17 17 Was ist das Dezimal-Äquivalent der Oktalzahl 642 Beachten Sie dies Ist Basis 8 6 x 8 2 6 x 64 x 8 1 4 x 8 x 8 2 x 1 2 1. Position 418 in der Basis Umwandlung von Oktal in Dezimalzahl 18 Umwandlung von Dezimal in andere Basen 18 Während (der Quotient ist nicht Null, so gibt es eine Rest) Teilen Sie die Dezimalzahl durch die neue Basis Machen Sie den Rest die nächste Ziffer nach links in der Antwort Ersetzen Sie die ursprüngliche Dezimalzahl mit dem Quotienten Algorithmus für die Umwandlung von Zahl in Basis 10 auf andere Basen 19 19 Umwandeln von Dezimal in Oktal Antwort ist. Antwort ist. Was ist 1988 (Basis 10) in der Basis 8 Rückwärts 8 0 20 Umwandlung Dezimal in Oktal 20 Versuchen Sie einige Web / Mathematik / real / Taschenrechner / BaseConvcalc1.htm Noch eine Herausforderung Versuchen Sie einen Taschenrechner 24 Apple Programmer-Modus Drücken Sie 10 Geben Sie 1988 Drücken Sie 10 Sie können Siehe die Konvertierung für binary live 24 26 26 Rechner haben Speichereinheiten, die als Binärziffern oder Bits bezeichnet werden Niederspannung 0 Hochspannung 1 alle Bits haben 0 oder 1 22 Binäre Zahlen und Rechner 27 Binär und Computer 27 Byte 8 Bits sind in 1 Byte Die Anzahl der Bits beträgt 1 Byte Bits in einem Wort bestimmen die Wortlänge des Computers, aber es ist in der Regel ein Vielfaches von 8. WARUM Speichern Prozessinformationen besser / schneller. 32-Bit-Maschinen 64-Bit-Maschinen usw. 23 30 Konvertieren von Binär in Dezimalzahl 30 Was ist das Dezimaläquivalent der Binärzahl. (8 Stellen) 1 x 2 7 1 x 128 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 1 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 1 X 1 1 256 in base 10 13 31 Konvertieren von Binär in Dezimalzahl 31 Was ist das Dezimaläquivalent der Binärzahl. (Ich habe die 0 in der ersten Ziffer als Platzhalter hinzugefügt) 0 x 2 7 0 x 64 0 1 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 0 x 16 x 2 3 1 x 8 x 2 2 1 X 4 x 2 1 1 x 2 x 2 0 x 1 0 110 in Basis 10 13 32 Arithmetik in Binär 32 Denken Sie daran, dass es nur zwei Stellen in Binär, 0 und 1 gibt Es gibt NUR 3 Optionen 0 mit einem Carry (es gibt keine 2) Übertragungswerte 33 Subtrahieren von Binärzahlen 33 Erinnern Sie sich an die Entlehnung Anwenden Sie dieses Konzept hier 0 1-01 1-10 0-1 leihen 2 34 Konvertieren von Binär in Dezimal 34 Was ist das Dezimaläquivalent der Binärzahl. 1 x 2 7 1 x 128 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 1 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 1 x 1 1 256 In base 10 13 36 Spezielle Binärzahlen Häufig sehen Sie Zahlen, die in 8 Stellen für viele Computer - und Netzwerkapplikationen ausgedrückt werden. Die niedrigste ist Die höchste wäre Was sind die Dezimaläquivalente 0 255 37 Konvertieren von Binär zu Oktal 37 Markieren Sie Gruppen von 3 (von rechts) Konvertieren Sie jede Gruppe in Basis x 2 2 1 x 4 x 2 1 0 x 2 x 2 1 x 1 Ist 253 in base 8 38 38 Was ist das Dezimaläquivalent der Binärzahl. 1 x 2 6 1 x 64 x 2 5 1 x 32 x 2 4 0 x 16 x 2 3 1 x 8 x 2 2 1 x 4 x 2 1 1 x 2 x 2 0 x 1 0 110 in Basis Umwandlung von Binär in Dezimalzahl 40 Hexadezimalzahl in Dezimalzahl umrechnen 40 Was ist das Dezimaläquivalent der Hexadezimalzahl DEF D x 16 2 13 x 256 E x 16 1 14 x 16 F x 16 15 x 1 15 3567 in Basis 10 Denken Sie daran, dass die Ziffern der Basis 16 0 sind , 1, 2, 3, 4, 5, 6, 7, 9, 9, 9, 9, 9, 10, 3567 (Basis 10) in Basis 16 Rückwärts 42 Konvertieren von Binär zu Hexadezimal 42 Markieren Sie Gruppen von 4 (von rechts) Konvertieren Sie jede Gruppe AB ist AB in Basis 16 18 43 Konvertieren von Binär in Hexadezimal 43 Umwandlung in Dezimalzahl, dann Hexadez 1010 10 A 1011 11 BAB ist AB in der Basis 16 18 45 Bei der Prüfung müssen Sie manuell zwischen: Decimal Binary Octal Hexadezimal 45 Review 46 Ethische Fragen Zehnten Strang 46 Was ist Iron Man CC2013 Was ist eine Wissenseinheit Was ist Curricula 2001 Who put Zusammen die Standards Warum sind diese Standards importantBinary Trees Alle der Datenstrukturen, die wir zu diesem Punkt betrachtet haben, wurden quotlinearquot Das heißt, sie können als eine Liste von Objekten, wo jedes Element hat ONE Nachfolger und ONE Vorgänger (außer, dass das erste Element Hat keinen Vorgänger und das letzte Element hat keinen Nachfolger). Diese linearen Strukturen beinhalteten: Arrays, Vektoren, verknüpfte Listen, Stapel und Warteschlangen. Aber eine lineare Organisation ist nicht immer die logischste oder effizienteste. In einer verketteten Liste beispielsweise verweist jeder Knoten auf einen anderen Knoten (oder möglicherweise zwei auf den Fall einer doppelt verknüpften Liste, aber dies ist nur eine Verknüpfung zu dem Knoten, auf den er verweist). Aber in vielen Fällen macht es Sinn für einen Knoten, mehr als einen anderen Knoten (d. H. Mehrere Nachfolger) zu verweisen. Dies führt zu Strukturen, die als Bäume bekannt sind. ANMERKUNG: Normalerweise zeichnen wir Diagramme unserer Bäume auf den Kopf stellen. Das heißt, der Hauptknoten des Baums ist am oberen Rand des Diagramms, und die Knoten, auf die er verweist, sind unten (wie im Diagramm rechts zu sehen). 2. Baum-Terminologie Für Referenz und Diskussion, die Teile eines Baumes ADT und die Beziehungen zwischen seinen Elementen sind Namen gegeben. Diese Terminologie ist eine Kombination von dendrologischen Bäumen und Stammbäumen. Die häufigsten sind: Knoten - Ein Element des Baums, der Daten und Links zu anderen Knoten enthält. Edge (alias: branch) - Eine Verbindung zwischen zwei Knoten (d. h. eine Referenz oder eine Verknüpfung). Trivialer Baum - Ein leerer Baum (d. h. keine Knoten). Root - Der oberste Knoten im Baum. Der rote Knoten im obigen Diagramm ist der Root. Blatt - Ein Knoten in einem Baum, der NICHT auf irgendwelche anderen Knoten verweist. Die grünen und gelben Knoten im obigen Diagramm sind Blätter. Parent - Der übergeordnete Knoten eines Knotens ist der Knoten, auf den er verweist. In den meisten Fällen werden Knoten eine eindeutige übergeordnete (obwohl dies nicht in allen Baumstrukturen erforderlich ist). In dem obigen Diagramm ist der rote Knoten der Elternteil der zwei blauen Knoten. Der Stamm eines Baums ist der einzige Knoten ohne übergeordneten Knoten. Child - Ein Kind eines Knotens ist jeder Knoten, auf den der Knoten verweist. In dem obigen Diagramm hat der blaue Knoten auf der linken Seite ein Kind (der gelbe Knoten) und der blaue Knoten auf der rechten Seite drei Kinder (die grünen Knoten). Ein Blatt ist daher ein Knoten ohne Kinder. Geschwister - Zwei oder mehr Knoten, die das gleiche Elternteil haben. Die drei grünen Knoten im obigen Diagramm sind Geschwister, aber der gelbe Knoten hat keine Geschwister. Andere Verwandte. Gelegentlich beziehen wir uns auf Cousinen. Onkel Und / oder Nichten. Sie sollten die Idee Ancestor - Die Vorfahren eines Knotens gehören die Eltern und ihre Eltern Vorfahren. Beachten Sie den rekursiven Charakter dieser Definition. Rekursion ist sehr häufig mit der Definition und Verarbeitung von Bäumen. Nachkomme - Die Nachkommen eines Knotens sind seine Kinder und seine Nachkommen. Teilbaum - Ein Baum, der aus einem Knoten und allen seinen Nachkommen besteht. Daher sind alle Knoten eines Baums Wurzeln eines Teilbaums. In diesem Sinne kann jeder Knoten eines Baums als Wurzel eines Baums behandelt werden. Dieses Konzept ist die Grundlage für die rekursive Verarbeitung von Bäumen. Binärbaum - Ein Baum, dessen Knoten höchstens zwei Kinder haben können. Der Baum im Diagramm oben ist NICHT ein binärer Baum, weil der rechte blaue Knoten drei Kinder hat (die grünen Knoten). Die Bäume, mit denen wir arbeiten werden, sind binäre Bäume. Pfad - Die einzige (kürzeste) Folge von Kanten bildet einen Knoten zu einem anderen Knoten. Die Länge des Pfads ist die Anzahl der Kanten. Level (AKA: depth) - Die Ebene eines Knotens ist die Anzahl der Knoten im Pfad von diesem Knoten zum Stamm des Baums. Daher ist die Wurzel auf Ebene 1 (der rote Knoten im Diagramm), die Wurzelkinder sind auf Ebene 2 (die blauen Knoten im Diagramm), die Wurzeln der Enkel sind auf Ebene 3 (die gelben und grünen Knoten im Diagramm) , Etc. HINWEIS: Alternative Definitionen der Ebene verwenden die Länge des Pfads (dh Wurzeln Ebene ist 0, Wurzeln Kinder sind auf Ebene 2, etc.). Wir verwenden die Definition in unserem Lehrbuch (d. h. Wurzeln Ebene ist 1). Höhe - Die Höhe eines Knotens ist die Anzahl der Knoten im längsten Pfad von diesem Knoten zu einem Blatt. Die Höhe eines Baumes ist die Höhe seiner Wurzel. In dem Diagramm hat der rote Knoten die Höhe 3 (die auch die Höhe des Baums ist), die blauen Knoten haben die Höhe 2, und die gelben und grünen Knoten haben die Höhe 1. HINWEIS: Alternative Definitionen der Höhe verwenden die Länge der längsten Pfad (dh eine weniger als unsere Bücher-Definition). Wir verwenden die Definition in unserem Lehrbuch. Voller Baum - Ein Baum, in dem jedes Blatt auf dem gleichen Niveau ist und jedes Nicht-Blatt so viele Kinder wie möglich hat (d. h. 2 für einen binären Baum). Vollständiger Baum - Ein voller Baum mit 0 oder mehr seiner quotrightmostquot Blätter fehlen. Beachten Sie, dass alle Vollbäume vollständig sind, aber nicht alle vollständigen Bäume voll sind. Grad - Der Grad eines Knotens ist die Zahl seiner Kinder. Der Grad eines Baumes ist das Maximum der Grade seiner Knoten. In dem Diagramm hat der rote Knoten den Grad 2, der linke blaue Knoten den Grad 1, der rechte blaue Knoten den Grad 3 und der Rest der Knoten den Grad 0. Daher ist der Grad des Baums 3 Binärbaum wird einen Grad von zwei oder weniger haben. Symmetrisch - Ein Baum ist ausgeglichen, wenn sich die Anzahl der Knoten im linken Teilbaum von der Anzahl der Knoten im rechten Teilbaum um nicht mehr als eins unterscheidet und sein linker und rechter Teilbereich ebenfalls symmetrisch sind. Beachten Sie den rekursiven Charakter dieser Definition. 3. Der Binärbaum ADT ANMERKUNG: Das Folgende folgt einer traditionelleren Definition eines binären Baums als von unserem Lehrbuch verwendet. Ein binärer Baum besteht aus Knoten mit einem Vorgänger und höchstens zwei Nachfolgern (das linke Kind und das rechte Kind genannt). Die einzige Ausnahme ist der Wurzelknoten des Baums, der keinen Vorgänger hat. Ein Knoten kann jede Menge und jede Art von Daten enthalten. Operationen (d. H. Konstruktoren und Methoden): create - Ein binärer Baum kann in mehreren Zuständen erstellt werden. Die häufigsten gehören. Ein leerer Baum (dh keine Knoten) und damit der Konstruktor keine Parameter hat einen Baum mit einem Knoten (dh der Wurzel) und damit der Konstruktor einen einzigen Parameter (die Daten für den Wurzelknoten) einen Baum mit einem neuen Wurzel, deren Kinder sind andere vorhandene Bäume und daher hat der Konstruktor drei Parameter (die Daten für den Wurzelknoten und Verweise auf seine Unterbäume) isEmpty () - Gibt true zurück, wenn es keine Knoten im Baum gibt, andernfalls false. IsFull () - Kann von einigen Implementierungen verlangt werden. Gibt true zurück, wenn der Baum voll ist, andernfalls false. Clear () - Entfernt alle Knoten aus dem Baum (im Wesentlichen die Neuinitialisierung auf einen neuen leeren Baum). Add (value) - Fügt dem Baum einen neuen Knoten mit dem angegebenen Wert hinzu. Die tatsächliche Durchführung dieser Methode wird durch den Zweck für den Baum bestimmt und wie der Baum gepflegt und / oder verarbeitet werden soll. Zunächst werden wir keinen bestimmten Zweck oder Befehl annehmen und deshalb neue Knoten hinzufügen, so dass der Baum nahezu ausgeglichen bleibt. Remove () - Entfernt den Wurzelknoten des Baums und gibt seine Daten zurück. Die tatsächliche Durchführung dieses Verfahrens und andere Formen der Entfernung werden durch den Zweck für den Baum bestimmt und wie der Baum gepflegt und / oder verarbeitet werden soll. Beispielsweise benötigen Sie eine remove () - Methode mit einem Parameter, der angibt, welcher Knoten des Baums entfernt werden soll (basierend auf Position, Schlüsseldaten oder Referenz). Zunächst werden wir keinen bestimmten Zweck oder Befehl annehmen und deshalb die Wurzel so entfernen, dass der Baum nahezu ausgeglichen bleibt. Weitere Operationen, die bei Bedarf hinzugefügt werden können: height () - Bestimmt die Höhe des Baums. Ein leerer Baum hat die Höhe 0. size () - Bestimmt die Anzahl der Knoten im Baum. GetRootData () - Liefert die Daten (primäre Daten) oder den Verweis auf die Daten (Objekte) des Baumes root. GetLeftSubtree () - Gibt einen Verweis auf den linken Teilbaum dieses Baums zurück. GetRightSubtree () - Gibt einen Verweis auf den rechten Teilbaum dieses Baums zurück. 4. Traversale von Binärbäumen Wie bei verknüpften Listen und Arrays, ist es oft notwendig, quitvisitquot und etwas mit jedem Knoten in der Struktur zu tun. Mit verknüpften Listen und Arrays hatte jeder Knoten einen eindeutigen Nachfolger, weshalb die natürliche Weise, die Datenstruktur zu durchlaufen, vom ersten Element zum letzten war. Mit einem binären Baum gibt es keine erste, zweite. Oder letzte Element (dh Bäume sind nicht quotorderedquot Datenstrukturen in der gleichen Weise, wie die linearen Datenstrukturen waren. So gibt es mehrere Möglichkeiten, um einen binären Baum zu durchlaufen. Die häufigsten gehören: Vorbestellung - Besuchen Sie die Wurzel, besuchen Sie alle Knoten in der Wurzel links Teilbaum, und besuchen Sie dann alle Knoten in der Wurzeln rechten Teilbaum in-Ordnung - Besuchen Sie alle Knoten in der Wurzel links Teilbaum, besuchen Sie die Wurzel, und besuchen Sie dann alle Knoten in den Wurzeln rechts Subtree Post-Order - Besuchen Sie alle Knoten in der Wurzel links Teilbaum, besuchen Sie alle Knoten in der Wurzel rechts Teilbaum, und besuchen Sie dann die root Ebene-Reihenfolge - Besuchen Sie die Knoten auf der Ebene. Die Knoten in jeder Ebene sind Diese Methode ist eigentlich die schwierigste und wird selten verwendet. Beispielsweise würden diese Traversierungsschemata die Knoten in den folgenden Ordnungen besichtigen: Vorbestellung A - B - D - C - E - G - H - F in Ordnung D - B - A - G - E - H - C - F nach Bestellung D - B - G - H - E - F - C - Niveahe Ordnung A - B - C - D - E - F - G - H Welche Reihenfolge sollte verwendet werden Abhängig von der jeweiligen Anwendung des Baumes. 5. Implementierungen von Binärbäumen Es gibt drei Hauptformen der Implementierung von Baumstrukturen. Zwei von ihnen umfassen Arrays und die dritte verwendet Referenzen (d. h. Links). Implementierung 1 - Ein Array von Knoten Diese Implementierung ist der Arrayimplementierung einer verketteten Liste sehr ähnlich. Im Folgenden wird gezeigt, wie ein Baum in einem Array gespeichert werden kann. Der Wert von root gibt den Index des Wurzelknotens im Array an. Die Werte von leftChild und rightChild geben die Indizes des Arrays an, in denen sich die untergeordneten Knoten befinden. Ein Wert von -1 wird verwendet, um anzuzeigen, dass es kein Kind gibt. Die Positionen in dem Array, die derzeit nicht von der Struktur verwendet werden, sind Knoten, die den zerlegten Speicherplatz bilden. Diese Knoten bilden einen Stapel. Der Wert von free gibt den Index der Spitze des Stapels an (erster verfügbarer Knoten). Die leftChild gibt den Index des nächsten Knotens im Stapel an (d. H. Freien Speicherplatz). Root3 free4 maxNodes12 Beachten Sie, dass es zwei Bedingungen gibt, die bestimmen, ob ein Knoten kein linkes oder rechtes Kind hat. Es ist nicht links Kind (das richtige Kind wäre ähnlich) der Position an Position k wenn. 2k1 ist größer oder gleich der Größe des Arrays, oder 2k1 ist kleiner als die Größe des Arrays, aber der an dieser Position gespeicherte Wert ist null. Für diese Implementierung eines binären Baums könnte folgendes verwendet werden. Implementierung 3 - Referenzbasierte (verknüpfte) Implementierung Durch die Verwendung einer verknüpften Struktur (ähnlich zu verknüpften Listen) kann ein Binärbaum dynamisch aufgebaut und verwaltet werden. Zuerst wird eine Knotenklasse benötigt. Unter Verwendung dieser Knotenklasse kann eine BinaryTree-Klasse wie folgt implementiert werden (einschließlich in diesem Fall Implementierungen der ADT-Binärbaummethoden, wie oben angegeben): 6. Traversals of Binary Trees - Revisited Nachdem verschiedene Implementierungen von binären Bäumen untersucht worden sind, Das Thema der Durchführung dieser Implementierungen muss erneut besucht werden. Wie oben erwähnt, gibt es primäre 4 Methoden (dh Befehle) zum Durchqueren eines Binärbaums: vorbestellen - Besuchen Sie den Stamm, besuchen Sie alle Knoten im Stammverzeichnis der Wurzel links und besuchen Sie dann alle Knoten in der rechten Unterstruktur . In-order - Besuchen Sie alle Knoten in der Wurzel links Teilbaum, besuchen Sie die Wurzel, und besuchen Sie dann alle Knoten in der Wurzel rechts Teilbaum. Post-Order - Besuchen Sie alle Knoten in der Wurzel links Teilbaum, besuchen Sie alle Knoten in der Wurzeln rechten Teilbaum, und besuchen Sie dann die Wurzel. Ebene-Reihenfolge - Besuchen Sie die Knoten nach Ebene. Die Knoten in jeder Ebene werden von links nach rechts besucht. Diese Methode ist eigentlich die schwierigste und wird selten verwendet. Angenommen, es gibt eine Methode doIt (Object Item), die festlegt, was mit den Daten jedes Knotens geschehen soll, wenn der Baum durchlaufen wird. Sollen diese Methoden außerhalb der BinaryTree-Klassendefinition oder interne If external sein, müssten Sie (zumindest: sollten) die Methoden der BinaryTree-Klasse verwenden, um auf die Daten zuzugreifen. Wenn intern, könnten Sie die jeweilige Implementierung verwenden, aber die doIt () - Methode müsste in dieser Klasse auch definiert werden. Um diese Optionen zu demonstrieren, gibt es im Folgenden zwei optionale Implementierungen eines Pre-Order-Traversals (nachbestellen und in der Reihenfolge ähneln): In-order - und post-order traversals können wie oben implementiert werden, indem man die drei Anweisungen einfach umordnet. Aber was ist mit Level-Reihenfolge In diesem Fall müssen die linken und rechten Teilbäume verarbeitet werden, nachdem alle Geschwister und Cousinen verarbeitet werden. Das heißt, diese Teilbäume müssen in die Warteschleife gebracht werden (d. h. in einer Warteschlange), bis alle Knoten auf der vorherigen Ebene verarbeitet sind. Eine externe Implementierung für eine ebeneübergreifende Traversierung könnte daher wie folgt implementiert werden. 8. Ausdrucksbäume (eine Anwendung von binären Bäumen) Eine wichtige Anwendung von binären Bäumen ist die Darstellung von Ausdrücken, die aus binären Operatoren, Konstanten und Variablen bestehen. Diese Arten von Bäumen werden von Programmiersprachen verwendet, um Ausdrücke und Anwendungen darzustellen, die einen Ausdruck als Benutzereingabe (eine Zeichenfolge) ausführen müssen und diesen Ausdruck (wiederholt und effizient) auswerten können. Binäre Operatoren. Ein binärer Operator ist eine Operation, die auf zwei Werte wirkt und ein einzelnes Ergebnis erzeugt. Wir beschränken uns hier auf Ausdrücke, die die fünf binären Operatoren verwenden. (Addition) - (Subtraktion, nicht Negation) (Multiplikation) / (Teilung) (Exponentiation) Ein Expressionsbaum besteht aus Knoten, deren Daten entweder ein Operator oder ein Wert ist (Konstante oder Variable). Operator-Knoten haben IMMER zwei Kinder, die ihre Operanden darstellen. Wertknoten werden IMMER Blätter. HINWEIS: In allen Fällen wird das linke Kind (Blatt oder Teilbaum) als erster Operand betrachtet und das rechte Kind (Blatt oder Teilbaum) als zweiter Operand betrachtet. Für Addition und Multiplikation ist dies kein Problem, aber für die anderen Operationen wird es einen Unterschied machen. Ausdrucksbezeichnungen. Wie im vorigen Begriff diskutiert, gibt es drei Möglichkeiten, um Ausdrücke algebraisch darzustellen. Infix (Standardnotation): Stellen Sie den Operator zwischen die Operanden (Beispiel: 2 3). Das Problem bei dieser Methode sind Regeln für die Reihenfolge der Operationen. Präfix (aka: Polnische Notation): Stellen Sie den Operator vor seine Operanden (Beispiel: 2 3). Bei dieser Notation werden keine Klammern benötigt. Die primäre Betrachtung ist die Trennung von aufeinanderfolgenden Operanden (normalerweise wird ein einziger Raum verwendet). Postfix (aka: Reverse Polish Notation - RPN): Platzieren Sie den Operator nach seinen Operanden (Beispiel: 2 3). Bei dieser Notation werden keine Klammern benötigt. Die primäre Betrachtung ist die Trennung von aufeinanderfolgenden Operanden (normalerweise wird ein einziger Raum verwendet). Gibt es eine Beziehung zwischen den Ausdrucksnotationen und den Traversalen der Ausdrucksbäume? Ja In-Reihenfolge-Traversal gibt den Infix-Ausdruck an (es müssen Klammern enthalten sein, obwohl einige von ihnen im Endausdruck nicht benötigt werden) - order traversal gibt den postfix-Ausdruck Für jeden Ausdruck gibt es daher einen eindeutigen Ausdrucksbaum. Der Baum ist unabhängig von der mathematischen Notation. Erstellen eines Ausdrucksbaums Wenn ein Ausdruck als Zeichenkette ausgegeben wird, können Ausdrucksbäume abhängig vom verwendeten Ausdruckstyp erstellt werden. Der folgende Algorithmus erstellt einen Ausdrucksbaum aus einem Infix-Ausdruck. HINWEIS: Es wird davon ausgegangen, dass es eine Methode gibt, die die Priorität des Operators bestimmt (eine linke Klammer hat die niedrigste Priorität). Erstellen Sie zwei Stapel. Der erste Stack ist ein Stapel von Referenzen auf Knoten, die Werte darstellen. Dies können Verweise auf entweder Blattknoten (enthaltend eine Konstante oder Variable) oder Verweise auf Wurzeln vollständiger Ausdrucksbäume (Teilbäume des endgültigen Ausdrucksbaums) sein. Der zweite Stack ist ein Stapel von Operatoren (Zeichen), die dem Expressionsbaum noch nicht hinzugefügt wurden. Scannen Sie den Ausdruck (eine Zeichenfolge) von links nach rechts. Ignoriere Leerzeichen. Wenn das nächste Element eine linke Klammer ist, drücken Sie die linke Klammer auf den zweiten Stapel. Wenn das nächste Element in der Zeichenfolge ein Operator ist. Wenn der zweite Stapel leer ist, drücken Sie den Operator (Zeichen) auf den zweiten Stapel. Wenn der zweite Stapel nicht leer ist, während der Vorrang des Operators an der Oberseite des zweiten Stapels größer oder gleich dem neuen Operator ist. Pop ein Operator aus dem Stapel Pop zwei Wert Nodes aus dem ersten Stack. Erstellen einen neuen Knoten, dessen Daten der Operator ist und dessen Kinder die Knoten sind, die aus dem zweiten Stapel gezogen wurden, den neuen Knoten auf den ersten Stapel zu schieben. Drücken Sie den neuen Operator (Zeichen) auf den zweiten Stapel. Wenn das nächste Element in der Zeichenfolge ein Wert ist. Erstellen Sie einen neuen Blattknoten mit dem Wert als seine Daten. Hinweis: Der Wert kann entweder eine Variable oder eine Zahl sein. Drücken Sie die Knotenreferenz auf den ersten Stapel. Wenn das nächste Element im String eine rechte Klammer ist. Während der Operator auf der Oberseite des zweiten Stapels nicht eine linke Klammer ist. Pop ein Operator aus dem Stapel Pop zwei Wertknoten aus dem ersten Stapel erstellen einen neuen Knoten, dessen Daten der Operator ist und dessen Kinder die Knoten aus dem zweiten Stapel gedrückt sind, drücken Sie den neuen Knoten auf den ersten Stapel Pop die linke Klammer aus dem Stapel (verwerfen). Nachdem der Ausdruck erschöpft ist, während der zweite Stapel nicht leer ist. Pop ein Operator aus dem Stapelpop Zwei Wertknoten aus dem ersten Stapel erstellen einen neuen Knoten, dessen Daten der Operator ist und dessen Kinder die Knoten sind, die aus dem zweiten Stapel gezogen werden, schieben den neuen Knoten auf den ersten Stapel Der erste Stack sollte nur noch haben Ein Element darauf (ein Verweis auf den Wurzelknoten des abgeschlossenen Ausdrucksbaums). Daher Pop der erste Stack und zurückgeben diese Referenz. Die Expression Tree Node Expression Bäume haben drei Arten von Knoten. Operator-Knoten, Operandenknoten, die eine bestimmte Zahl enthalten, und Operandenknoten, die eine Variable enthalten. Das Kind eines Knotens (Operator) kann einer der drei Typen von Knoten sein. Aber ein Link kann nur auf einen Objekttyp verweisen. Daher muss ein universeller Knoten erstellt werden, der alle drei Optionen darstellen kann. Eine solche Implementierung könnte die folgende sein (dies setzt nur eine Möglichkeit für die Variable voraus): Wenn das Operatorfeld das Zeichen n ist, dann ist der Knoten ein Operand, der eine bestimmte Zahl enthält. Wenn das Operatorfeld das Zeichen x ist, dann ist der Knoten ein Operand, der die Variable enthält. Wenn das Operatorfeld etwas anderes ist, ist der Knoten ein Operator. Auswerten eines Expression Tree Sobald ein Expression Tree konstruiert ist, kann er dann verwendet werden, um den Ausdruck so oft wie nötig und mit verschiedenen Werten seiner Variablen auszuwerten (falls vorhanden). Der folgende rekursive Algorithmus kann verwendet werden, um den Ausdrucksbaum auszuwerten. Wenn der Wurzelknoten ein Operand (d. h. Blatt) ist, ist der Wert des Ausdrucks die im Wurzelknoten gespeicherten Daten. Wenn der Wurzelknoten ein Operator ist, ist der Wert des Ausdrucks dieser Operator auf den Wert seines linken Teilbaums und den Wert seines rechten Teilbaums angewendet. Unter Verwendung der Implementierung des oben angegebenen ExpressionTreeNodes würde der folgende Algorithmus implementieren: Annehmen der Existenz der Deklaration. Wobei ExpressionTree ein BinaryTree ist, wie oben definiert, dann würde diese Methode wie folgt ausgeführt werden. Wobei number der Wert für die Variable im Ausdruck ist. 9. Eine alternative verknüpfte Implementierung von binären Bäumen Eine alternative Ansicht eines binären Baums besteht darin, jeden Knoten als Baum (oder zumindest den Stamm eines Baums) zu betrachten. Das heißt, anstatt zwei Klassen (eine Baumknotenklasse, die von der binären Baumklasse verwendet wird) zu verwenden, kann eine einzelne Klasse verwendet werden. Diese alternative Binärbaumklasse ist im Wesentlichen nur ein Knoten. Daher könnte die Umsetzung wie folgt sein: Welche Umsetzung sollte verwendet werden Warum


Comments

Popular Posts