Millionen bit lange zahl bauen?

berndoa

Top Contributor
Hallo,
ich war ja am Werkeln beim Lottothema mit 6 Zahlen aus 49.
Bei dem stellte ich eine solche 6er Kombi als
49 bit lange zahl mit genau 6 einsen dar (und alles andere null).

Dadurch konnte ich durch verUNDung zweier solcher zahlen +bitcount() easy bestimmen wie viele "gleiche Zahlen" diese enthalten.
Nun habe ich eine ähnliche Problemlage, nur müssten die dort vorkommenden Zahlen eher so 13 millionen bit lang sein,
wie viele einsen drin vorkommen, hinge schwer von der jeweiligen zahl ab und ist individuell.


selbst der "längste" datentyp long hat ja nur so an die 64 bit.

Gibts da irgendeine Möglichkeite, wie man das trotzdem hinkriegen könnte irgendwie? :-/
 
Naja, ich habe 13 millionen 6-stellige lottozahlen (eine davon ist bspw {1,12,25,36,37,48})
Und jede davon ist mit ganz bestimmten anderen Lottozahlen in der liste "in verbindung" (heißt, haben 3 gleiche ziffern zusammen).
nun will ich mir für jede zahl die zu ihr in verbindung stehenden zahlen als einen 13 millionen langen vektor speichern 🙂
 
Wenn es dir wirklich auf die Performance ankommt, würde ich da ggf. eine eigene Implementierung bauen, die genau auf deine Anforderungen optimiert. Innen drin wird die Longs verwenden. Das könnte sich dann lohnen, wenn die Zahl der 1en im Verhältnis zur Bit-Länge sehr klein ist. Weil dann kann die 64 Bit-Stellen, die nur aus 0en bestehen weglassen, und muss nur für die 64 Bit Bereiche wirklich einen Long vorhalten, wo mindestens eine 1 vorkommt.
 
Für die reine Anzahl ist das ein Problem für einen Mathematiker, nicht für einen Programmierer.
Es gibt 18424 verschiedene Dreierkombinationen. 6 gezogene Zahlen treffen dann aber natürlich auf mehrere Kombinationen zu.
Genau ein Treffer...
Dann müssten von diesen 18424 Tupeln alle ausgeschlossen werden, die 3 bestimmte Werte NICHT beinhalten. (da gibt's sicher auch eine Formel dazu, lässt sich aber dank der sehr begrenzten Datenmenge auch einfach empirisch lösen)
Die Anzahl der Resttupel dann nochmal mit 6 über 3 multiplizieren, dann müsste man am Ziel sein.
 

Zurück
Oben