Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists?

berndoa

Top Contributor
Wobei ich es an dem simplen beispiel mal kurz durchspielen will:
Zu Beginn spielen wir Lottt 3aus6 und wollen 3 Richtige. heißt auch dass wir 3 zahlen aus 1-6 ziehen (pro tippreihe) und 3 gewinnzhaleen gezogen werden.

Nun überlegen wir uns, wenn wir die zahlenmenge in 2 Bereiche aufteilen, wie es sich dann verhält.
Aus gewissen Gründen nehmen wir eine 3-3 Zerlegung (man hätte theoretisch auch 2 zahlen in A und 4 in B legen können. würde am Ende aber wohl zuv viele Tippreihen bedeuten, weshalb man es so wählt)

heißt also, die zahlen 1-3 liegen nun in A und die zahlen 4-6 in B.
Was heißt das nun im Weiteren zur verteilung der gewinnzahlen?
es gibt praktisch nur die aufteilungen 3-0 2-1 1-2 0-3

weil wir ja 2 richtige haben wollen, prüfen wir tippreihen die den fall abdekcen dass 2 gewinnzahlen in A sind.
und gewinnreihen für den fall dass 2 gewinnzahlen in B sind.

das heißt, wir spilen nun 2 separate lottospiele:
Lotto 3 aus 3, gesucht 2 richtige. (mit zahlenbereich 1-3)
und lotto 3aus3, gesucht 2 richtige (mit zahlenbereich 4-6)

ich schreibs extra 2 mal hin, obwohl identisch, da es im großen fall mit 6aus49 und 3 richtigen eben 2 ungleiche gruppengrößen gibt.


Naja, ohne zu überlegen ist klar:
wenns nur 3 zahlen gibt und wir 3 zahlen tippen dürfen, dann machen wir halt eine tippreihe mit genau den 3 zahlen.

daher lösen wir das erste lottospiel durhc eine tippreihe (1,2,3)
und das zweite lottospiel durch eine tippreihe (4,5,6).



Was mir so nebenher auffiel was man "falsch" machen kann:
Auch ich dachte anfangs bei den zerlegungen oben drüber nach, warum man bspw. nicht 2 lottospiele 3aus3, 1 zahl wird gezogen macht.

denn wenn man alle fälle mit 1 gewinnzahl in A und alle fälle mit 1 gewinnfall in B abdeckt, hat man doch auch alle konfigurationen, richtig?und es würde sogar weniger tippreihen brauchen, nciht wahr?

tja, leider falsch.
Denn wir wollen ja 2(!) richtige!
Und wenn in einer menge A nur 1 gewinnzahl vorkommt, können wir tippen was wir wollen und werden niemals 2 richtige haben!

Daher ist auch die untergrenze für die gewinnzahlen pro menge, wie wir es aufteilen sollten, immer gleich der gesuchten zahl an richtigen.
darum würde es auch keinen sinn machen, im sinne der informatik das 3aus3 , mit 2 hgewinnzahlen, irgendwie npchmal in 2 Mengen
P und Q zu zerlegen. dann hätte p 1 element und q 2 oder umgekehrt.

nie im leben könnte man mit elementen aus der jeweiligen gruppe 2 richtige hinkriegen, die einelementige gruppe könnte keine 2 richtige hervorbringen.

wie man das Alles mathematisch ermitteln kann?

keine Ahnung, das wüssten wir alle gern :)
 

mihe7

Top Contributor
@temi Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Mit einem Tipp kann ich auch nur einen der 15 Zweier treffen, also brauche ich 15 Tipps, um sicher einen Gewinn zu erzielen.

Bleiben wir mal bei dem Spiel, dass 2 aus 6 gezogen werden, ändern die Regeln aber so ab, dass wir pro Tipp drei Zahlen angeben können. Es gibt also immer noch 15 Möglichkeiten, einen Zweier aus den 6 Zahlen zu ziehen. Jetzt kann ich pro Tipp aber drei Zahlen und somit 3 Zweier angeben. Ich brauche also nur noch mindestens 5 Tippreihen, um alle 15 Zweier abzudecken. Mit einem Tipp kann ich nun drei Zweier treffen aber es wird nach wie vor nur ein Zweier gezogen, so dass ich immer noch alle Zweier abdecken muss, um sicher zu gewinnen.

Jetzt ziehen wir 3 aus 6. Pro Ziehung werden nun drei Zweier gezogen. Für einen Gewinn reicht die Übereinstimmung mit einem Zweier, so dass sich die Mindestzahl der Tippreihen auf ein Drittel reduziert (oder umgekehrt: mit jedem Tipp erwische ich drei Zweier, es reicht einer zum Gewinn). Das war zumindest die Überlegung, wie ich sie interpretiert habe. Daraus ergeben sich eben 1,666... und damit 2 Tippreihen als untere Schranke.
 

