Kleinstes Subset finden für 3 Richtige beim Lotto 6 aus 49

bernd7

Benutzer
Beiträge
5
Hallo, ich befasse mich hobbymässig mit eienr Aufgabe, der ich geistig nicht so recht gewachsen bin weils bei mir SQL mässig nicht so weit her ist mit den Kenntnissen:
Mich interessiert beim klassischen Lotto 6 aus 49 (ich erspare mir Erklärungen wie das funktioniert) welche möglichst kleine Menge an 6er Tipps man abgeben muss um mindestens 3 Richtige zu haben.
Also wir haben einerseits die Menge P aller möglichen 6-Zahlen-Kombinationen ("Tupel"), die bei einer Lottoziehung vorkommen können.
Und dann haben wir eine viel kleinre Teilmenge K die einige dieser Tupel enthält.
Nun soll K so wenig wie möglich, aber so viel wie nötig Tupel enthalten damit gilt:

Für jedes p in P existiert irgendein k aus K, sodass k und p mindestens 3 Zahlen gemeinsam haben.

laienhaft ausgedrückt:
Egal welche 6 Zahlen bei einer Lottoziehung gezogen werden, solange wir für diese Sitzung alle Zahlenreihen in K gleichzeitig spielen,
dann werden wir am Ende mindestens einmal 3 Richtige haben.

So zum Endziel.

Nun zum gedanklichen Vorgehen, das umzusetzen ich mehr als scheitere:
Zuerst einmal brauchen wir natürlich eine Lsite mit allen ca. 13 Millionen möglichen lottoziehungsergebnissen (also alle möglichen unterschiedlichen 6-zahlenkombis beim 6 aus 49 lotto).

Dann müssen wir irgendwie hingehen, Subsets bilden und testen ob in Subset erwähnte Bedingung erfüllt.
In der Theorie bilden und prüfen wir also alle Subsets der Länge 1 ob eins davon funktioniert.
dann alle subsets der länge 2.
etc. pp.
Sobald wir ein passendes Subset gefunden haben, sind wir happy und schreiben es irgendwo in eine Tabelle oder so.


wie man nun aber hingehen kann und einerseits überhaupt alle Subsets mit aufsteigener länge der reihe nahc baut und testet (wobei wir immer nur ein ubset testen bevor wir zum nächsten gehen), weiß ich nicht.
Mathematisch gesprochen, würde man die Elemente der Potenzmenge von P in aufsteigender Kardinalität durhctesten bis man eine Teilmenge findet die passt.

Geht bestimmt mit sehr komplexen befehlen und tricksereien aber dazu fehlt mir bei weitem das nötige SQL können.
Darum wäre ich hier für jede Hilfe sehr dankbar :-)
 
Werbung:
welche möglichst kleine Menge an 6er Tipps man abgeben muss um mindestens 3 Richtige zu haben.
Das ist doch die Kernfrage oder?

Und die Antwort ist Statistik, oder Stochastik?

Wenn Du einen einzigen Tipp abgibst, hast Du sehr wahrscheinlich nicht 3 richtige, bei 2 Tipps auch nicht. Also wieviel Tipps musst Du abgeben, damit 3 Zahlen aus den 6 passen?

Wenn man annimmt, Du hast ein Verfahren, das zufällig eine ideale Gleichverteilung von 6 aus 49 Zahlen erzeugt, musst Du davon x Stück als minimale Menge produzieren. Das hat mit SQL nicht viel zu tun, schätze ich.
Die 6 Zahlen werden irgendwie gewürfelt. Das macht man x mal.
Die Frage ist, wie groß muss X sein.

Das kannst Du wahrscheinlich am besten in einem Mathematikforum fragen.
 
Ich... bin gerade nicht ganz bei dem durchgestiegen was du mir da gesagt hast.

Klar, SQL soll mir eine möglichst kleine Liste an 6er Tipps bauen damit man garantiert 3 Richtige hat wenn man die Alle auf einmal tippt.
 
Hier ist eine englische Seite wo bspw. eine solche Liste, die ich suche, dargestellt ist.
Nur will ich mir mit SL halt selbst die Liste erarbeiten, vielleicht kommt ja eine Liste mit weniger als 163 Tipps raus? :-)
 
