Entwickler-Ecke
Algorithmen, Optimierung und Assembler - sortieralgorithmen und deren visualisierung
phobox - Mi 21.06.06 16:36
Titel: sortieralgorithmen und deren visualisierung
hallo erstmal,
ich mach zur zeit mein abitur und hab mich auf ne mündliche prüfung in informatik eingelassen. das thema dreht sich um sortieralgorithmen im vergleich und so.
nu sollte ich ein kleines programm programmieren, das so 2-3 algos kann (bubble vs quick hatte ich mir da gedacht). allerdings klappts irgendwie mit der visualisierung nich so ganz. damit das ding ein bissl was hermacht hatte ich mir gedacht, ich mach was ähnliches wie auf [url]
http://www.sortieralgorithmen.de[/url], so nen kasten punkten, die dann zu so ner schönen linie zusammensortiert werden.
vllt kann mir hier jemand den ein oder anderen tipp geben, wie man sowas umsetzen könnte.
mfg
phobox
p.s. ähm ja, das ganze sollte sich ganz einfach und in delphi 4 bewerkstelligen lassen.....wir sind da leider bissl rückständig was das betrifft ;)
Moderiert von
jasocul: Link korrigiert
MrSaint - Mi 21.06.06 16:40
Hi!
Genau sowas ist schon bei Delphi dabei! Schau mal bei den Demos nach der Thread-Demo. Das macht (fast) genau das was du willst ;)
MrSaint
phobox - Mi 21.06.06 17:26
ok, aussehen tuts echt nich übel, es tut auch das was ich gerne hätte, bloß sollte ich zumindest bei dem was im quelltext steht auch noch durchblicken, is immerhin ne prüfung wo der prüfer auch sachen fragen darf.
da ich sowas normal nur noch in der schule mache ist das niveau auf dem ich mich bewege im gegensatz zu dem manch anderer warscheinns schon im negativen bereich. ;)
wie gesagt, die visualisierung wie sie auf sortieralgorithmen.de ist, wär eigentlich ganz praktisch, da daran auch ein bißchen die verfahrensweise eines algos beschreiben kann, vorallem sieht man auch dass sie was tun und sind nicht beim ersten klick schon fertig. :/
Narses - Mi 21.06.06 17:42
Moin!
Meinst du sowas? ;)
cu
Narses
klezmor - Mi 21.06.06 18:00
für eine Schularbeit mache ich zur zeit auch genau so ein Programm. Ich stelle es sobald es fertig ist, inklusive source online. Shapes werden hierbei durch threads parallel sortiert.
phobox - Mi 21.06.06 22:45
also, ich hab nach 5 stunden fehlersuchen und allem drum und dran endlich was halbwegs gescheites hinbekommen.
ist noch nicht ganz fertig, aber funktioniert schonmal so wie ichs gerne hätte, auch die visualisierung tut =)
wer es sich anschauen will, kann es sich hier runterladen
http://www.phobox.de/pruefsortieren.exe
den quelltext zeig ich lieber (noch) nich, sonst werd ich womöglich noch erschlagen, so wie der aussieht *g*
klezmor - Do 22.06.06 18:38
Wie gesagt muss ich etwas ähnliches machen. Ich geb euch jetzt einfach mal meinen source, vielleicht habt ihr ja ein paar Verbesserungsvorschläge, außerdem fehlt noch die implementierung von heap-, sowie mergesort, bin zwar gerade dabei, scheint jedoch schwerer zu sein, als ich dachte.(ich arbeite relativ viel mit globalen variablen, das finde ich, ist kein guter programmierstil, falls ihr also bessere ansätze habt, so sagt es einfach.)
klezmor - Fr 23.06.06 21:32
hat keiner ne idee, was ich verbessern könnte?
digi_c - Sa 24.06.06 10:14
Also in den Delphi Demos ist doch sowas ähnliches das läuft aber Multithreading ;)
Ich würde das schön in ne Windows konforme GUI packen:
- Fenster normal also auch maximierbar,...
- je Algo eine Groupbox mit Aktivieren Checkbox drin
- rechts groupbox mit Start/Stop und eine Groupbox mit Einstellungen
- Einheitliche Regelelemente(Edits, Spinedits,Regler,..)
Aus der Combobox links unten verschwindet Form wenn man etwas anderes auswählt, das soll doch bestimmt nicht so oder?
klezmor - Mo 03.07.06 23:58
Habe noch ein paar veränderungen vorgenommen, vielleicht gefällt er das prog euch ja jetzt besser.
Delete - Di 04.07.06 00:40
Das
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TBubbleThread.execute; var count:integer; finished:boolean; i:word; begin i:=1; startPerformance; unit1.form1.Cursor:=crhourglass; form1.Button1.Enabled:=false; form1.Button2.enabled:=false;
repeat finished:=true; for count:=high(form1.line[Bubble]) downto i do begin form1.Line[Bubble][count].Brush.Color:=Linecolor1; if form1.line[Bubble][count].clientwidth>form1.line[Bubble][count-1].clientwidth then begin bigger:=count; smaller:=count-1; synchronize(Display); sleep(delay); finished:=false; end; end; form1.Line[Bubble][i-1].Brush.Color:=linecolor1; inc(i); until finished; form1.Cursor:=crdefault; form1.Button1.Enabled:=true; form1.Button2.enabled:=true; stopPerformance; form1.Label6.Caption:=performancestr+'s'; end; |
wird dir irgendwann mal um die Ohren fliegen. Die VCL ist nicht threadsafe, wesegene man nur in der Syncronize Methode auf VCL Elemente zugreifen sollte.
Desweiteren würde ich mir eine bessere Klassenstruktur überlegen. Das Anzeigen und die Werte als Ausgangsbasis haben ja alle Thread gemeinsam, da würde es sich anbieten eine Elternklasse zu implementeieren und davon dann die Sortieralgorithmen abzuleiten.
digi_c - Di 04.07.06 08:21
Ist schon besser aber
-vielleicht ne seriösere Schrift?
-"Zufällig anordnen" vielleicht "Initialisieren"?
-du scheinst immer alle Zahlen des Zahlenbereichs zu haben, sähe vielleicht interessanter aus, wenn es auch doppelte/fehlende Werte gäbe
Ich weiß, ich kann immer nur mäckern mäckern mäckern ;)
klezmor - Di 04.07.06 08:44
Luckie hat folgendes geschrieben: |
wird dir irgendwann mal um die Ohren fliegen. Die VCL ist nicht threadsafe, wesegene man nur in der Syncronize Methode auf VCL Elemente zugreifen sollte.
Desweiteren würde ich mir eine bessere Klassenstruktur überlegen. Das Anzeigen und die Werte als Ausgangsbasis haben ja alle Thread gemeinsam, da würde es sich anbieten eine Elternklasse zu implementeieren und davon dann die Sortieralgorithmen abzuleiten. |
Ok, ist glaube ich auch schon mal passiert, aber wie du gesehen hast greife ich auf die shapes nur über die synchronize Methode zu.(Meinst du vielleicht weil Line ein Feld der Form ist?)
Was hälst du von dem 2-dimensionalen FormArray line, sollte ich das anders lösen?
Bessere Klassenstruktur, leider glaube ich, dass die einzelnen threads nicht viel miteinander zu tun haben, auch in der Visualisierung haben sie nur minimale Gemeinsamkeiten. Sollte ich die einzelnen threads trotzdem erst von einer Mutterklasse mit gemeinsamer Visualisierung ableiten.
Was hälst du von der Lösung mit dem Zeit nehmen der einzelnen threads, glaubst du dass dies eine gute Lösung ist?
digi_c hat folgendes geschrieben: |
Ist schon besser aber
-vielleicht ne seriösere Schrift?
-"Zufällig anordnen" vielleicht "Initialisieren"?
-du scheinst immer alle Zahlen des Zahlenbereichs zu haben, sähe vielleicht interessanter aus, wenn es auch doppelte/fehlende Werte gäbe
Ich weiß, ich kann immer nur mäckern mäckern mäckern ;) |
Über konstruktive Kritik freue ich mich immer.
Das mit den insgesamt regelmäßig verteilten shapes war schon gewollt, aber vielleicht hast du recht und ich nehme doch wieder die alte lösung.
klezmor - Di 04.07.06 11:09
neuste version
klezmor - Mi 05.07.06 11:25
Wie vielleicht manche schon mitbekommen haben, speichere ich die zu sortierenden shapes in einem 2dimensionalen Array(für jeden algorithmus ein feld).
Um mit den feldern thread sicher arbeiten zu können, brauche ich ein nicht vcl basierendes Array, welches die einzelnen Werte speichert. Auf dieses Array greife ich dann innerhalb der einzelnen Threads zu.
Habe versucht eine Klassenstruktur aufzubauen, welche eine gemeinsame Display methode verwendet, leider kann ich nun nicht mehr alle Arrays gleichzeitig sortieren. einzeln klappt es wunder bar, aber wenn ich die threads gleichzeitig ablaufen lasse, kommt eine Speicherfehlmeldung. Ich vermute stark, dass dies etwas mit der angesprochenen Klassenstruktur zu tun hat. Vielleicht kann sich ja jemand erbarmen, und meinen code mal durchgehen.
klezmor - Fr 14.07.06 19:36
keiner ne Idee, wie eine solche struktur aussehen könnte?
phobox - Do 20.07.06 18:57
hmm is jetzt schon ein bissl länger her, tut auch vllt nich viel zur sache, aber mündliche prüfung lief bei mir 1a....14 punkte, mitunter für das "tolle programm, mit dem ich mir so viel mühe gemacht habe"
danke euch nochmal für die zT recht hilfreichen tipps und verweise =)
mfg
phobox
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!