berndoa

Top Contributor
Ich rechne jetzt mal was ins Blaue rein:
für 2 zahlen aus 6 gibt es 6*5/(2*1)=15 möglichkeiten.

nun sind aber, wie erwähnt, in jeden 3 gezogenen Gewinnzahlen 3*2/(2*1)=3 zweier drin.
treffen müssen wir aber nur einen davon. also anfangszahl schon mal durch 3.

dann haben wir auch nicht bedacht, dass wenn wir eine tippreihe a 3 zahlen tippen, dass wir dabei (maximal) 3 zweier auf einmal abdecken.
also nochmal durhc 3.

daher verringert sich die anzahl an nötigen tippreihen auf (15/3)/3=5/3=1,66, aufgerundet 2.


Um das nur nochmal kurz zusammenzufassen :)
 

berndoa

Top Contributor
hast du auch schon berechnet wie lange dein Programm braucht?
Berechnet? Nö.
Mit Laufzeit will ich mich erst gar nciht beshcäftigen, sosnt wird mir wieder übel :-D

Ne, theoretisch will ich mein Programm derzeit Objektorientiert umschbreiben aber irgendwie habe ich da auch nicht so richtg mehr Bock drauf, zumindest derzeit.

Nachdem es das Programm nicht mal zustande brachte, ein offensichtlich optimierbares System aus 556 Reihen auch nur um eine einzige zu kürzen, ist es wohl eh falsch irgendwo :-/
 
G

Gelöschtes Mitglied 65838

Gast
du hast halt das problem wenn dein Programm länger dauert als die Tipp reihen anhalten
 

berndoa

Top Contributor
du hast halt das problem wenn dein Programm länger dauert als die Tipp reihen anhalten
Ich verstehe gerade nicht ganz, was du meinst?

die Tippreihen existieren, wie alle Variabeln und Co., so lange wie der Block geht in dem sie deklariert sind, oder?

Oder werden die ältesten einfach gelöscht wenn der Speicher voll ist und ich trotzdem was Neues reinpacken will?
 
G

Gelöschtes Mitglied 65838

Gast
wenn es jede woche 3 neue Tipps gibt aber dein Code 2 Wochen zum finden der lösung brauchst ist das sozusagen komplett nutzlos auch wenns richtig ist
 

berndoa

Top Contributor
Um die Rechnung oben nach ganz allgemein zu machen:
Wenn man Lotto a aus b spielt, eine Tippreihe/-feld c zu wählende zahlen hat und man d Richtige will,
dann braucht man (b über d) / ((c über d)*(a über d))
verschiedene Tippreihen (mindestens) um eben d Richtige zu gewährleisten :)

hierbei ist (b über d)=b!/(d!*(b-d)!)
der mathematische Binomialkoeffizient.

im Beispiel oben hatten wir b=6, a=c=3 und d=2.

Nur damit man mal weiß wie man das für verschiedene Fälle rechnet.
 

berndoa

Top Contributor
wenn es jede woche 3 neue Tipps gibt aber dein Code 2 Wochen zum finden der lösung brauchst ist das sozusagen komplett nutzlos auch wenns richtig ist
ehm, mein Code hängt ja jetzt nicht von einer Sitzung ab.
er soll ja ein Bündel von Tippreihen finden, die man auf einmal spielt sodass man garantiert mind. einen Dreier hat, GERADE unabhängig davon was in der Woche gezogen wurde.

Insofern muss das System nur einmal gefunden und erstellt sein und kann dann immer wieder recycelt werden :)


natürlich bringen tuts nicht viel, Verlsute mahct man immer ordentlich. Aber es geht ja mehr um Proof of Concept und dass ich mir eventuell einbilden kann ein noch besseres System als ads mit den 163 Tippreihen gefunden zu haben.
Kurzum: Bragging Rights! :)
 
G

Gelöschtes Mitglied 65838

Gast
warum rechnest du eig immer die tupels aus? du rechnest sie aus schmeißt die weg die mehrfach vorkommen die kannst du dir in eine sql bank speichern und dir dann noch raussuchen was du brauchst geht 10 mal schneller als das arme java zu überfordern :)
 

Meikelsoft

Mitglied
Ganz ehrlich?
Keine Ahnung :)

Ich checks auch nicht wie es geht.

