Seite 4 von 7
Verfasst: 08.07.2007 02:00
von rolaf
So tipyo,
ich habe "dein Problem" mal ein wenig durchdacht. Und siehe da nach Verbrennung von etwas Gehirnschmalz können wir auf Millionen-Berechnungen verzichten.
Warum? Nun die 2699 Ziehungen sind doch bereits die erfolgreichsten 7er Zahlenreihen, denn alle sie haben mindestens schon einmal einen 6er mit Zz gebracht. Das heißt um die erfolgreichste 7er Zahlenreihe zu finden brauchen wir nur jede dieser 2699 Reihen mit seinen 2698 Kompanjongs vergleichen, wer davon nun noch die meisten 6er, 5er+, 5er, 4er+, 4er, 3er+, 3er hatte ist der "Sieger".
Auf diesem sehr simplen Weg finden wir mit einem entsprechenden Quellcode in 1-2 Minuten (Schätzung) Laufzeit die bisher beste 7er Reihe. Alle anderen 89 Millionen (oder weis der Geier wie viele) Reihen vergessen wir einfach, denn sie haben ja noch nie den 6er + Zz gezeigt und können demnach nicht besser sein. Das nenne ich eine geniale Verkürzung/Optimierung der Berechnung.
Nun hau mal rein, denn das schaffst du auch noch bevor du in die Kiste steigst.

Verfasst: 08.07.2007 02:15
von Kaeru Gaman
@Falo
stimmt... manchmal muss man einfach nur nen schritt zurücktreten, um den fall im richtigen licht zu sehen...

Verfasst: 08.07.2007 08:05
von rolaf
Kaeru Gaman hat geschrieben:@Falo
stimmt... manchmal muss man einfach nur nen schritt zurücktreten, um den fall im richtigen licht zu sehen...

