Dire che ho un numero di numeri da [0, ....., 499]
. Le combinazioni vengono attualmente generate in sequenza utilizzando C++ std::next_permutation
. Per riferimento, la dimensione di ciascuna tupla che sto ritirando è 3, quindi restituisco risultati sequenziali come [0,1,2], [0,1,3], [0,1,4], ... [497,498,499]
.n-esima combinazione arbitraria di un set grande
Ora, voglio parallelizzare il codice in cui si trova, quindi una generazione sequenziale di queste combinazioni non funzionerà più. Esistono algoritmi esistenti per calcolare la combinazione ith
di 3 da 500 numeri?
Voglio assicurarmi che ogni thread, indipendentemente dalle iterazioni del ciclo che ottiene, possa calcolare una combinazione autonoma basata su iterazione con i
. Quindi, se desidero la combinazione per i=38
nella discussione 1, è possibile calcolare [1,2,5]
e calcolare contemporaneamente i=0
nella discussione 2 come [0,1,2]
.
EDIT seguito affermazione è irrilevante, mi sono confuso
ho guardato algoritmi che utilizzano fattoriali per restringere ogni singolo elemento da sinistra a destra, ma non posso usare questi come 500! sicuro non si adatterà alla memoria. Eventuali suggerimenti?
Mostraci i calcoli relativi al fattoriale. Potresti semplicemente vederlo sbagliato. Sicuramente dividerete un fattoriale in un altro, il che generalmente significa che è possibile una semplificazione. – paddy
Penso di aver bisogno di riformulare la mia domanda. Non è solo una permutazione di 500 numeri. È una combinazione di 3 su 500 possibili. Ma voglio essere in grado di selezionare una combinazione arbitraria tra 500 possibili 3 possibili. – bgoers
Forse qualcosa di simile al seguente: http://code.google.com/p/strtk/source/browse/trunk/strtk.hpp#11622 – Gerdiner