Come può questo algoritmo di selezione temporale deterministico lineare essere lineare?

3

Sto cercando di capire i concetti di base degli algoritmi attraverso le classi offerte in Coursera (in bit e pezzi), I trovato l'algoritmo deterministico di selezione del tempo lineare che funziona come segue:

  • Seleziona (A, n, i)
    1. Se n = 1 restituisci A [1].
    2. p = ChoosePivot (A, n)
    3. B = Partizione (A, n, p)
    4. Supponiamo che p sia l'elemento jth di B (vale a dire, la statistica di ordine j di A). Lasciare che la "prima parte di B" denoti il suo primo j - 1 elementi e la "seconda parte" i suoi ultimi elementi n - j.
      • Se i = j, restituisci p.
      • Se io < j, return Seleziona (1a parte di B, j - 1, i).
      • Else return Select (2a parte di B, n - j, i - j).

E ordina internamente l'array nella subroutine ChoosePivot per calcolare la mediana della mediana utilizzando un algoritmo di ordinamento basato sul confronto. Ma il limite inferiore non è sul parsing basato sull'ordinamento O(nlogn) ? Quindi, come sarebbe possibile per noi ottenere il O(n) per l'intero algoritmo allora? Mi sto perdendo qualcosa qui?

    
posta seeker 17.05.2012 - 11:00
fonte

1 risposta

6

And sorts the array internally in the ChoosePivot subroutine to calculate the median of median using a comparison based sorting algorithm.

Questa è la premessa errata (hai ragione che se noi facessimo facciamo un ordinamento basato sul confronto, non potremmo essere lineari). Il punto di mediana dei mediani è che è lineare - non è necessario ordinare l'intero set se tutto ciò che si desidera è la mediana. Vedi prova del tempo di esecuzione O (n) su wikipedia per maggiori dettagli.

    
risposta data 17.05.2012 - 12:00
fonte

Leggi altre domande sui tag