sto facendo alcuni esercizi su algoritmo di calcolo combinatorio e cercando di capire come risolvere il problema di seguito:Trovare il gruppo di inserimento più piccolo per coprire tutte le possibilità combinatorie
Dato un gruppo di 25 bit, impostare (scegliere) 15 (questioni non non permutable e ordine):
n!/(k!(n-k)!) = 3.268.760
Subito per ciascuna di queste possibilità costruire una matrice dove incrocio ogni membro 25bit unico contro ogni altro membro 25bit dove nel rapporto tra esso ci deve essere almeno 11 bit settati in comune (solo uno, non zero).
Permettetemi di illustrare lo rappresenta come dati binari, in modo che il primo elemento sarebbe:
0000000000111111111111111 (10 zeros and 15 ones) or (15 bits set on 25 bits)
0000000001011111111111111 second member
0000000001101111111111111 third member
0000000001110111111111111 and so on....
...
1111111111111110000000000 up to here. The 3.268.760 member.
Ora attraversare questi valori su una matrice per la 1 x 1 devo avere 15 bit comuni. Poiché il risultato è> = 11, è un risultato "utile".
Per 1 x 2 abbiamo 14 bit comuni, quindi anche un risultato valido.
Fare questo per tutti i membri, infine, attraversando 1 x 3.268.760 dovrebbe risultare in 5 bit in comune in quanto è < 11 non è "utile".
Quello che mi serve è scoprire (con la matematica o l'algoritmo) che è il numero minimo di membri necessari per coprire tutte le possibilità che hanno 11 bit comuni.
In altre parole un gruppo di membri N che, se testato rispetto a tutti gli altri, può avere almeno 11 bit comuni sull'intero universo 3.268.760 x 3.268.760.
Utilizzando un algoritmo di forza bruta ho scoperto che con 81 membri a 25 bit è possibile ottenere questo. Ma immagino che questo numero dovrebbe essere più piccolo (qualcosa vicino a 12).
Stavo cercando di utilizzare un algoritmo di forza bruta per fare tutte le possibili variazioni di 12 membri su 3.268.760 ma il numero di possibilità è così enorme che ci vorranno più di cento anni per calcolare (combinazioni 3.156x10e69).
Ho cercato su Google combinatorics ma ci sono così tanti campi che non so in che questi problemi dovrebbero adattarsi.
Quindi qualsiasi direzione su quale campo di combinatoria o qualsiasi algoritmo per questi problemi è molto apprezzata.
PS: solo per riferimento. La "somiglianza" dei due membri è calcolata mediante:
(Not(a xor b)) and a
Dopo di che c'è un piccolo ciclo ricorsivo per contare i bit indicati il numero di bit comuni.
EDIT: Come promissed (@btilly) sulla commento qui sotto ecco l'immagine 'frattale' delle relazioni o link to image
La scala di colore varia dal rosso (15bits match) al verde (11bit match) nero per valori inferiori a 10 bit.
Questa immagine è solo un esempio dei primi 4096 gruppi.
Se l'ordine conta non ci devono essere combinazioni 'n!/(N-k)!'? – SirGuy
Credo che questo sarebbe più adatto a [math.SE] (http://math.stackexchange.com). – jwodder
GuyGreer fare riferimento a [here] (http://en.wikipedia.org/wiki/Combination). EDIT: ok errore di ortografia (ordine non importa). jwodder sono d'accordo ma dal momento che dovrebbe esserci una soluzione non solo usando la matematica ma anche un algoritmo, e siccome sono più un programmatore che matematico, preferisco sentire le persone qui;) –