Quelli di voi che hanno letto le mie precedenti domande sono a conoscenza del mio lavoro di comprensione e implementazione di quicksort e quickselect, oltre ad alcuni altri algoritmi di base.C++ Calcolo efficiente di una mediana in esecuzione
Quickselect viene utilizzato per calcolare il kesimo elemento più piccolo in un elenco non ordinato e questo concetto può anche essere utilizzato per trovare la mediana in una lista non ordinata.
Questa volta, ho bisogno di un aiuto nell'elaborazione di una tecnica efficace per calcolare la mediana esecuzione, perché quickselect non è una buona scelta in quanto ha bisogno di ricalcolare ogni volta che l'elenco viene modificato. Poiché quickselect deve riavviarsi ogni volta, non può trarre vantaggio dai calcoli precedenti, quindi sto cercando un algoritmo diverso che sia simile (probabilmente) ma che sia più efficiente nell'area delle mediane in esecuzione.
questo può essere fatto in un tempo lineare utilizzando partizione dalla rapida sorta algo ma ha il tempo peggiore n^2. Scegli un punto casuale nella tua collezione come pivot e sposta gli altri elem in modo che gli elemetti più piccoli di pivot siano a sinistra e più grandi o uguali siano a destra. Se il pivot è nel mezzo è la mediana, se non si va al chunk che ha la mediana (il chunk di dimensioni maggiori). Ripetere. Un altro algo che garantisce il tempo lineare mediana delle mediane descritte in CLRS e credo anche su wikipedia. Guarda quelli. – Adrian