Algoritmo di ordinamento, in modo tale che ogni elemento venga confrontato


39

Esistono algoritmi di ordinamento comparativo noti che non si riducono alle reti di ordinamento, in modo tale che ogni elemento venga confrontato volte?O(logn)

Per quanto ne so, l'unico modo per ordinare con il confronto su ciascun elemento è costruire una rete di ordinamento AKS per input ed eseguire l'input sulla rete di ordinamento.nO(logn)n

AKS non è facile da implementare e ha un fattore impraticabile costante, quindi ci sono motivazioni per cercare altri algoritmi.

Qui viene presentato un algoritmo con confronti per articolo che non sembrano implicare una rete di ordinamento . (Iirc, questo è stato presentato per la prima volta da Rob Johnson al seminario sugli algoritmi di Stony Brook).O(log2n)


2
Non capisco la domanda: molti algoritmi sequenziali sembrano corrispondere alla tua richiesta. es. Unisci ordinamento è un algoritmo di ordinamento classico e non effettua più di un confronto per elemento. Forse stai chiedendo algoritmi di ordinamento parallelo ? logn
Jeremy,

4
@Jeremy: Se si uniscono due liste, e ( b 1 , . . . , B n ) , si può finire per il confronto di un 1 contro ciascuno di B 1 , . . . , b n , ovvero Ω ( n ) confronti per un elemento. E questo è stato solo un passo di "unione". Certamente la media(un'1,...,un'n)(B1,...,Bn)un'1B1,...,BnΩ(n)il numero di confronti è necessariamente piccolo, ma la domanda riguarda la complessità del caso peggiore .
Jukka Suomela,

6
Credo sia possibile. Le reti di ordinamento sono ignari dei dati e hanno un modo predeterminato di confronti, ma un algoritmo di ordinamento potrebbe essere in grado di scegliere tra diversi insiemi di operazioni a seconda dei dati. Si può modificare l'unione dell'ordinamento in un algoritmo con confronto per ciascun elemento e non sembra implicare una rete di ordinamento reddit.com/comments/9jqsi/…O(log2n)
Chao Xu

1
Jukka: Grazie, ho capito. Ma questo è solo quando si utilizza l'unione ingenua: si può unire con ( b 1 , ... , b n ) usando la ricerca raddoppiata per posizionare ogni elemento, che è ancora n confronti nel totale nel caso peggiore, ma lg n confronti per elemento al massimo, che produce la versione di merge sort a cui allude Chao. (a1,,an)(b1,,bn)nlgn
Jeremy,

2
Ora c'è una nuova domanda correlata (ma si spera molto più semplice): cstheory.stackexchange.com/questions/8073/…
Jukka Suomela,

Risposte:


17

Dopo aver discusso di questo con Michael T. Goodrich, sembra che l'algoritmo di ordinamento parallelo di Cole per EREW PRAM faccia il suo lavoro. Vedere

In quell'algoritmo ci sono round e in ogni round ogni elemento partecipa al confronto O ( 1 ) . (Bisogna capire l'algoritmo per vedere che non abusiamo di fare copie di ogni elemento.)O(logn)O(1)

Viene fornita un'estensione di tale algoritmo per la macchina puntatore parallelo


Vorremmo sapere chi sei! : D
Tayfun paga il

@someone is Sergio Cabello
qualcuno

@qualcuno. Ty per questa risposta. Menziona i risultati nel modello EREW. Dal suo modello di lettura esclusiva e di scrittura esclusiva, significa che tutte le posizioni vengono toccate al massimo O (1) volta in ogni round e quindi volte nel complesso. Ciò implica un semplice algoritmo per trovare la mediana nella RAM (o anche nel modello EREW) usando i confronti O ( log n ) per elemento? O(logn)O(logn)
Vk1
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.