ADT Darstellung/Tutorial
Erläuterung von Begriffen
Mittwoch, 21. Juli 2010 von Ana
Auf den Hinweis, dieser Worklog seie unverständlich, hier mal ein paar Abkürzungserläuterungen und Erklärungen
ADT Abstrakte DatenTypen
- Gedankenmodell eines Algorithmus, muss nicht endgültig implementiert sein, eher Sprach übergreifend
BST Binary Search Tree
- Sortier- und suchalgorithmus, der seine Daten anders als Listen immer mit 2 statt einem Pointer aneinander hängt oder in arrays jeweils jedes element n bezug auf das 2n - te und 2n +1 te element hat
AVL - Eigenname
- Beschreibt eine Technik zur Balancierung von Bäumen (BST)
Heapsorte
- Sortiert durch Heapbäume
Heapbaum
- Fast vollständiger Binärbaum, bei dem die Bedingung gilt: Parent < Child
Hash
- Funktion die einen Schlüssel für einen Sortier- und suchalgorithmus erstellt
Divide & Conquer
- Lösungsstrategie für Probleme, durch zerlegen in kleinere Teilprobleme
Quicksorte
- Sortieralgorithmus (nicht suchfähig) der mit dem Divide and Conquer Prinzip auf dem Hinweg der Rekursion arbeite
Mergesorte
- Sortieralgorithmus (nicht suchfähig) der mit dem Divide and Conquer Prinzip auf dem Rückweg der Rekursion arbeitet
(Beide tun sowohl auf dem Hin- wie auch auf dem Rückweg etwas, aber die meiste Arbeit wird auf dem genannten Weg bewältigt)
Traversierung - ist als solches ein "normales" deutsches Wort was ungefähr Bereisung entsprechen müsste, vielleicht sinnvoller eine Verbindung zum englischen Travel herzustellen.
Traversierungen dienen dazu alle Knoten eines Baumes in einer bestimmten Reihenfolge zu "besuchen", wobei besuchen heißt irgendwas mit den Jungs tun.
Es gibt (d.h ich kenne) drei Sorten von Traversierungen:
- Inorder
erst das linke Kind dann der Knoten selbst, dann das rechte Kind
-Preorder
erst linkes Kind, dann rechts Kind dann Knoten
-Postorder
erst Knoten dann linkes dann rechtes Kind.
Fehlt was?
ADT Abstrakte DatenTypen
- Gedankenmodell eines Algorithmus, muss nicht endgültig implementiert sein, eher Sprach übergreifend
BST Binary Search Tree
- Sortier- und suchalgorithmus, der seine Daten anders als Listen immer mit 2 statt einem Pointer aneinander hängt oder in arrays jeweils jedes element n bezug auf das 2n - te und 2n +1 te element hat
AVL - Eigenname
- Beschreibt eine Technik zur Balancierung von Bäumen (BST)
Heapsorte
- Sortiert durch Heapbäume
Heapbaum
- Fast vollständiger Binärbaum, bei dem die Bedingung gilt: Parent < Child
Hash
- Funktion die einen Schlüssel für einen Sortier- und suchalgorithmus erstellt
Divide & Conquer
- Lösungsstrategie für Probleme, durch zerlegen in kleinere Teilprobleme
Quicksorte
- Sortieralgorithmus (nicht suchfähig) der mit dem Divide and Conquer Prinzip auf dem Hinweg der Rekursion arbeite
Mergesorte
- Sortieralgorithmus (nicht suchfähig) der mit dem Divide and Conquer Prinzip auf dem Rückweg der Rekursion arbeitet
(Beide tun sowohl auf dem Hin- wie auch auf dem Rückweg etwas, aber die meiste Arbeit wird auf dem genannten Weg bewältigt)
Traversierung - ist als solches ein "normales" deutsches Wort was ungefähr Bereisung entsprechen müsste, vielleicht sinnvoller eine Verbindung zum englischen Travel herzustellen.
Traversierungen dienen dazu alle Knoten eines Baumes in einer bestimmten Reihenfolge zu "besuchen", wobei besuchen heißt irgendwas mit den Jungs tun.
Es gibt (d.h ich kenne) drei Sorten von Traversierungen:
- Inorder
erst das linke Kind dann der Knoten selbst, dann das rechte Kind
-Preorder
erst linkes Kind, dann rechts Kind dann Knoten
-Postorder
erst Knoten dann linkes dann rechtes Kind.
Fehlt was?
Dem Titel nicht mehr gerecht
Dienstag, 20. Juli 2010 von Ana
Falls es jemanden aufgefallen ist, was ich nicht annehme, wurde aus dem BST ein ADT für Abstraktedatentypen.
Und das mit dem Grund! Der Quicksorte hält neben dem Hash nun auch einzug in das Programm und da die beiden nun wirklich keine Suchbäume sind, muss der Name des Ganzen dem ja auch Tribut zollen. Leider ist mir die grafische Darstellung der "Divide & Conquer" Idee nicht zu meiner zufriedenheit gelungen und ich bin mir nicht sicher wie verständlich das gesamte Tutorial für D&C Strukturen ist ... aber immerhin es ist da und arbeite soweit ich das sehe ganz gut. Was mir gerade beim Tippen so einfällt für quicksorte sollten die Button löschen und Info nicht verwendet werden, Info dürfte so ziemlich nichts liefern außer das Nachbarelement und löschen, nun ja keine ahung vermutlich gar nichts oder einen Absturtz.
Außerdem ist nun auch ein Fenstermodus verfügbar, zumindest nach einem Neustart des Programmes, mit geringerer Auflösung (1024x800). Ob dann wirklich alle Texte noch passen glaube ich allerdings nicht ...
Jedenfalls viel Freude damit, nun fehlt an ADT eigentlich nur noch Heapsorte und Mergesort.
Klar gibs noch andere Datenstrukturen und man kann auch viel mehr über jede einzelne sagen, aber wer sich dafür so interessiert sollte eventuell ein Fachbuch kaufen, ich kann und will ja nicht ein solches ersetzen, sondern nur mal die Jungs vorstellen, damit man weiß welche man verwendet. Zumindest in Java u.ä. sind diese Strukturen ja eh schon fest implementiert und für BB gibs die sicherlich auch, wenn nicht schreib ich gerne noch ein paar libs für die fehlenden. Direkt aus meinem Code sollten die nicht übernommen werden, da ich ab und zu einige umwege machen muss, damit die grafische Repräsentation passt.
Die aktuelle Version gibs unter:
https://www.blitzforum.de/upload/file.php?id=9143
Und das mit dem Grund! Der Quicksorte hält neben dem Hash nun auch einzug in das Programm und da die beiden nun wirklich keine Suchbäume sind, muss der Name des Ganzen dem ja auch Tribut zollen. Leider ist mir die grafische Darstellung der "Divide & Conquer" Idee nicht zu meiner zufriedenheit gelungen und ich bin mir nicht sicher wie verständlich das gesamte Tutorial für D&C Strukturen ist ... aber immerhin es ist da und arbeite soweit ich das sehe ganz gut. Was mir gerade beim Tippen so einfällt für quicksorte sollten die Button löschen und Info nicht verwendet werden, Info dürfte so ziemlich nichts liefern außer das Nachbarelement und löschen, nun ja keine ahung vermutlich gar nichts oder einen Absturtz.
Außerdem ist nun auch ein Fenstermodus verfügbar, zumindest nach einem Neustart des Programmes, mit geringerer Auflösung (1024x800). Ob dann wirklich alle Texte noch passen glaube ich allerdings nicht ...
Jedenfalls viel Freude damit, nun fehlt an ADT eigentlich nur noch Heapsorte und Mergesort.
Klar gibs noch andere Datenstrukturen und man kann auch viel mehr über jede einzelne sagen, aber wer sich dafür so interessiert sollte eventuell ein Fachbuch kaufen, ich kann und will ja nicht ein solches ersetzen, sondern nur mal die Jungs vorstellen, damit man weiß welche man verwendet. Zumindest in Java u.ä. sind diese Strukturen ja eh schon fest implementiert und für BB gibs die sicherlich auch, wenn nicht schreib ich gerne noch ein paar libs für die fehlenden. Direkt aus meinem Code sollten die nicht übernommen werden, da ich ab und zu einige umwege machen muss, damit die grafische Repräsentation passt.
Die aktuelle Version gibs unter:
https://www.blitzforum.de/upload/file.php?id=9143
Das Loslassen von festen Strukturen
Samstag, 17. Juli 2010 von Ana
So nun geht auch das Löschen von Baumknoten, beim Hash hab ich mir noch nicht die Mühe gemacht, da es dort relative trivial ist. Nun werde ich als nächstes noch Heapsort und Mergesort einbauen und dann ein wenig wie man wohl als Wirtschaftswissenschaftler sagen würde "qualitätsmanagement" betreiben und dann den langweiligeren Teil der Laufzeitbestimmungen, allgemeine Dinge zu O - Notation (Definition/Berechnung) erzählen. Da sich das nun eher schlecht grafisch Darstellen lässt, (außer mit Graphen) wird der Teil wohl einfach seiner Natur gemäß trocken werden. Falls jemand eine bessere Idee hat zur Darstellung, würde mich freuen die zu hören.
Ach ja und die aktuelle Version, sie hat 2 Bugs die eventuell Probleme bei der Programmstabilität verursachen können, sprich es stürtzt ab. Allerdings ist mir noch nicht ganz klar warum und wann sie auftretten.
Glaube es hat was mit Camerafahrten + Rotation, Löschung zu tun.
Wer trotzdem den Mut besitzt hier ist es:
https://www.blitzforum.de/upload/file.php?id=9108
Edit: Achja wer die Wurzel löscht ist auch bei dem Programm unten durch^^
Ach ja und die aktuelle Version, sie hat 2 Bugs die eventuell Probleme bei der Programmstabilität verursachen können, sprich es stürtzt ab. Allerdings ist mir noch nicht ganz klar warum und wann sie auftretten.
Glaube es hat was mit Camerafahrten + Rotation, Löschung zu tun.
Wer trotzdem den Mut besitzt hier ist es:
https://www.blitzforum.de/upload/file.php?id=9108
Edit: Achja wer die Wurzel löscht ist auch bei dem Programm unten durch^^
Schlaflosigkeit
Freitag, 16. Juli 2010 von Ana
Also 2 Dinge hab ich heute gelernt, niemals wieder so viel Eiskaffee zum Abendessen und auch nicht sagen etwas ginge ohne sicher zu sein.
Letzteres bezieh ich auf die Doppelrotation, bei der ich nun hoff den Fehler gefunden zu haben. Falls es jemanden interessiert, die Knoten werden mit einer Inordertraversierung durchlaufen und bekommen so ihre x position, die Inorder würd bei dem Pointer des Baumes begonnen, der immer auf die Wurzel zeigen sollte. Wenn aber nun der ausgewählte Knoten die neue Wurzel wird hab ich vergessen das dem Baum mit zuteilen, der dann immer noch fleißig auf die alte Wurzel zeigte und somit das Inorder völlig verwurstet. Also lange rede kurzer Sinn, es geht nun.
Außerdem sind
nun alle Fenster verschiebbar
es gibt (noch) 2 erläuternde Schaubilder
es ist möglich Informationen über den ausgewählten Knoten aufzurufen
das AVL Tut ist fast fertig, nur war ich zwischen zeitlich recht betrunken, was sich vermutlich relativ
negativ auf den Text ausgewirkt hat (die eh schon nicht so geil werden weil sie in einen langenString geschrieben werden und das irgendwie unübersichtlich ist). Deshalb werd ich mir das heute/morgen nochmal anschauen was ich da so verzapfe.
Außerdem muss ich ja ein wenig mit dem Stoff voran kommen, deshalb gibs nun auch Hash-Trees (welche sich in B3D wirklich nur mäßig implementieren lassen oder kennt jemand eine möglichkeit arrays zur Laufzeit anzulegen?).
Und um meine 3D zurecht fertigen (auch wenn ich 3d eigentlich bequemer finde als 2D was schon Rechtfertigung genug sein sollte) ist es nun möglich Bäume verschiedener Arten, also im moment BST und Hash hinter einander anzuzeigen und mit den selben Eingaben zu versorgen. Was das bringt? Keine Ahung es ist 4 Uhr morgens , gut aussehen vielleicht? Naja wenn man großzügig ist vielleicht
Letzteres bezieh ich auf die Doppelrotation, bei der ich nun hoff den Fehler gefunden zu haben. Falls es jemanden interessiert, die Knoten werden mit einer Inordertraversierung durchlaufen und bekommen so ihre x position, die Inorder würd bei dem Pointer des Baumes begonnen, der immer auf die Wurzel zeigen sollte. Wenn aber nun der ausgewählte Knoten die neue Wurzel wird hab ich vergessen das dem Baum mit zuteilen, der dann immer noch fleißig auf die alte Wurzel zeigte und somit das Inorder völlig verwurstet. Also lange rede kurzer Sinn, es geht nun.
Außerdem sind
nun alle Fenster verschiebbar
es gibt (noch) 2 erläuternde Schaubilder
es ist möglich Informationen über den ausgewählten Knoten aufzurufen
das AVL Tut ist fast fertig, nur war ich zwischen zeitlich recht betrunken, was sich vermutlich relativ
negativ auf den Text ausgewirkt hat (die eh schon nicht so geil werden weil sie in einen langenString geschrieben werden und das irgendwie unübersichtlich ist). Deshalb werd ich mir das heute/morgen nochmal anschauen was ich da so verzapfe.
Außerdem muss ich ja ein wenig mit dem Stoff voran kommen, deshalb gibs nun auch Hash-Trees (welche sich in B3D wirklich nur mäßig implementieren lassen oder kennt jemand eine möglichkeit arrays zur Laufzeit anzulegen?).
Und um meine 3D zurecht fertigen (auch wenn ich 3d eigentlich bequemer finde als 2D was schon Rechtfertigung genug sein sollte) ist es nun möglich Bäume verschiedener Arten, also im moment BST und Hash hinter einander anzuzeigen und mit den selben Eingaben zu versorgen. Was das bringt? Keine Ahung es ist 4 Uhr morgens , gut aussehen vielleicht? Naja wenn man großzügig ist vielleicht
Verbessertes Interface
Donnerstag, 15. Juli 2010 von Ana
So nun hab ich das interface ein wenig überarbeite und die Doppelterotation funktioniert auch soweit ich das sehe, außer man verwendet sie in situationen in denen sie nicht angebracht ist( Angebracht ist sie wenn y das linke/rechte kind von z ist und x das rechte/linke kind von y)
Außerdem stehen nun Optionen zur Verfügung, einmal das der Text "fließend dargestellt wird" also der String alle 20 millisekunden um ein Zeichen länger wird und das die rotation der Kamera ausgeschaltet werden kann.
Erstes schaltet, den zugegeben auf dauer sehr nervigen effekt aus, zweiteres lässt die Kamera nun immer 90° Winkel zum Baum, damit es im prinzip eine 2D Darstellung wird, falls noch andere die Kameradrehung verwirrend fanden. Meiner Meinung nach geht da was verloren, wenn man es auschaltet, aber das ist ja nun nicht mehr in meiner Hand und die Wahl haben ist eigentlich immer gut.
Und zum Interface: Zum einen verwende ich nun Arial Schriftgröße 16 (UHI!) was ja eigentlich bei niemanden Augenkrebs verursachen sollte, wenn auch nicht gerade eine Designmeisterleistung ist. Das Muster der Textboxen ist nun dezenter, kleiner und dunkler, wie auch die gesamte Textbox dunkler ist und dafür die Textfarbe ein wenig kräftiger, was eigentlich einen besseren Kontrast machen sollte.
Die neuere Version hat die alte ersetzt und ist hier zu bekommen:
(Link gibs nicht mehr, aktuelle Version ist weiter oben)
Und danke für die konstruktive Kritik von Firstdeathmaker, falls sonst noch wer was zu bemänglen hat oder es so toll findet das er/sie am liebsten auch ein AVL Baum wäre immer zu
Außerdem stehen nun Optionen zur Verfügung, einmal das der Text "fließend dargestellt wird" also der String alle 20 millisekunden um ein Zeichen länger wird und das die rotation der Kamera ausgeschaltet werden kann.
Erstes schaltet, den zugegeben auf dauer sehr nervigen effekt aus, zweiteres lässt die Kamera nun immer 90° Winkel zum Baum, damit es im prinzip eine 2D Darstellung wird, falls noch andere die Kameradrehung verwirrend fanden. Meiner Meinung nach geht da was verloren, wenn man es auschaltet, aber das ist ja nun nicht mehr in meiner Hand und die Wahl haben ist eigentlich immer gut.
Und zum Interface: Zum einen verwende ich nun Arial Schriftgröße 16 (UHI!) was ja eigentlich bei niemanden Augenkrebs verursachen sollte, wenn auch nicht gerade eine Designmeisterleistung ist. Das Muster der Textboxen ist nun dezenter, kleiner und dunkler, wie auch die gesamte Textbox dunkler ist und dafür die Textfarbe ein wenig kräftiger, was eigentlich einen besseren Kontrast machen sollte.
Die neuere Version hat die alte ersetzt und ist hier zu bekommen:
(Link gibs nicht mehr, aktuelle Version ist weiter oben)
Und danke für die konstruktive Kritik von Firstdeathmaker, falls sonst noch wer was zu bemänglen hat oder es so toll findet das er/sie am liebsten auch ein AVL Baum wäre immer zu
Die Alphaversion
Mittwoch, 14. Juli 2010 von Ana
Da ich hier über ein paar Diskusionen über Sortieralg.diskusionen geraten bin hab ich mir mal die Mühe gemacht das ganz hübsch darzustellen und so vielleicht einfacher verständlich zu machen. Grundlage sind meine Erinnerung meine (zu gegebenen unvollständigen) Vorlesungsmitschriften. Im Moment kann das Programm
"beliebig" viele Knoten erstellen und einordnen
Camerafahrten
AVL Einfache Rotationen (auch Doppelte aber die sind noch nicht fehlerfrei manchmal wird es beim traversieren die anordnung vermurkst, deshalb nicht ansteuerbar)
Traversierung nach Balance Werten
2 Erklärungsskripte für BST's und AVL-BST wobei letzters noch unvollständig ist da die Doppelte ja nicht zuverlässig ist.
Falls jemand schon mal mit rumspielen will:
(Links gibs nicht mehr, neuere Version ist weiter oben)
"beliebig" viele Knoten erstellen und einordnen
Camerafahrten
AVL Einfache Rotationen (auch Doppelte aber die sind noch nicht fehlerfrei manchmal wird es beim traversieren die anordnung vermurkst, deshalb nicht ansteuerbar)
Traversierung nach Balance Werten
2 Erklärungsskripte für BST's und AVL-BST wobei letzters noch unvollständig ist da die Doppelte ja nicht zuverlässig ist.
Falls jemand schon mal mit rumspielen will:
(Links gibs nicht mehr, neuere Version ist weiter oben)