Se i tuoi dati non sono ordinati, non hai altra scelta che controllare ogni punto poiché non puoi sapere se esiste un altro punto per cui y è maggiore di tutti gli altri punti e per il quale x > x_min
. In breve: non puoi sapere se un altro punto dovrebbe essere incluso se non li controlli tutti.
In questo caso, suppongo che sarebbe impossibile controllare il tempo lineare sub come richiesto, poiché è necessario verificarli tutti. Il modo migliore per cercare tutto sarebbe lineare.
Se i dati sono ordinati, il tuo caso migliore sarà il tempo costante (tutti i n punti sono quelli con il massimo y) e il caso peggiore sarebbe lineare (tutti i n punti sono quelli con meno y). Il caso medio sarebbe più vicino alla costante, penso che se x e x_min siano entrambi casualmente all'interno di un intervallo specifico.
Se si desidera ridimensionare (ovvero, si potrebbero avere valori elevati di n), si desidera mantenere ordinato anche il set risultante poiché è necessario verificare i nuovi potenziali punti contro di esso e rilasciare il valore più basso valore quando si inserisce (se dimensioni> n). Usando un albero, questo può essere il tempo di registrazione.
Quindi, per fare l'intera cosa, il caso peggiore è per i punti non ordinati, nel qual caso stai guardando il tempo di nlog (n). I punti ordinati sono migliori, nel qual caso stai guardando il caso medio di log (n) (di nuovo, assumendo valori distribuiti approssimativamente a caso per x e x_min), che sì è sub-lineare.
Nel caso in cui non lo è in un primo momento ovvio perché i punti ordinati avranno hanno costante di tempo per la ricerca in, andrò oltre che qui in fretta.
Se i n punti con i maggiori valori di y avevano tutti x > x_min
(il migliore dei casi), allora stai semplicemente afferrando ciò che ti serve al di fuori, in modo che il caso sia ovvio.
Per il caso medio, assumendo approssimativamente a caso distribuito x e x_min, le probabilità che x > x_min
siano sostanzialmente la metà. Per qualsiasi due numeri casuali a e b, a > b
è altrettanto probabile che sia vero come b > a
. Questa è la stessa cosa con x e x_min; È altrettanto probabile che x > x_min
sia vero come x_min > x
, ovvero 0,5 probabilità. Ciò significa che, per i tuoi punti, in media ogni secondo punto controllato soddisferà il tuo requisito x > x_min
, quindi in media controllerai 2n punti per trovare i n punti più alti che soddisfano i tuoi criteri. Quindi il caso migliore era c tempo, la media è 2c che è ancora costante.
Si noti, tuttavia, che per i valori di n che si avvicinano alla dimensione dell'insieme, ciò nasconde il fatto che si sta attraversando l'intero set, riportandolo essenzialmente indietro al tempo lineare.Quindi la mia affermazione che è un tempo costante non è vera se si assumono valori casuali di n entro l'intervallo della dimensione del set.
Se questa non è una domanda puramente accademica ed è motivata da qualche necessità effettiva, dipende dalla situazione.
(modifica) Ho appena realizzato che le mie asserzioni a tempo costante presupponevano una struttura dati in cui si ha accesso diretto al valore più alto e possono passare in sequenza a valori più bassi. Se la struttura dei dati che ti viene fornita non corrisponde a quella descrizione, ovviamente questo non sarà il caso.
Come possono tutti i n punti avere maggiore y? –
Vuol dire che su tutti i punti quei n punti avranno la loro coordinata y maggiore dei punti rimanenti. –
Voglio dire che se decidi di discendere con 'y', i primi punti' n'. –