Aber ein Gedanke bei dem Ganzen war wohl, wie ich so gelesen habe:
Man überlegt sich Folgendes:
Es werden ja 6 Gewinnzahlen gezogen.
Man unterteilt die zahlen 1-49
in 2 Gruppen A=1-24 und B=25-49 oder so, halbwegs gleich große Gruppen halt.


von den 6 gewinnzahlen sind dann bspw. 2 in A und 4 in B.
oder 1 in A und 5 in B.
oder 3 in A und 3 in B.

was alle diese Aufteilungen gemeinsam haben ist dass in einer der beiden gruppen >=3 Zahlen liegen.


Darum kann man eine Menge an Tippreihen spielen, die mind 3 richtige für die zahlengruppe A garantiert.

und eine weitere Menge an tippreihen mit denen mind. 3 richtige mit zahlen aus B garantiert sind.


hört sich umständlich an, ist es auch.

ich steige da auch nicht 100% durch.

bin jedenfalls mal hingegangen, alle tripel mit zahlen aus 1-24 gebildet und die in lottoreihen zusammengepackt.
gleichermassen habe ich alle tripel mit zahlen aus 25-49 in eine menge an tippreihen gepackt.

beide tippreihen zusammen ergeben das gesamtsystem.

habe noch so meine methoden bzw. algorithmus um die tripel möglichst kompakt in so wenig tippreihen wie möglich zu packen.

So kam ich am ende bei dem ganzen auf 669 bzw. 666 tippreihen.

wie man das runterbricht bis auf 163 tippreihen?
vermutlich durch immer wiedder anwenden eines simplen brute force optimierungs algorithmus.


So wie mein to-be-used programm aktuell auch, welches bei einem system einfach bruteforce mässig immer wieder guckt welche tippreihe man kicken kann sodass trotzdem noch 3 richtige garantiert sind.

hat vermutlich eine abartige laufzeit und speicherbedarf, aber sollte 100% funktionieren :)
Kann mir mal jemand erklären, wie man da auf 163 Reihen kommen kann? Ganz einfach. Die 163 Reihen bestehen aus zwei Systemen.
 

Meikelsoft

Mitglied
Könntest Du das näher erläutern?
Na klar. Das erste System ist V=22, K=6, T=3, M=3, B=77 also 22,06,03,03=77 und das zweite System ist V=27, K=6, T=3, M=4, B=86 also 27,06,03,04=86. Vor einigen Jahren habe ich ein Video zu diesem Thema gemacht. Morgen Nachmittag werde ich es erneut auf meinem YouTube-Kanal veröffentlichen. Schaut gern vorbei, wenn ihr Lust habt! Zu meinem Kanal
 

mihe7

Top Contributor
Zum Verständnis: es werden 77 Tippreihen (die an der Stelle nicht näher genannt sind) benötigt, um alle möglichen 3er abzudecken, die sich aus den 22 Systemzahlen bilden lassen? Die Frage zu den Werten in dem Bild wäre somit, ob a) 77 Tippreihen das tatsächliche Minimum sind und b) die Mathematik dahinter.
 

Meikelsoft

Mitglied
Zum Verständnis: es werden 77 Tippreihen (die an der Stelle nicht näher genannt sind) benötigt, um alle möglichen 3er abzudecken, die sich aus den 22 Systemzahlen bilden lassen? Die Frage zu den Werten in dem Bild wäre somit, ob a) 77 Tippreihen das tatsächliche Minimum sind und b) die Mathematik dahinter.
Richtig. Habe ich 3 Treffer innerhalb der Systemzahlen, also 22 Zahlen, habe ich auch 3 Richtige.
Da Systemzahlen auch Platzhalterzahlen sind, kann man den Wert immer ändern, wobei die Platzhalterzahl sich selbst nicht ändert.
Dieses System gibt es in jedem Lottoladen in einer kostenlosen Broschüre und ist unter VEW 622 bekannt.
 

Meikelsoft

Mitglied
@temi Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Mit einem Tipp kann ich auch nur einen der 15 Zweier treffen, also brauche ich 15 Tipps, um sicher einen Gewinn zu erzielen.

Bleiben wir mal bei dem Spiel, dass 2 aus 6 gezogen werden, ändern die Regeln aber so ab, dass wir pro Tipp drei Zahlen angeben können. Es gibt also immer noch 15 Möglichkeiten, einen Zweier aus den 6 Zahlen zu ziehen. Jetzt kann ich pro Tipp aber drei Zahlen und somit 3 Zweier angeben. Ich brauche also nur noch mindestens 5 Tippreihen, um alle 15 Zweier abzudecken. Mit einem Tipp kann ich nun drei Zweier treffen aber es wird nach wie vor nur ein Zweier gezogen, so dass ich immer noch alle Zweier abdecken muss, um sicher zu gewinnen.

