La domanda che mi interessa è relativa alla generazione di permutazioni casuali. Dato un gate di scambio probabilistico a coppie come blocco di base, qual è il modo più efficiente per produrre una permutazione uniformemente casuale di elementi? Qui prendo "gate di scambio probabilistico a coppie" per essere l'operazione che implementa un gate di scambio tra gli elementi scelti e con una certa probabilità che può essere liberamente scelta per ciascun cancello e l'identità in caso contrario.
Mi rendo conto che questo di solito non è il modo in cui si generano permutazioni casuali, dove di solito si potrebbe usare qualcosa come un shuffle Fisher-Yates, tuttavia, questo non funzionerà per l'applicazione che ho in mente poiché le operazioni consentite sono diverse.
Chiaramente questo può essere fatto, la domanda è quanto sia efficiente. Qual è il numero minimo di swap probabilistici necessari per raggiungere questo obiettivo?
AGGIORNARE:
Anthony Leverrier fornisce un metodo di seguito che effettivamente produce la corretta distribuzione usando porte , con Tsuyoshi Ito che fornisce un altro approccio con lo stesso ridimensionamento nei commenti. Tuttavia, il limite inferiore migliore che ho visto finora è , che si ridimensiona come . Quindi, la domanda rimane ancora aperta: il migliore che si possa fare (cioè c'è un limite inferiore migliore)? O in alternativa, esiste una famiglia di circuiti più efficiente?
AGGIORNARE:
Molte delle risposte e dei commenti hanno proposto circuiti composti interamente da swap probabilistici in cui la probabilità è fissata a . Tale circuito non può risolvere questo problema per il seguente motivo (sollevato dai commenti):
Immagina un circuito che utilizza tali cancelli. Quindi ci sono percorsi computazionali equiprobabili, e quindi ogni permutazione deve avvenire con probabilità per un certo numero intero k. Tuttavia, per una distribuzione uniforme richiediamo che
AGGIORNAMENTO (da mjqxxxx che offre la taglia):
La generosità offerta è per (1) una prova della necessità di porte , o (2) un circuito di lavoro, per qualsiasi n , che utilizza meno di n (n-1) / 2 porte.n ( n - 1 ) / 2