Type´s Collection an Functionen übergeben?
Übersicht
BlitzBasic
Allgemein|
|
RallimenSieger des 30-EUR-WettbewerbsBetreff: Type´s Collection an Functionen übergeben? |
Antworten mit Zitat |
|---|---|---|
|
Hallo,
ich habe einen Quicksort ähnlichen Sortieralgo spezial für Types geschrieben. (Sauschnell) Da Types ja eine Vielzahl an Möglichkeiten bietet, hier mal eine paar Fragen... mal angenommen ich habe verschiedene Types: BlitzBasic: [AUSKLAPPEN] Type test1 Field x,y,z End Type gibt es eine Möglichkeit der SortierRoutine das Field (besser noch den Typenamen) zu übergeben nach welchem sortiert werden soll, oder muß ich jeweils eine extra Function dafür schreiben? (einmal nach x sortieren und einmal nach y) BlitzBasic: [AUSKLAPPEN]
oder gehts nur so... BlitzBasic: [AUSKLAPPEN]
... wären in meinem Beispiel aber schon 15 Functionen! |
||
|
[BB2D | BB3D | BB+]
|
||
Dreamora |
Antworten mit Zitat |
|
|---|---|---|
|
Theoretisch geht es, aber über nen kleinen Umweg. Jedoch musst du dafür den Namen des Types als String übergeben und eine Fallunterscheidung machen:
BlitzBasic: [AUSKLAPPEN]
Das ist zwar ein "Umweg", jedoch erlaubt es dir genau das was du machen willst. Alternativ kannst du statt dem Values array natürlich auch in quicksort_test selbst nochmal ein select case nach dem value machen und in den types mit x,y,z arbeiten |
||
| Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. | ||
- Zuletzt bearbeitet von Dreamora am Mo, Mai 16, 2005 12:06, insgesamt einmal bearbeitet
|
|
DivineDominion |
Antworten mit Zitat |
|---|---|---|
|
Problem ist: Du würdest ja an die Funktion einmal das Type übergeben und dann eine Variable x. Und dabei nur deren Wert; es steht nirgendwo mehr "x", sondern nur, was x für einen Inhalt hatte...
Denkbar wären solche Verrenkungen eigentlich nicht wirklich. Pointer würden dafür auch nichts taugen. Was vielleicht etwas übersicht schaffen würde wäre, wenn du BlitzMax nutzt - dort gibt es Verkettete Listen mit Sortierungsfunktionen (wobei man in den Objekten, also hier test1-3, eine Methode erstellen kann, die zum Sortieren aufgerufen wird und das steuert). Funktionen in den Types fort köntnen auh helfen, da sie Instanzunabhängig sind. Problem ist dann nur, dass du bloß durch verkettete Listen mit allen Instanzen auf sie zugreifen kannst, gibt "Each type" in dem Sinne nämlich nicht mehr. Hast dir da was schönes ausgesucht |
||
|
christian.tietze@gmail.com - https://christiantietze.de
macOS |
||
|
|
RallimenSieger des 30-EUR-Wettbewerbs |
Antworten mit Zitat |
|---|---|---|
|
Genauer gesagt geht es darum die Function nicht immer anzugleichen an das jeweilige Programm
Beispiel: BlitzBasic: [AUSKLAPPEN] ;1. Programm also die Function soll generell immer functionieren, egal was sortiert werden soll! Wäre das einfachste, aber das geht bestimmt nicht! Die andere Variante wäre die function immer anzugleichen (Typenamen und field umzubenennen! Die einfachst Variante wäre ein Code-Generator zu proggen der die Function mit dem richtigen Werten füllt! Code: [AUSKLAPPEN] Input Function Name: Sortier_
Paste .... Fertig sind 80 Zeilen angepaßter Code!
Input Type Name: Input Field Name: Input Auf bzw Abwärts: Generate..... Code copy to clippboard |
||
|
[BB2D | BB3D | BB+]
|
||
|
|
RallimenSieger des 30-EUR-Wettbewerbs |
Antworten mit Zitat |
|---|---|---|
|
Nochwas, ich habe schon nach schnellen sortierRoutinen gesucht, aber bis auf diese keine schnellere gefunden!
Kennt noch jemand was schnelleres ? PS: Meine macht zur Zeit 100000 Einträge in 5 sec die schnellste die ich bis jetzt gefunden habe schafft in der Zeit gerade mal ca 5000 Einträge! |
||
|
[BB2D | BB3D | BB+]
|
||
|
|
Ctuchik |
Antworten mit Zitat |
|---|---|---|
|
QuickSort ist eines der schnellsten, wenn nicht sogar DAS schnellste Sortierverfahren!
Hab gerade keinen Link da, aber http://www.google.de sollte dir weiterhelfen! Ich versuch sowas mal schnell mit Types umzusetzen, wenn ich noch Zeit hab! (krieg gleich Besuch) EDIT: Oder benutzt du schon Quicksort? Weil deine Funktion heißt so, is mir grad aufgefallen! EDIT2: Ach ja meine Augen, da stehts ja in deinem ersten Satz, ok vergiss alles was ich gesagt habe EDIT3: Es sei denn die Types sind immer schon vorsortiert, dann gibts glaub ich ein Verfahren, dass mit vorsortierten Daten im Schnitt schneller is als Quciksort (glaub ich, keine Gewähr) |
||
|
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
||
|
|
DivineDominion |
Antworten mit Zitat |
|---|---|---|
|
Was du wilslt ist quasi eine Sortierung wie in einer Datenbank (SQL beispielsweise, wie MySQL für die meisten Webapplikationen).
Was mit Datenbanken geht, klappt so mit den Types aber leider nicht. Kann da wirklich nur auf Blitzmax und Listen verweisen, in den alten BBs wär sowas wohl ein Ding der Unmöglichkeit |
||
|
christian.tietze@gmail.com - https://christiantietze.de
macOS |
||
|
|
RallimenSieger des 30-EUR-Wettbewerbs |
Antworten mit Zitat |
|---|---|---|
|
Das beruht im Prinzip schon auf Quicksort,
nur das es diesmal nicht mit einem Array ist(das gibts zuhauf im Netz)! Mit Types hab ich nichts vergleichbares gefunden was annähernd an Quicksort rankommt! Also habe ich versucht das umzusetzten mit Handle Objekt und so... Jetzt habe ich das fertig und bin immer wieder erstaunt wie schnell das ist! |
||
|
[BB2D | BB3D | BB+]
|
||
Dreamora |
Antworten mit Zitat |
|
|---|---|---|
|
Nunja
Quicksort bricht auch nicht alle Rekorde. Es taugt nur bei sehr vielen Types (mehrere Zehntausend) und wenn die Daten keine Vorsortierung besitzen. Andernfalls ist Quicksort einer der mit Abstand langsamsten Sortieralgorithmen. Und mindestens ersteres ist in BlitzBasic eigentlich unwahrscheinlich, da dort das Type Handlingsystem sich dann langsam zu Wort meldet. In diesen Fällen kommen Algorithmen wie Bucket Sort, Shellsort und selbst BubbleSort besser weg. |
||
| Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. | ||
|
|
Alfadur |
Antworten mit Zitat |
|---|---|---|
|
bubblesort hat als komplexität o(n²), das ist auch die worst case komplexität von quicksort... also denke nicht das man das in betracht ziehen sollte....
nixdestotrotz könnte man noch mergesort und heapsort ausprobieren. im endeffekt kommt es (fast) immer darauf an wie sortiert die daten am anfang sind. wenn du das weißt kannst du in abhängigkeit davon verschiedene sortieralgorithmen drüberjagen ... |
||
| A Cray is the only computer that runs an endless loop in less than four hours. | ||
|
|
Ctuchik |
Antworten mit Zitat |
|---|---|---|
|
Bucketsort ist soweit ich weiss im Schnitt nicht schneller als Quicksort!
Shellsort hab ich noch nie gehört, da muss ich mich mal informieren! BubbleSort ist wie schon gesagt auf jeden Fall langsamer als Quicksort! Heap und Mergesort sagen mir was, allerdings kann ich da zur Geschwindigkeit nichts sagen, werde mal googlen |
||
|
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
||
Dreamora |
Antworten mit Zitat |
|
|---|---|---|
|
Ich weiss, dass die die meisten anderen Sortieralgos O(n^2) haben. Nur wenn die Konstante die da gestrichen wird so gross ist wie bei QuickSort, dann braucht man einiges an Elementen, damit das ^2 dies ausgleicht.
Von daher empfehle ich einen Test, denn in dem Bereich wo QuickSort anfängt seine Stärken auszuspielen hört B3D auf mit effizientem Typehandling. Hinzu kommt ein Vorteil von BubbleSort: Er kann direkt das Type Listenhandling mit First Before After Last benutzen. |
||
| Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. | ||
|
|
Ctuchik |
Antworten mit Zitat |
|---|---|---|
|
Ohne jetzt auf die Wahl des besten Sortieralgos einzugehen ...
Ich hab mich mal daran versucht, QuickSort für Types umzusetzen, bin allerdings gescheitert. Was mir Probleme bereitet ist, dass man nicht feststellen kann, welcher von 2 Types weiter vorne ist. Ich hab ein bischen experimentiert und die Anfangsschritte macht er auch immer richtig, aber nach ein paar rekursiven Aufrufen der Funktion kommt immer ein "Object does not exist" (oder so ähnlich) Fehler, den ich einfach nicht wegkrieg! Wie hast du das gelöst Rallimen? Würd mich mal interessieren! MfG Ctuchik |
||
|
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
||
|
|
RallimenSieger des 30-EUR-Wettbewerbs |
Antworten mit Zitat |
|---|---|---|
|
Ich habs mal durchgetestet... da ich in der Schule nie sowas mit O(n^2)
Also beim sortieren von Integer oder Floats ist bis 150 Elementen InsertionSort() von Blitzbasic.com schneller! Beim sortieren von Strings ist ab 15 Elementen schon Quicksort schneller! Das liegt daran das die InsertionSort() wesendlich öfter vergleichen muß und Strings vergleichen dauert halt! @Ctuchik Das Problem hatte ich auch, und wie ich das gelöst habe, glaubt mir eh keiner, aber war eine sehr gute Idee! Also, ich habe mir kleine Kärtchen gemacht und , ..ach was solls seht hier!
So habe ich die Fehler bei schreiben des Codes sofort eleminiert! |
||
|
[BB2D | BB3D | BB+]
|
||
|
|
BladeRunnerModerator |
Antworten mit Zitat |
|---|---|---|
|
So Jungs, schaut mal her: so funktioniert Problemlösen. Ist halt mehr als sich nur an den Rechner setzen und lostippen.
Knuffige Idee mit den Kärtchen Ralli |
||
|
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
||
lettorTrepuSBetreff: Re: Type´s Collection an Functionen übergeben? |
Antworten mit Zitat |
|
|---|---|---|
| -aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
|
|
BladeRunnerModerator |
Antworten mit Zitat |
|---|---|---|
|
ST: Rallimen sucht ja eine Möglichkeit für eine Sortierfunktion welche unabhängig vom Aufbau einzelner Types nach beliebigen Feldern ebendieser sortieren kann.
Dein Post ist also leider vollkommen am Thema vorbei, denn die Grundfunktionen von Types hat Ralli so wie ich ihn einschätze schon lange gemeistert. |
||
|
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
||
lettorTrepuS |
Antworten mit Zitat |
|
|---|---|---|
| -aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
|
|
RallimenSieger des 30-EUR-Wettbewerbs |
Antworten mit Zitat |
|---|---|---|
|
@ShadowTurtle: Das meißte kannte ich schon, aber das ich Types so einfach übergeben kann wußte ich noch nicht, das hatte ich mit handle und Objekt gemacht!
danke! nachdem ich das noch in meiner Function abgeändert habe ist der Type_Quicksort mit der Geschwindigkeit noch deutlich besser geworden! genauer gesagt bis zu 3x schneller hab gleich noch ein Test gemacht mit unsortierten ab 20 zu sortierenden Integern gehts mit Quicksort schneller! bei Strings immerhin schon ab 3 Einträgen |
||
|
[BB2D | BB3D | BB+]
|
||
lettorTrepuS |
Antworten mit Zitat |
|
|---|---|---|
| -aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Übersicht
BlitzBasic
Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group