Jetzt ziehen wir 3 aus 6. Pro Ziehung werden nun drei Zweier gezogen. Für einen Gewinn reicht die Übereinstimmung mit einem Zweier, so dass sich die Mindestzahl der Tippreihen auf ein Drittel reduziert (oder umgekehrt: mit jedem Tipp erwische ich drei Zweier, es reicht einer zum Gewinn). Das war zumindest die Überlegung, wie ich sie interpretiert habe. Daraus ergeben sich eben 1,666... und damit 2 Tippreihen als untere Schranke.
Nehmen wir mal an, wir spielen 2 aus 6. Es gibt 15 Möglichkeiten, einen Zweier zu ziehen. Sorry, das ist falsch, der Weltrekord liegt bei 19 Tippreihen und man kann ihn mit einem System erstellen.
 

Psydelis

Mitglied
Die Frage von berndoa ist zwar schon etwas älter, aber ich bin gerade erst darauf gestoßen und denke, ich kann dazu ein bisschen was beitragen.

Es besteht wohl allgemein Konsens darüber, dass kürzer als 77 Tippreihen bei 22 Systemzahlen mathematisch nicht möglich ist.
Ein Programm, dass ich Anfang der 90er einmal geschrieben habe, kam auf das gleiche Ergebnis.

Daraus wurden dann das ersten 49 Zahlen System entwickelt.

Man nehme dann das Ganze einfach mal zwei (z.B. 1 bis 22 und 23 bis 44).
Übrig bleiben 45,46,47,48,49, also 5 Zahlen.
Die packt man in 22 Tippreihen und dazu jeweils eine Zahl aus einem der Systeme mit 22 Zahlen.

Fertig ist ein System mit 176 Reihen, in dem immer mindestens ein Dreier getroffen wird, unabhängig davon welche Zahlen gezogen werden.

Ein anderer Lösungsansatz ist es, alle 18424 Dreierkombinationen in ein Array zu schreiben und zwei davon, in denen keine doppelten Zahlen vorkommen, zu einer Sechserreihe zu kombinieren. Die Sechserreihe wird gespeichert.
Alle in dieser Reihe vorkommenden Dreierkombis werden dann aus den anfangs gebildeten 18424 Kombinationen gelöscht.
Das wird fortgesetzt, bis alle 18424 Kombinationen gelöscht worden sind.

Fact am Rande:
Je nachdem, mit welchen Dreierkombinationen ihr anfangt (z.B. zuerst 1 und 3900, oder 5603 und 18400), kommen andere Ergebnisse raus. Alles durchrechnen lassen, was möglich wäre, dauert sehr, sehr lange.
Ich habe damals mit zufällig ausgesuchten Dreierkombinationen gearbeitet und bin mit 22 Systemzahlen auch bei 77 Reihen gelandet. Bei mehr oder weniger Systemzahlen bin ich nie auch nur annähernd an die mathematische Mindestreihenzahl ran gekommen.

Eine weitere Möglichkeit wäre es, mal von der mathematischen Mindestanzahl 46,06 auszugehen.

Die nächstmögliche sinnvolle Reihenzahl wäre 49, denn da passt jede der 49 Zahlen genau sechs mal rein.

Man bildet also ALLE Kombinationen mit 49 Tippreihen, die sich aus allen 13.983.816 Tippreihen bilden lassen und vergleicht jede dieser 49 Tippreihenkombinationen (13.983.816^49) mit allen möglichen 13.983.816 Tippreihen.
Wenn das nicht in jeder Reihe mindestens einen Treffer ergibt, macht man weiter mit mehr Reihen, also erst 50, dann 51 usw.

Auch das habe ich Anfang der 90er schon auf einem 386er unter Turbo Pascal 3.0 zu rechnen begonnen.

Nach 0,00001 % der gesamten Aufgabe habe ich hochgerechnet, dass ich mit der damaligen Kiste (ohne Hardwaredefekte oder Stromausfälle) 156 Jahre für das Endergebnis (also die besten 49 Tippreihen, was nicht heißt, dass zu 100 % ein Dreier drin sein muss) gebraucht hätte.

Ich habe es dann abgebrochen und auf später verschoben und bis vor kurzem vergessen.
Heute dürfte es wohl deutlich schneller gehen, aber damals musste ich, mangels ausreichend großer Arrays unter Turbo Pascal vieles auf die Platte aus lagern, was auch bei einer Ramdisk viel langsamer war, als es direkt im Speicher zu bearbeiten. Und natürlich war ein mit 40MHz getakteter Prozessor deutlich langsamer als aktuelle Prozessoren, die locker mit 4 GHz laufen.

