Alle Zahlen finden, die 3 bestimmte Ziffern enthalten?

berndoa

Top Contributor
Hallo,
ich werkle mal wieder an meinem Lottoproblem und der bisherige Code ist insofern aktuell performancemässig... miserabel
da der Code ein aufsteigend sortiertes Tripel (a,b,c) (mit a<b<c, 1<=a,b,c<=49) aktuell mit 13 Millionen 6-Tupeln (g,h,i,j,k,l) dahingehend vergleicht ob es darin enthalten ist. (zuzüglich 1-2 weiteren Bedingungen).
Falls dem so ist, dann geht der Code nochmal alle 6-Tupel durch und entfernt darin dieses Tripel.
Und das wieerum wird für ALLE möglichen Tripel gemacht.


Kurzum, es werden so ca. 2*(49 über 3)*(49 über 6)=515275651968 Vergleiche gemacht, was einfahc nur lächerlich hoch ist, was seeehr lange dauert und den Computer zum Abshcmieren bringt.

Um also zumindest ein 3-Tupel nicht 2 mal mit 13 Millionen 6-Tupeln vergleichen zu müssen,
war nun der Gedanke, sich vorab einfach mal zu überlegen, welche 6tupel es denn gibt in denen ein gegebenes 3-Tupel (a,b,c) enthalten sein könnte.
Und nur die dann überprüfen!

Das erscheint mir, als wäre es unter Umständen etwas schneller und effektiver! :)

Frage ist nur, wie alle möglichen solchen 6Tupel bauen?
Wenn ein 3Tupel (a,b,c) gegeben ist, kann ja das 6Tupel bspw die Formen
(___abc),(a_b_c)(a__bc) und ähnliche haben.
Wie finde ich die am Effektivsten?

Wobei halt die 3 Blnkstellen _ _ _ in und um a b und c verteilt werden müssen.


Ist vermutlich eher eine Frage der Kombinatorik, aber mir fällt nichts Gutes ein wie ich das programmieren kann :-/
 

berndoa

Top Contributor
Ich habe glaube ich, vemrutlich, eine halbwegs wirksame Idee:
Anfangs Array(list?) mit Zahlen 1-49 bauen.
Dann die 3 Zahlen, a,b,c rausschmeissen.
Dann systematisch alle aufsteigend sortierten Tripel aus diesem Array ziehen, wobei all jene Tripel jeweils mit dem Ursprungstripel (a,b,c) zu neuen 6-Tupel fusioniere.

Müsste dann entsprechend alle 6Tupel ergeben wo das besagte (a,b,c) Tripel drin ist.
 

Neumi5694

Top Contributor
Effizienter. Entweder kommt bei deinem Code effektiv das richtige raus oder eben nicht :)

Falls du mit einem Filter arbeiten willst, ist einer mittels Bitmaske recht effizient.
Java:
long tupel6; //hat 6 Bits auf 1
long mask; //hat 3 Bits auf 1
if  (tupel6 & mask == 0) {
  //Keine Übereinstimmung
}

Aber wenn du von Anfang an nur Tupel bilden willst, die diese Zahlen nicht beinhalten, dann ist natürlich eine Reduzierung der Datenmenge besser, da du dann nur mit 46 über 6 arbeitest anstatt mit 49 über 6, der Faktor müsste bei ca. 18000 liegen.
Nachteil: Für jede Dreierkombi musst du zuerst mal diese Liste aufbauen, was wiederum Leistung kostet.Ich weiß auch nicht, wie oft du das machen willst. Wenn es für jede Dreierkombination einmal passieren muss, dann hast du am Ende einen höheren Aufwand als wenn du einmal alle möglichen Tupel erstellst und dann für jede Dreierkombination filterst.
 

Neumi5694

Top Contributor
ps: Im Threadtitel steht, dass du Zahlen finden willst, die diese 3 beinhalten, im Text willst du diese ausschließen.
Zum finden der Tupel MIT Diesen Zahlen wäre der FIlter dieser:
SVG:
if  (tupel6 & mask == mask) {
  //Alle Bits der Maske sind in tupel6 gesetzt.
}
 

mihe7

Top Contributor
Läuft in unter einem Wimpernschlag:

Java:
public long[] dreier(int a, int b, int c) {
     long[] ziehungen = new long[15180];
     long ziehung = 1L << (a - 1) | 1L << (b - 1) | 1L << (c-1);
     int count = 0;
     for (int d = 1; d <= 47; d++) {
         if ((ziehung & (1L << (d - 1))) > 0) continue;

         for (int e = d + 1; e <= 48; e++) {
             if ((ziehung & (1L << (e - 1))) > 0) continue;

             for (int f = e + 1; f <= 49; f++) {
                 if ((ziehung & (1L << (f - 1))) > 0) continue;

                 ziehungen[count] = ziehung | 1L << (d - 1) | 1L << (e - 1) | 1L << (f - 1);
                 count++;
             }
         }
    }
    return ziehungen;
}
 

berndoa

