Viene fornita una serie di intervalli S
. È necessario trovare tutti gli intervalli in S
contenuti in un dato intervallo (a, b)
con una complessità temporale minima.Viene fornita una serie di intervalli S. È necessario trovare tutti gli intervalli in S che sono contenuti in un dato intervallo (a, b) in una complessità temporale minima
Questo può essere fatto in O(n)
tempo con la forza bruta, in cui n
è il numero di intervalli in serie S
. Ma se mi è permesso fare qualche pre-elaborazione, questo può essere fatto in meno di tempo O(n)
ad es. O(log n)
tempo?
Inizialmente pensavo interval tree, ma non credo che essa è applicabile qui perché albero intervallo viene utilizzata per ottenere tutti gli intervalli che si sovrappone con un dato intervallo.
Come detto, il meglio che puoi fare è 'O (n)', perché, nel peggiore dei casi, tutti gli elementi del 'S' deve essere copiato all'uscita. –
Sì, è vero. Ma speravo in qualcosa tipo O (logn) + O (m), dove m è il numero di elementi nell'output. –
@SteveM nota bene che, in termini di notazione O grande, 'O (logn) + O (m) = O (n)', perché m può essere grande come n. Anche il tempo di elaborazione preliminare è incluso nel runtime, perché se si desidera ordinare gli intervalli o organizzarli utilizzando alcune strutture di dati, anche questi fanno parte dell'algoritmo. – Fallen