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

B

berndoa

Bekanntes Mitglied
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

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.
 
B

berndoa

Bekanntes Mitglied
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 :)
 
B

berndoa

Bekanntes Mitglied
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 :-/
 
B

berndoa

Bekanntes Mitglied
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?
 
J

Joreyk

Bekanntes Mitglied
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
 
B

berndoa

Bekanntes Mitglied
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.
 
B

berndoa

Bekanntes Mitglied
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! :)
 
J

Joreyk

Bekanntes Mitglied
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 :)
 

Ähnliche Java Themen


Oben