Type´s Collection an Functionen übergeben?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Rallimen

Sieger des 30-EUR-Wettbewerbs

Betreff: Type´s Collection an Functionen übergeben?

BeitragMo, Mai 16, 2005 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe einen Quicksort ähnlichen Sortieralgo spezial für Types geschrieben. (Sauschnell) Very Happy
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
Type test2 Field x,y,z End Type
Type test3 Field x,y,z End Type
Type test4 Field x,y,z End Type
Type test5 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]

Quicksort_Type(test1,x)
Quicksort_Type(test2,y)
Quicksort_Type(test3,z)


oder gehts nur so...
BlitzBasic: [AUSKLAPPEN]

Quicksort_test1_x()
Quicksort_test2_y()
Quicksort_test3_z()

... wären in meinem Beispiel aber schon 15 Functionen!
[BB2D | BB3D | BB+]
 

Dreamora

BeitragMo, Mai 16, 2005 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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]

Type test
Field values%[3]
End Type

Function Quicksort_Type(name$,value%)
; name$ ist der Name des Types
; value% gibt den index des sortierwertes aus
Select Lower(name$)
Case \"test1\"
quicksort_test1 (value)
Case \"test2\"
quicksort_test2 (value)
;und so weiter :)
End Select
End Function



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

BeitragMo, Mai 16, 2005 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 16, 2005 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Genauer gesagt geht es darum die Function nicht immer anzugleichen an das jeweilige Programm
Beispiel:
BlitzBasic: [AUSKLAPPEN]
;1. Programm
Type MP3 Field Name$ , Dauer% ,x,y,z,Genere$ End Type
...
Sort(MP3,Name)

;2.Programm
Type Bekannte Field Name$ , Geb_datum% End Type
...
Sort(Bekannte,Geb_datum% )
;usw.

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_
Input Type Name:
Input Field Name:
Input Auf bzw Abwärts:
Generate.....
Code copy to clippboard
Paste .... Fertig sind 80 Zeilen angepaßter Code!
[BB2D | BB3D | BB+]

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 16, 2005 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy denke nicht dass es dann noch schneller geht!
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

BeitragMo, Mai 16, 2005 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 16, 2005 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
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

BeitragMo, Mai 16, 2005 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 16, 2005 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Mai 17, 2005 0:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

user posted image

So habe ich die Fehler bei schreiben des Codes sofort eleminiert! Wink
[BB2D | BB3D | BB+]

BladeRunner

Moderator

BeitragDi, Mai 17, 2005 6:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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

Betreff: Re: Type´s Collection an Functionen übergeben?

BeitragDi, Mai 17, 2005 7:02
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

BladeRunner

Moderator

BeitragDi, Mai 17, 2005 8:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Mai 17, 2005 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Mai 17, 2005 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Very Happy!

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

BeitragDi, Mai 17, 2005 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group