Dostajesz zestaw interwałów S
. Musisz znaleźć wszystkie przedziały w S
, które są zawarte w danym przedziale (a, b)
w minimalnej złożoności czasu.Dostajesz zestaw interwałów S. Musisz znaleźć wszystkie interwały w S, które są zawarte w danym przedziale (a, b) w minimalnym czasie złożoności
Można to zrobić w czasie O(n)
przez brute force, gdzie n
to liczba przedziałów w zestawie S
. Ale jeśli mogę wykonać pewne wstępne przetwarzanie, można to zrobić w czasie krótszym niż O(n)
np. O(log n)
czas?
Początkowo myślałem o interval tree, ale nie sądzę, że jest tu zastosowania, ponieważ drzewo przedziałowe stosowany jest, aby wszystkie przedziały że pokrywa z danego przedziału.
Jak stwierdzono, najlepiej można zrobić, to 'O (n)' bo w najgorszym przypadku, wszystkie elementy 's' musi zostać skopiowany do wyjścia. –
Tak, to prawda. Miałem jednak nadzieję na coś w rodzaju O (logn) + O (m), gdzie m jest liczbą elementów na wyjściu. –
@SteveM należy również zauważyć, że pod względem dużej notacji O, 'O (logn) + O (m) = O (n)', ponieważ m może być tak duże jak n. Wstępny czas przetwarzania jest również dołączany do środowiska wykonawczego, ponieważ jeśli chcesz posortować przedziały lub ułożyć je przy użyciu pewnych struktur danych, to są one również częścią twojego algorytmu. – Fallen