Werde ich evtl. mal wieder dran gehen, wenn ich mich in eine andere Sprache eingearbeitet habe, denn mein altes Turbo Pascal wird durch die DOSBOX mindestens um den Faktor 100 ausgebremst und kann, wie oben schon erwähnt, nicht mit großen Arrays umgehen.

Allerdings bin ich mittlerweile der Meinung, dass es nicht das Ziel sein sollte, immer, mit möglichst wenig Tippreihen, einen Dreier zu erreichen, sondern eher ein paar Reihen mehr zu riskieren, um dann auch mehr Gewinne rauszuholen.

Zurzeit z.B. spiele ich ab und zu mal ein 25 Zahlen System mit 56 Tippreihen in der Auswahlwette, das mir bei 6 Treffern (und die sind in der Auswahlwette deutlich leichter zu erreichen als im Lotto) durchschnittlich 6,98 Gewinne bringt.

Ich hoffe, dass ich Euch ein paar Anregungen bringen konnte und wünsche den Lotto-/Totospielern unter Euch viel Glück!
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
Bei 13.983.816^49 muss das aber eine grooooße GPU sein .😂
Jo...stimmt. Ich habe mich nur auf die 150 Jahre Rechenzeit, die der Uraltrechner von Psydelis damals gebraucht hätte, bezogen. Ich habe mir jetzt allerdings nicht die Mühe gemacht das Verfahren von Psydelis genauer zu untersuchen. Ich bin einfach mal davon ausgegangen daß er das schon dahingehend optimiert hat wenn er es schon in ein lauffähiges Programm gegossen hat.
 

Psydelis

Mitglied
Jo...stimmt. Ich habe mich nur auf die 150 Jahre Rechenzeit, die der Uraltrechner von Psydelis damals gebraucht hätte, bezogen. Ich habe mir jetzt allerdings nicht die Mühe gemacht das Verfahren von Psydelis genauer zu untersuchen. Ich bin einfach mal davon ausgegangen daß er das schon dahingehend optimiert hat wenn er es schon in ein lauffähiges Programm gegossen hat.
Ja, es sind ja nicht nur 13.983.816^49 Kombinationen mit 49 Tippreihen, die müssen ja auch mit allen 13.983.816 Sechser Reihen verglichen werden.
Ich hatte damals schon eine Menge Abbruchbedingungen eingebaut - schon bei der Bildung der 49 Tippreihen, wie später auch beim Vergleich mit allen Sechsern. War aber sehr viel umständlicher als es heute gehen würde, da ich wegen viel zu kleinen Arrays vieles auf die Ramdisk auslagern musste.
 

mihe7

Top Contributor
es sind ja nicht nur 13.983.816^49 Kombinationen
Tut mir leid, aber die Zahl ist so gigantisch groß, da könntest Du in der Sekunde ein unfassbares Yotta (10^24) an Tippreihen verarbeiten und hättest zum Zeitpunkt des Todes unserer Sonne in etwa 5 Mrd. Jahren anteilmäßig praktisch noch immer nichts verarbeitet.

Relativ genau genommen wären das

0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001153764758894437393322649139734974 %

oder etwa 1.15e-307 %
 

Psydelis

Mitglied
Tut mir leid, aber die Zahl ist so gigantisch groß, da könntest Du in der Sekunde ein unfassbares Yotta (10^24) an Tippreihen verarbeiten und hättest zum Zeitpunkt des Todes unserer Sonne in etwa 5 Mrd. Jahren anteilmäßig praktisch noch immer nichts verarbeitet.

Relativ genau genommen wären das

0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001153764758894437393322649139734974 %

oder etwa 1.15e-307 %
Da hast Du recht, man kann zwar von vorneherein viele Kombinationen ausschließen, aber es würde trotzdem noch sehr lange dauern - zumindest mit den heutigen Rechnern. Wenn ich jedoch die Fortschritte der letzten Jahrzehnte sehe (ich sitze seit '81 am Rechner, mein erster eigener Rechner lief mit 1,77 MHz), bin ich guter Hoffnung, dass das nicht ganz so lange dauern wird.

Allerdings hätte ich das "nur" in "nur 13.983.816^49 Kombinationen" wohl besser in Anführungszeichen, mit 'nem Smiley dahinter schreiben sollen, denn so war es eigentlich gemeint.
Aber aufgeben ist nicht - ich bin mir sicher, dass es da irgendwo eine Abkürzung gibt, die nur noch niemand gefunden hat.
 

Ähnliche Java Themen


Oben