Sto cercando un algoritmo one-pass che calcola la parità di una permutazione. Presumo che una permutazione di input sia data da stream . L'output dovrebbe essere la parità della permutazione. La domanda che mi interessa è la quantità di memoria che un algoritmo deterministico dovrebbe usare. Esiste un algoritmo randomizzato per il problema?
So che calcolare il numero di inversioni in un passaggio utilizza la memoria . Il limite superiore può essere facilmente ottenuto con qualsiasi BST. Il limite inferiore è presentato qui: http://citeseerx.ist.psu.edu/viewdoc/versions?doi=10.1.1.112.5622
Purtroppo, la prova del limite inferiore nel documento non può essere estesa al caso della parità (o non è così ovvio per me).
Inoltre so che la parità di calcolo in un piccolo spazio con accesso casuale a una permutazione può essere eseguita in tempo e memoria mediante algoritmo deterministico o in tempo e memoria di uno casuale. Vedi http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2256
L'idea principale è che la parità di una permutazione può essere calcolata con la formula , dove è il numero di cicli e è la dimensione. Gli autori effettuano la decomposizione del ciclo di una permutazione. Quindi si può facilmente calcolare il numero di cicli.
Qualcuno conosce un algoritmo efficace o un limite inferiore della memoria per il calcolo della parità nel modello di streaming? Gli algoritmi randomizzati migliori delle monete casuali sono interessanti anche per me.