Esiste un algoritmo efficiente per trovare l'i-esimo caro accordo?


9

Ecco lo sfondo di questa domanda. Amici e io stavamo giocando a un gioco in cui tutti hanno bisogno di fare un regalo ad altre persone. Al fine di determinare chi dovrebbe fare un regalo a chi, decidiamo di disegnare un sacco. Ma il problema è che qualcuno potrebbe finire per fare regali, il che non è divertente. Puoi vedere che il numero previsto di tali sfortunati è 1, quindi questo accade abbastanza frequentemente.

A tal fine, il caro-accordo sembra adattarsi perfettamente. Se riesco a generare in modo equo un accordo, allora posso solo scegliere un accordo e usarlo per decidere chi dare chi regali.

La generazione casuale di riarrangiamento potrebbe essere fatta con il metodo di Las Vegas. Ma il problema è che si è aspettato solo un tempo di esecuzione polinomiale. Quindi sono arrivato a questo problema di trovare il mio accordo. Se riesco a scegliere casualmente un i in [1, D_n] e utilizzare l'algoritmo del tempo polinomiale (efficiente) nel peggiore dei casi per ottenere l'i-esimo accostamento, allora è fatto.


1
Potresti spiegare la motivazione della domanda, per favore? cioè perché sei interessato a questa domanda?
Kaveh,

2
Forse vuoi giocare a Babbo
Natale

Potresti aggiungere una riga su ciò che intendi per gentilezza?
Vijay D,

Risposte:


9

In realtà questa potrebbe essere una buona domanda ma è mal formulata nella sua forma attuale. I noti algoritmi per la generazione di discordanze casuali hanno un tempo lineare previsto, ma forse è un problema aperto trovare un algoritmo temporale polinomiale nel caso peggiore.

Vedere ad esempio: http://www.siam.org/proceedings/analco/2008/anl08_022martinezc.pdf (e diapositive: http://www.lsi.upc.edu/~conrado/research/talks/analco08.pdf )


Questa mi sembra la risposta giusta.
Suresh Venkat,

10
La ricorrenza non è! N = (n − 1) (! (N − 1) +! (N − 2)) descritto in en.wikipedia.org/wiki/Derangement porta immediatamente ad un algoritmo polinomiale nel caso peggiore per casuale generazione?
David Eppstein,

Si hai ragione. Stavo pensando che ci sia un piccolo problema perché devi essere in grado di generare numeri casuali in sottoinsiemi arbitrari di {1, ..., n} nel peggiore dei casi, ma è facile da fare.
didest

0

Perché no, per ogni posizione i , scegliere casualmente tra tutti gli elementi diversi da me ? Ad esempio, puoi scegliere un indice nell'array originale tra [0..n-2] e se ottieni j> = i usi j + 1 .


3
Ciò rende tutti gli squilibri ugualmente probabili?
David Eppstein,

oh, buon punto - questo posizionerebbe gli elementi più avanti nella matrice preferibilmente prima nella matrice. Se dovessi riempire gli slot nell'array di destinazione in un ordine casuale, tutte le differenze sarebbero ugualmente probabili (per simmetria).
pat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.