vielleicht kommt ja eine Liste mit weniger als 163 Tipps raus?
Ich sehe keine Liste.
Ich sagte
Die Frage ist, wie groß muss X sein.
X ist laut der Liste 163

Ansonsten ist diese Frage, die einzige (die ich bei Dir sehe) nur mathematisch zu beantworten.

Und hier ist SQL, was 163 Tipps erzeugt.
Code:
SELECT  
  @curRow := @curRow + 1 AS rn,
  FLOOR(RAND()*50) as Zahl1,
  FLOOR(RAND()*50) as Zahl2,
  FLOOR(RAND()*50) as Zahl3,
  FLOOR(RAND()*50) as Zahl4,
  FLOOR(RAND()*50) as Zahl5,
  FLOOR(RAND()*50) as Zahl6
FROM    INFORMATION_SCHEMA.COLUMNS
JOIN    (SELECT @curRow := 0) r
WHERE   @curRow<163;
 
Klar, SQL soll mir eine möglichst kleine Liste an 6er Tipps bauen damit man garantiert 3 Richtige hat wenn man die Alle auf einmal tippt.
Wie gesagt, die Frage ist, wie klein darf diese Menge sein. Diese Frage sollte ein Mathematiker beantworten. Wenn x=163 ist oder irgendeine andere Zahl, kannst Du sie oben in das Statement einsetzen.
 
Geht wohl aber nicht so einfach :
Genau, wenn du exakte Anweisungen hast, kann man das sicher in SQL machen.
Du sprichst letztlich von Garantien, die Aufgabenstellung arbeitet mit Wahrscheinlichkeiten und es ist m.E. ein Näherungsproblem.

Wenn Du mit meinem Vorschlag nicht zufrieden bist, könntest Du bspw. damit anfangen, festzustellen, was Dich daran unzufrieden macht.
Ich vermute, dass es da sowieso 10000 Foren gibt, die sich genau mit dieser Frage beschäftigen. Wie hoch ist X und gibt es andere Randbedingungen, die X beeinflussen und wenn ja welche.
Du bist ja nicht der einzige, der so einem lukrativen Hobby nachgeht.
 
Mit Wahrshceinlichkeiten hat das weniger zu tun.
Du kannst ja auch bspw. jede mögliche 6er Kombi auf einmap tippen und hast automatisch 6 Richtige, egal was gezogen wird.
WIll man nur mind. einmal 3 Richtige, braucht es wesentlich weniger zu tippende Reihen.
Aber halt welche, das rauszufinden kann maximal nur der COmputer durch Bruteforce Testen.
 
Aber halt welche, das rauszufinden kann maximal nur der COmputer durch Bruteforce Testen.
Da kommen wir der Sache schon näher, Du möchtest einen Bruteforce Test?
Kannst Du machen, ich habe Dir oben ein SQL Statement gepostet, mit dem Du so viel zufällige Tipps generieren kannst, wie Du magst. Was hindert Dich?
Und nein, das nicht maximal der Computer durch Bruteforce. Man kann es sicherlich mathematisch berechnen und so viele Tipps produziert man dann. Z.B. per SQL. Und dann kannst anschließend natürlich mit gegebenen oder ausgedachten Ziehungen das Verfahren prüfen.
Konkrete Lösungen für Sets von Tipps, die 3 richtige garantieren, gibt es sicherlich viele, wie gesagt, ein Näherungsproblem.
 
Werbung:
Und für den Bruteforce Ansatz mit der Gesamtmenge aller möglichen Tipps hier mal ein Start:
Code:
-- basismenge
create or replace view tipps649 as
select g as tipp
  from generate_series(1,49) g;
-- 2er Tupel
select t1.tipp as n1,
       t2.tipp as n2
  from tipps649 t1 cross join tipps649 t2 
 where t1.tipp != t2.tipp;
Das ist allerdings nicht mysql, sondern postgres.

Davon brauchst Du 3 Tupel, die keine Schnittmenge haben, dann hast Du alle möglichen Kombinationen.
 
Zuletzt bearbeitet:
Zurück
Oben