assumendo 1,2,3,3,4,1
è una sequenza indifferenziati valido e 2,4,6,8
è una sequenza valida (di passaggio due) pure, ma non è 1,3,5,9
(7 manca) e assumendo la matrice di ingresso possono essere sovrascritti,
- determinare il massimo e il minimo: O (n) tempo, O (1) spazio. Puoi usare la prima e l'ultima posizione dell'array per questo.
- determinare il passaggio. Il passo è il moltiplicatore meno comune di tutti
a_n - min
- se sono troppo distanti (
max - min > (count + 1) * step
), non può essere una sequenza. Altrimenti,
- esegui un ordinamento intero in loco. Fino all'inizio> fine:
- guardare la prima posizione. Lasciate che il valore non sia
v_0
- lasciare la sua posizione di destinazione quando non ci assumiamo alcuna duplicati (
(v_0 - min)/step + start
) siano i
- se la posizione di destinazione è inferiore a
start
, si tratta di un duplicato. Spostalo sul retro e decrementa il puntatore finale
- se la posizione di destinazione è maggiore di
end
, manca un elemento nella sequenza. Richiedi che l'array non è una sequenza.
- se l'elemento è nella posizione di destinazione, incrementa il puntatore avviamento e il riferimento
min
- altrimenti se l'elemento nella posizione di destinazione è inferiore al riferimento minimo o uguale a
v_0
, sostituirlo alla fine dell'array e decrementa il puntatore finale. È un duplicato.
- altrimenti scambiare l'elemento nella posizione di destinazione con
v_0
.
- rivendicazione dell'array una sequenza
Il sul posto intero sort è O (n).In ogni passaggio uno:
- accorcia la matrice di ingresso e mantiene tutti gli elementi ordinati alle loro posizioni di destinazione o
- genere uno o due elementi precedentemente non smistata alla loro posizione finale.
Alla fine dell'ordinamento, ogni elemento è un duplicato nel blocco duplicato o nella posizione corretta nel blocco ordinato.
Si noti che il passaggio n. 3 può essere escluso. # 4 determinerà correttamente che questa non è una sequenza, anche se più lenta.
Se il passo deve essere 1, allora questo algoritmo può essere semplificata leggermente (vedi revisione # 1)
fonte
2013-08-07 11:42:01
Il passaggio 2 utilizza lo spazio O (n). – jbr
E 'questo che intendi? http://stackoverflow.com/a/18102484/499214 Il punto 2 suona come se si stesse cercando di uscire dallo spazio 'O (1)' allocando una quantità illimitata di memoria extra. –
OK, perse esigenze di spazio – oddparity