Jep, oder mal ne längere Sitzung halten, da kann ich neben Zeitung lesen auch gut nachdenken.
Übrigens gestern war die 2700 Ziehung. Wer coden will, bei mir gibts stets die aktuellen
Ziehungsdaten für Samstag und Mittwoch als eingezippte Datenbank im Textformat. Automatische Aktualisierung erfolgt immer Dienstags und Freitags 16:00 Uhr.
Verfasst: 08.07.2007 09:02
von jear
Hallo Ihr Tipper,
nur mal einige kurze Fragen:
Haben diese 2700 Kombinationen (tatsächlich waren es wohl 4557 Ziehungen) eine erhöhte Wahrscheinlichkeit, beim nächsten Mal gezogen zu werden?
Ist diese Wahrscheinlichkeit nicht vielmehr genau so hoch bzw genau so niedrig, wie bei jeder anderen Kombination?
Wäre es anders, dann müssten doch mindestens einige der 2700 Kombinationen mehrfach vorgekommen sein! Ist das denn der Fall?
Möglicherweise sind einzelne Zahlen etwas gehäuft aufgetreten, andere möglicherweise seltener.
Das ist wohl die einzige Weisheit, die man durch Auswertung der 2700 Kombinationen herausfinden kann!
Da es mich selbst interessierte, hier ein schnell zusammengekloppter Kode, in dem ich nachträglich kleine Fehler bereinigt habe:
Code: Alles auswählen
;/ jear 2007 - Statistik Zahlenlotto
Define.s in
Define.l ix, ix1, mix, tlz
Define.q sum
#maxlz = 5000
Structure lz
zdatum.s
lzs.s
lze.b[6]
zz.b
EndStructure
Global Dim lz.lz(#maxlz)
;/ Zahlen einlesen
If ReadFile(1, "Mittwoch.txt")
While Not Eof(1)
in = Trim(ReadString(1))
If in
lz(ix)\zdatum = Left(in, 10)
lz(ix)\lzs = Right(in, 22)
For ix1 = 0 To 5
lz(ix)\lze[ix1] = Val(Mid(in, 13 + ix1*3, 2))
Next
lz(ix)\zz = Val(Right(in, 2))
ix + 1
Else
Break
EndIf
Wend
CloseFile(1)
EndIf
If ReadFile(1, "Samstag.txt")
While Not Eof(1)
in = Trim(ReadString(1))
If in
lz(ix)\zdatum = Left(in, 10)
lz(ix)\lzs = Right(in, 22)
For ix1 = 0 To 5
lz(ix)\lze[ix1] = Val(Mid(in, 13 + ix1*3, 2))
Next
lz(ix)\zz = Val(Right(in, 2))
ix + 1
Else
Break
EndIf
Wend
CloseFile(1)
EndIf
Debug "Anzahl der Ziehungen : " + Str(ix)
mix = ix - 1
;/ Mehrfach vorkommende Kombinationen?
Dim Test.s(mix) ; Array zum sortieren
For ix = 0 To mix : Test(ix) = lz(ix)\lzs : Next ; umspeichern
SortArray(Test(),2) ; Test() aufsteigend sortieren
in = Test(0) : ix1 = 0 ; Debug in
For ix = 1 To mix
If Test(ix) = in : ix1 + 1 : Debug "Doppel : " + Test(ix) : EndIf
in = Test(ix)
Next
Debug "Anzahl der mehrfach gezogenen Kombinationen : " + Str(ix1)
Redim Test.s(0)
;/ Häufigkeiten der einzelnen Lottozahlen
Structure hlz
lze.b
hlze.l
EndStructure
Dim hlz.hlz(49) : For ix = 0 To 49 : hlz(ix)\lze = ix : Next
For ix = 0 To mix
hlz(lz(ix)\zz)\hlze + 1 ; Zusatzzahl
For ix1 = 0 To 5
hlz(lz(ix)\lze[ix1])\hlze + 1 ; gezogene Zahlen
Next
Next
SortStructuredArray(hlz(), 1, OffsetOf(hlz\hlze), #PB_Sort_Long)
Debug "Häufigkeiten der einzelnen Lottozahlen :"
ix1 = hlz(0) ; 1955 gab es noch keine Zusatzzahl
For ix = 0 To 49
If hlz(ix)\lze > 0
tlz = hlz(ix)\hlze
sum + tlz
Debug "Zahl : " + RSet(Str(hlz(ix)\lze), 2, "0") + " = " + RSet(Str(tlz), 4, " ")
EndIf
Next
Debug "Kontrolle der Ziehungszahl : " + Str(sum / 7)
End
Verfasst: 08.07.2007 11:09
von Kaeru Gaman
> Haben diese 2700 Kombinationen (tatsächlich waren es wohl 4557 Ziehungen) eine erhöhte Wahrscheinlichkeit, beim nächsten Mal gezogen zu werden?
rechnerisch nicht.
> Ist diese Wahrscheinlichkeit nicht vielmehr genau so hoch bzw genau so niedrig, wie bei jeder anderen Kombination?
yap
> Wäre es anders, dann müssten doch mindestens einige der 2700 Kombinationen mehrfach vorgekommen sein! Ist das denn der Fall?
möglich, täte aber auch nix zur sache.
rein rechnerisch hat jede kombination dieselbe wahrscheinlichkeit.
nehmen wir mal an, ich würfle mit einem würfeln mit sechzehn seiten.
dann können 16 versch. ergebnisse mit rechnerisch der selben wahrscheinlichkeit dabei herauskommen.
wenn ich jetzt sieben mal würfle, können unmöglich alle 16 zahlen aufgetaucht sein,
und es kann durchaus vorkommen, dass eine zahl 2x vorkommt.
daraus aber den schluss zu ziehen,
dass diese doppelt vorgekommene zahl irgendwie "vom schicksal bevorzugt" sei,
ist hanebüchener humbug.
tatsächlich muss ich ein vielfaches von 16 mal werfen,
um statistisch die gleichmäßige verteilung nachzuweisen.
ebenso ist das mit den lotto-reihen.
wenn wir nur die 6 normalen zahlen nehmen, (6 aus 49, math. 49 über 6),
haben wir 13.983.816 verschiedene möglichkeiten.
wenn wir nun 2700 oder auch 4557 "würfe" davon betrachten,
ist es durchaus im rahmen der wahrscheinlichkeit,
dass ein paar kombinationen mehrfach vorkommen,
und die meisten kommen garnicht vor.
aber wie beim würfel macht dies überhaupt keine aussage.
wir müssten ein vielfaches von 13 millionen ziehungen betrachten,
um die gleichmäßige verteilung der zahlenreihen nachzuweisen.
jegliche schlußfolgerung von 2700 bzw. 4557 stichproben
auf das verhalten einer menge von 13.983.816 kombinationen
ist einfach nur kaffeesatzgelese und sonst nix.
Verfasst: 08.07.2007 11:31
von dysti
...das kann ich nur bestätigen
Verfasst: 08.07.2007 12:08
von rolaf
Der "schnelle Kod" enthält aber Fehler, die Häufigkeiten der Zahlen ist viel zu niedrig. Vergleiche mit den Statistiken der einzelnen Lottoseiten der Bundesländer oder mit denen von meinem TippGenerator.
4557 Ziehungen deshalb, weil Samstag und Mittwoch komplett. Ich berechne getrennt.

Verfasst: 08.07.2007 13:18
von tipyo
Hallo,
vielen dank für die zahlreichen Info´s.
Ich hätte noch folgende Frage:
Wo kann ich vielleicht eine Liste einsehen über die Befehlsunterschiede
von VB und PureBasic
Beispiel:
VB6 PureBasic
APPEND FileSeek
usw.
mfg
tipyo
Verfasst: 08.07.2007 14:17
von Kaeru Gaman
tipyo hat geschrieben:Wo kann ich vielleicht eine Liste einsehen über die Befehlsunterschiede
von VB und PureBasic
gar nicht. für so eine liste gibt es keine veranlassung.
die beiliegende befehlsreferenz ist absolut ausreichend und ziemlich gut.
lies die einfach mal komplett durch, so viel ist das garnicht.
wie ich zuvor schon sagte:
das wichtigste beim umstieg auf eine andere programmiersprache ist immer,
sich erst einmal die befehlsreferenz anzuschaun und sich einen eindruck zu verschaffen.
es wird dir nichts, aber auch gar nichts bringen, wenn du VB programmierst,
indem du PB-Befehle und einen PB-Compiler benutzt.
programme wort-für-wort übersetzen zu wollen ist fast genauso fruchtlos,
wie das selbe mit einem Roman zu versuchen.
lerne lieber richtig PB, da hast du mehr davon.
Beispiel:
VB6 PureBasic
APPEND FileSeek
ist zum beispiel falsch.
APPEND kann nur am ende der datei hinzuschreiben.
FileSeek findet dir jede beliebige stelle in der datei.
ein danach ausgeführtes schreiben überschreibt auch datensätze in der mitte.
Verfasst: 08.07.2007 14:18
von Tafkadasom2k5
Dann hätten die PB Hersteller ja ordentlich was zu tun. Ne, sowas gibts nicht, wäre ja auch in gewisser Hinsicht lächerlich
Suche lieber nach nem ähnlich arbeitendem Befehl, oder baue den Befehl einfach nach. Sollte in (Pure)Basic wirklich garnicht schwierig sein. Wenn du wirklich "Programmieren" kannst, und nicht nur "Drag-n-drop-Objekte hin und herschieben", dann solltest du diese minimale Hürde relativ schnell meistern können. Hab keine Angst vor der Hilfe, die ist AFAIK ziemlich gut, und sollte dir für so gut wie jeden Befehl genug Informationen ausspucken.
Gr33tz
Tafkadasom2k5