Ho un set di numeri N^2 e N bin. Si suppone che ogni bin abbia numeri N dal set assegnato ad esso. Il problema che sto affrontando è trovare una serie di distribuzioni che mappano i numeri ai bin, soddisfacendo il vincolo, che ogni coppia di numeri può condividere lo stesso bin solo una volta.Trovare un insieme di permutazioni, con un vincolo
Una distribuzione può essere ben rappresentata da una matrice NxN, in cui ogni riga rappresenta un contenitore. Quindi il problema è trovare un insieme di permutazioni degli elementi della matrice, in cui ogni coppia di numeri condivide la stessa riga solo una volta. È irrilevante quale riga sia, solo che due numeri sono stati entrambi assegnati alla stessa.
Esempio impostato su 3 permutazioni soddisfano il vincolo per N = 8:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
0 8 16 24 32 40 48 56 1 9 17 25 33 41 49 57 2 10 18 26 34 42 50 58 3 11 19 27 35 43 51 59 4 12 20 28 36 44 52 60 5 13 21 29 37 45 53 61 6 14 22 30 38 46 54 62 7 15 23 31 39 47 55 63
0 9 18 27 36 45 54 63 1 10 19 28 37 46 55 56 2 11 20 29 38 47 48 57 3 12 21 30 39 40 49 58 4 13 22 31 32 41 50 59 5 14 23 24 33 42 51 60 6 15 16 25 34 43 52 61 7 8 17 26 35 44 53 62
Una permutazione che non appartiene al set sopra:
0 10 20 30 32 42 52 62 1 11 21 31 33 43 53 63 2 12 22 24 34 44 54 56 3 13 23 25 35 45 55 57 4 14 16 26 36 46 48 58 5 15 17 27 37 47 49 59 6 8 18 28 38 40 50 60 7 9 19 29 39 41 51 61
Poiché di collisioni multiple con la seconda permutazione, poiché, ad esempio, stanno entrambi abbinando i numeri 0 e 32 in una riga.
enumerazione tre è facile, è composto da 1 permutazione arbitraria, la trasposizione e una matrice in cui le righe sono fatti di matrice precedente' diagonali.
Non riesco a trovare un modo per produrre un set composto da più però. Sembra sia un problema molto complesso, sia un semplice problema con una soluzione non ovvia. In entrambi i casi sarei grato se qualcuno avesse qualche idea su come risolverlo in tempi ragionevoli per il caso N = 8, o identificato il nome accademico corretto del problema, così potrei cercarlo su google.
Nel caso in cui ti stavi chiedendo per cosa è utile, sto cercando un algoritmo di scheduling per uno switch crossbar con 8 buffer, che serve il traffico verso 64 destinazioni. Questa parte dell'algoritmo di schedulazione è indipendente dal traffico di input e passa ciclicamente da un numero di mappature del buffer di destinazione cablate. L'obiettivo è di fare in modo che ogni coppia di indirizzi di destinazione competa per lo stesso buffer una sola volta nel periodo di ciclo e per massimizzare la durata di quel periodo. In altre parole, in modo che ogni coppia di indirizzi competesse per lo stesso buffer il più raramente possibile.
EDIT:
Ecco un po 'di codice che ho. CODE
È avido, di solito termina dopo aver trovato la terza permutazione. Ma dovrebbe esistere un insieme di permutazioni di almeno N che soddisfano il problema.
L'alternativa richiederebbe la scelta della permutazione I implicata nella ricerca di permutazioni (I + 1..N), per verificare se la permutazione I è parte della soluzione costituita dal numero massimo di permutazioni. Ciò richiederebbe l'enumerazione di tutte le permutazioni da controllare ad ogni passaggio, il che è proibitivo.
L'intera questione è un po 'prolisso. Non è chiaro cosa intendi per coppia. Cosa intendi per 'il vincolo, che ogni coppia di numeri può condividere lo stesso bin solo una volta.'? – Alex
Ho difficoltà a capire il tuo vincolo "ogni coppia di numeri può condividere lo stesso bin solo una volta". Non è forse così banalmente lo un accordo di numeri unici N^2? Puoi mostrare un accordo che fallisce il vincolo? –
Il vincolo deve essere soddisfatto per l'intera serie di permutazioni. In modo che se una permutazione pone i numeri 1 e 2 sulla stessa riga, nessuna altra permutazione nel set è consentita di mettere 1 e 2 sulla stessa riga. –