Top Contributor
ps: Im Threadtitel steht, dass du Zahlen finden willst, die diese 3 beinhalten, im Text willst du diese ausschließen.
Zum finden der Tupel MIT Diesen Zahlen wäre der FIlter dieser:
SVG:
if  (tupel6 & mask == mask) {
  //Alle Bits der Maske sind in tupel6 gesetzt.
}
Was ich meinte:
Ich habe gegebenes Tripel, bspw. (1,4,5)

Dann nehme ich die reduzierte Liste an möglichen zahlen , also {1-49}/{1,4,5}={2,3,6,7,...,49}.
bilde alle möglichen Tripel mit dieser menge und vereinige jene Tripel jeweils mit dem ursprungstripel.

Weil, ich meine, ein 6tupel, das 1,4,5 enthält, besteht ja zwangsläufig
aus 1,4,5 sowie 3 weiteren, bisher noch nicht benutzten zahlen.
also halt (1,4,5) und ein solches tripel mergen wobei ich ausnutze dass beide tripel aufsteigend sortiert sind und so auch ein aufsteigend sortiertes 6tupel baue.

Gedenke nicht die ganzen 6tupel zu speichern, sondern nur mit dem 6tupel->string->id zu gehen und mit dem speziellen 6tupel zu arbeiten.

Ist vielleicht etwas besser wie wenn ich jedes tripel jeweils mit jedem der 13 millionen 6tupel abgleiche.


Ist zwar im Prinzip nur Schadensbegrenzung aber naja, vielelciht besser als Ohne :)

Stellt sich nur die Frage ob man bei eienr Hashmap sinnvoll Strings als keys benutzen kann.
Und ob er den key in der Hashmap auch dann findet wenn ich einen neuen string mit gleichem inhalt wie der key string benutze (weil ja inhalt gleich aber objekt hashcode unterschiedlich. vermutlich).
 

Neumi5694

Top Contributor
... Wozu so umständlich?
Du hast eine feste Menge an möglichen Sechsertupeln (49 über 6). Die hast du einmal erstellt und kannst sie immer wiederverwenden.
Lass den Bitmaskenfilter (D & m == m) darüber laufen und du kriegst genau das raus, was du gesucht hast, das geht sehr schnell.
Du weißt sogar, wie viele Zahlen du für den Filter rauskriegst (46 über 3) und kannst schon mal entsprechend dein Ergebnisfeld initialisieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
X Primfaktorzerlegung für alle Zahlen eines Intervalls Java Basics - Anfänger-Themen 21
M alle Zahlen unter 50, die wo gteilt durch 2 Java Basics - Anfänger-Themen 12
G alle Zahlen die durch 3 teilbar sind Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
E Select nimmt nicht alle Where /AND befehlen an Java Basics - Anfänger-Themen 4
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
R Methoden Eclipse schlägt mir nicht alle Möglichkeiten vor Java Basics - Anfänger-Themen 4
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
L Wie vergrößere ich ein Rechteck in alle Richtungen um eins und bekomme dessen Rand? Java Basics - Anfänger-Themen 2
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
X Erste Schritte String: Alle doppelten Leerzeilen entfernen Java Basics - Anfänger-Themen 21
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
M Alle Instanzen einer Klasse ansprechen Java Basics - Anfänger-Themen 4
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
C Alle Zweierpotenzen bis 2^10 ausgeben lassen Java Basics - Anfänger-Themen 15
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
W Mozilla Thunderbird email an alle Kontakte Java Basics - Anfänger-Themen 3
F Methode alle 15min ausführen Java Basics - Anfänger-Themen 5
D Alle möglichen Kombinationen in einem Array ausgeben Java Basics - Anfänger-Themen 2
I Alle Laufwerke und deres Pfade ausgeben Java Basics - Anfänger-Themen 6
S Classpath: Alle .jars innerhalb eines Ordners einbinden Java Basics - Anfänger-Themen 4
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
I Programm, welches eine Textzeile einliest und alle darin enthaltenen Buchstaben umwandelt Java Basics - Anfänger-Themen 3
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
I Alle Zeitzonen in Liste speichern Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
M Alle Sublisten einer bestimmten Laenge berechnen Java Basics - Anfänger-Themen 2
F Alle DEMOS fast veraltet...? Java Basics - Anfänger-Themen 13
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
D Methoden Alle Siebenstelligen Primpalidrome von PI Java Basics - Anfänger-Themen 6
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
P Klassen Alle Strings einer ArrayList<eigeneKlasse> anspre Java Basics - Anfänger-Themen 2
W String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben. Java Basics - Anfänger-Themen 9
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
M Alle möglichen Strings Java Basics - Anfänger-Themen 5
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
G Methoden Alle Objekte der ArrayList ausgeben funktioniert nicht. Java Basics - Anfänger-Themen 12
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
M Klassen Auf Alle Array Methoden gleichzeitig zugreifen Java Basics - Anfänger-Themen 8
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
G JFileChooser "alle Dateien" unterbinden Java Basics - Anfänger-Themen 3
S Aus zwei Dateipfaden alle Dateien auslesen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben