Powiedz, że [a, b] reprezentuje przedział na linii rzeczywistej od a do b, < b, włącznie (tj. [A, b] = zbiór wszystkich x takich, że < = x < = b). Powiedz też, że [a, b] i [c, d] "nakładają się", jeśli dzielą dowolne x tak, że x jest w obu [a, b] i [c, d].wyszukiwanie przedziału czasowego na liście interwałów?
Biorąc pod uwagę listę interwałów, ([x1, y1], [x2, y2], ...), jaki jest najskuteczniejszy sposób na znalezienie wszystkich takich interwałów, które pokrywają się z [x, y]?
Oczywiście, mogę wypróbować każdy i uzyskać go w O (n). Ale zastanawiałem się, czy mógłbym uporządkować listę interwałów w jakiś sprytny sposób, mógłbym znaleźć/jeden/nakładający się element w O (log N) za pomocą wyszukiwania binarnego, a następnie "rozejrzeć się" od tej pozycji na liście, aby znaleźć wszystkie nakładające się interwały. Jak jednak posortować interwały, aby taka strategia działała?
Należy zauważyć, że niektóre elementy w elementach listy mogą się pokrywać, co powoduje, że jest to trudne.
Próbowałem tego, sortując interwały po ich lewym końcu, prawym końcu, środku, ale żaden nie wydaje się prowadzić do wyczerpujących poszukiwań.
Pomoc?
+1, ponieważ sprawiło, że mój dzień roboczy był nieco bardziej interesujący. –