Hallo,
vor sehr geraumer Zeit beschäftigte ich mich theoretisch und praktisch damit, wie man beim Lotto 6aus49 welche Tippreihen man mindestens gleichzeitig spielen um in der Ziehung garantiert 3 Richtige zu haben.
Es gibt ja bekanntlich solche fertigen "Lottosysteme", hätte mir nur gerne ein Eigenes gebastelt.
Zur Erklärung: Beim Lotto 6 aus 49 wählt man 6 unterschiedliche Zahlen aus dem zahlenraum 1-49.
Le Lottoverein zieht dann in einer Sitzung ebenso 6 Zahlen und je nachdem wie viele zahlen übereinstimmen, hat man eben x Richtige.
Nun kann man halt, indem man diverse ganz bestimmte Tippreihen mit ganz bestimmten 6 Zahlen jeweils spielt, sicher sein dass man garantiert 3 Richtige hat weil eben eins der dutzenden gleichzeitig gespielten 6Tupel eben 3 Zahlen gleich hat mit der im Fernsehen gezogenen zahl.
Nun will ich hingehen, eine Lsite an 6erTupeln gegeben, die garantiert 3 Richtige bringt und aber noch nicht zwingend perfekt ist,
und will das optimieren.
Ich will also bei meiner hübschen 6tupel-Liste gucken, ob es darin ein 6Tupel gibt, das unnötig ist und es entfernen.
Unnötig ist es dann wenn alle in dem 6Tupel enthaltenen 3Tupel (Beispiel: das 6Tupel (1,2,3,4,5,6) gegeben, dann sind die enthaltenen 3Tupel
(1,2,3),(1,2,4),(1,2,5),(1,2,6)
(1,3,4),(1,3,5),(1,3,6),
(1,4,5),(1,4,6),
(1,5,6),
(2,3,4),(2,3,5),(2,3,6),
(2,4,5),(2,4,6),
(2,5,6),
(3,4,5),(3,4,6),
(3,5,6)
(4,5,6)
Nun müsste man die alte 6Tupelliste nehmen, das Tupel (1,2,3,4,5,6) hiebrei (temporär) rausnehmen und nun gucken:
Findet sich ein 3Tupel von oben, welches nicht in der (um eins kleineren) 6Tupelliste drin ist?
In dem Fall ist das 6Tupel (1,2,3,4,5,6) nicht überflüssig denn mind. eins seiner 3Tupel kommt sonst nirgends vor.
Entweder findet man also dass (1,2,3,4,5,6) überflüssig ist, wirft es raus und dieser "Optimierungsschritt" ist zu Ende.
Ist dem nicht so, macht man mit dem nächsten 6 Tupel weiter, betrachtet alle seine 3Tupel und checkt es mit allen anderen 6Tupeln ab.
Rinse und repeat, notfalls bis wir am Ende der Lsite angekommen sind und gar nichts löschen konnten weil alle 6Tupel essentiell sind.
Das wäre so der primitiv ausgedrückte Optimierungsalgorithmus der mit jeder Anwendung bei einer 6Tupel Liste entweder ein überflüssiges 6Tupel findet und rauswirft. oder eben feststellt dass nichts überflüssig ist.
Nun müsse man nur noch den Algorithmus so oft anwenden bis die verbleibende Lsite nicht mehr verbessert werden kann.
Nun ist nur die Frage:
Wie macht man diesen Algorithmus am besten als Code damit es nciht performance mässig und zeitlich den Computer in die Knie zwingt?
Weil, wie man sich errehcnen kann, gibt es laut Kombinatorik 49*48*47*46*45*44= ca. 10^10 verschiedene 6Tupel.
Mit etwas klugem Vorgehen beim Erstellen der initialen liste sind es ein paar Stellen weniger aber immer noch sehr viel.
Selbst wenn die 6Tupelliste nur aus 10^5 einträgen bestünde:
Dann müsste man bei einem einzigen Optimierungsschritt im Worst Case alle 10^5 6Tupel durchgehen, jedes davon in seine ca. 20 (?) 3Tupel zerlegen, für jedes dieser 3Tupel dann mit jedem der verbleibenden 10^5-1 6Tupel prüfen ob es darin enthalten ist.
Also, ja , sehr viele Sachen zu tun.
Ich würde mangels besseren plans da mit Arrays hin und her hantieren aber gibts da was von Fielmann... ich meine , etwas Intelligenteres wie man das machen kann?
Arraylist ist klar, wobei die im Prinzip ja auch nur verkleidete Arrays intern sind.
Gibts da vll. einen Datentypen oder ein Vorgehen was schneller besser weiter ist als simples Kreuz und Quer Vergleichen?
vor sehr geraumer Zeit beschäftigte ich mich theoretisch und praktisch damit, wie man beim Lotto 6aus49 welche Tippreihen man mindestens gleichzeitig spielen um in der Ziehung garantiert 3 Richtige zu haben.
Es gibt ja bekanntlich solche fertigen "Lottosysteme", hätte mir nur gerne ein Eigenes gebastelt.
Zur Erklärung: Beim Lotto 6 aus 49 wählt man 6 unterschiedliche Zahlen aus dem zahlenraum 1-49.
Le Lottoverein zieht dann in einer Sitzung ebenso 6 Zahlen und je nachdem wie viele zahlen übereinstimmen, hat man eben x Richtige.
Nun kann man halt, indem man diverse ganz bestimmte Tippreihen mit ganz bestimmten 6 Zahlen jeweils spielt, sicher sein dass man garantiert 3 Richtige hat weil eben eins der dutzenden gleichzeitig gespielten 6Tupel eben 3 Zahlen gleich hat mit der im Fernsehen gezogenen zahl.
Nun will ich hingehen, eine Lsite an 6erTupeln gegeben, die garantiert 3 Richtige bringt und aber noch nicht zwingend perfekt ist,
und will das optimieren.
Ich will also bei meiner hübschen 6tupel-Liste gucken, ob es darin ein 6Tupel gibt, das unnötig ist und es entfernen.
Unnötig ist es dann wenn alle in dem 6Tupel enthaltenen 3Tupel (Beispiel: das 6Tupel (1,2,3,4,5,6) gegeben, dann sind die enthaltenen 3Tupel
(1,2,3),(1,2,4),(1,2,5),(1,2,6)
(1,3,4),(1,3,5),(1,3,6),
(1,4,5),(1,4,6),
(1,5,6),
(2,3,4),(2,3,5),(2,3,6),
(2,4,5),(2,4,6),
(2,5,6),
(3,4,5),(3,4,6),
(3,5,6)
(4,5,6)
Nun müsste man die alte 6Tupelliste nehmen, das Tupel (1,2,3,4,5,6) hiebrei (temporär) rausnehmen und nun gucken:
Findet sich ein 3Tupel von oben, welches nicht in der (um eins kleineren) 6Tupelliste drin ist?
In dem Fall ist das 6Tupel (1,2,3,4,5,6) nicht überflüssig denn mind. eins seiner 3Tupel kommt sonst nirgends vor.
Entweder findet man also dass (1,2,3,4,5,6) überflüssig ist, wirft es raus und dieser "Optimierungsschritt" ist zu Ende.
Ist dem nicht so, macht man mit dem nächsten 6 Tupel weiter, betrachtet alle seine 3Tupel und checkt es mit allen anderen 6Tupeln ab.
Rinse und repeat, notfalls bis wir am Ende der Lsite angekommen sind und gar nichts löschen konnten weil alle 6Tupel essentiell sind.
Das wäre so der primitiv ausgedrückte Optimierungsalgorithmus der mit jeder Anwendung bei einer 6Tupel Liste entweder ein überflüssiges 6Tupel findet und rauswirft. oder eben feststellt dass nichts überflüssig ist.
Nun müsse man nur noch den Algorithmus so oft anwenden bis die verbleibende Lsite nicht mehr verbessert werden kann.
Nun ist nur die Frage:
Wie macht man diesen Algorithmus am besten als Code damit es nciht performance mässig und zeitlich den Computer in die Knie zwingt?
Weil, wie man sich errehcnen kann, gibt es laut Kombinatorik 49*48*47*46*45*44= ca. 10^10 verschiedene 6Tupel.
Mit etwas klugem Vorgehen beim Erstellen der initialen liste sind es ein paar Stellen weniger aber immer noch sehr viel.
Selbst wenn die 6Tupelliste nur aus 10^5 einträgen bestünde:
Dann müsste man bei einem einzigen Optimierungsschritt im Worst Case alle 10^5 6Tupel durchgehen, jedes davon in seine ca. 20 (?) 3Tupel zerlegen, für jedes dieser 3Tupel dann mit jedem der verbleibenden 10^5-1 6Tupel prüfen ob es darin enthalten ist.
Also, ja , sehr viele Sachen zu tun.
Ich würde mangels besseren plans da mit Arrays hin und her hantieren aber gibts da was von Fielmann... ich meine , etwas Intelligenteres wie man das machen kann?
Arraylist ist klar, wobei die im Prinzip ja auch nur verkleidete Arrays intern sind.
Gibts da vll. einen Datentypen oder ein Vorgehen was schneller besser weiter ist als simples Kreuz und Quer Vergleichen?