Type durchmixen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Smily

Betreff: Type durchmixen?

BeitragFr, Apr 13, 2007 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe folgendes problem: Ich brauche eine möglichkeit, einen Type, welcher u.a. auch viele einträge haben kann, relativ schnell "durchzumixen".

hier mein Ansatz, damit ihr wisst, was ich meine:

Code: [AUSKLAPPEN]
Type n
   Field n
End type

Print "create type"
For c = 1 To 10
   n.n = New n
   n\n = c

Next

Print "mix"
mix

For n.n = Each n
   Print n\n
next

function mix()
   For d = 1 To 3
      For n.n = Each n
         If Rand(0,3) Insert n Before First n
      Next
   Next
End function


Wenn der Type dann aber größer wird (so um die 600 Einträge) habe ich zwei Probleme:
1. Es dauert sehr langsam
2. Ich brauche mehr durchläufe, da sonst trotzdem nicht gut gemischt wird.

Kennt jm. eine bessere Routine für diese Aufgabe?
Es muss nicht unbedingt Realtime sein, aber länger als 2-3 sekunden darf die Routine auch nicht brauchen.

edit:
Mir ist gerade aufgefallen, dass das Programm nicht die Einträge der reihe nach durchgeht. Wieso macht er nicht bei dem Eintrag weiter, der als nächste kommt? oO
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Apr 14, 2007 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab da gerade etwas zusammen gefummelt .....
Code: [AUSKLAPPEN]
Type n  Field n End Type

Print "create type"
For c = 1 To 10;5000
   n.n = New n
   n\n = c
Next

Print "mix"
time =MilliSecs()
mix
Print MilliSecs ()-time +" Millisekunden"

WaitKey
For n.n = Each n
   Print n\n
Next

WaitKey

Function mix()
    a1.n=First n
    anz =1
    While a1<>Null
        a2.n = a1
        a3.n = a1
        a1 =After a1
        Zaehler =Rand (0,anz)
        While Zaehler
            a3 =Before a3
            Zaehler =Zaehler-1
        Wend
        If a3 =Null Then
            a2=First n
        Else
            Insert a2 Before a3
        EndIf
        Anz = anz +1
    Wend
End Function

bei mir dauern 5000 Einträge mischen 280 Millisekunden.

Hier ist die dicke Speedbremse
Code: [AUSKLAPPEN]
For n.n = Each n
         If Rand(0,3) Insert n Before First n
      Next

du setzt den Zähler n.n in dieser Schleife immer wieder an den Anfang, und deine Schleife wird schnell zu einer Endlosschleife!

Smily

BeitragSa, Apr 14, 2007 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
juhu thx Smile
hast mir sehr geholfen.

Gruß, Smily0412
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group