Szukam algorytmu drzewa interwałowego podobnego do drzewa interwałów czerwono-czarne w CLR, ale obsługuje domyślnie łączenie przedziałów, tak aby nigdy nie zachodziły na siebie nakładające się interwały.Algorytm przedziałów czasowych, który obsługuje łączenie przedziałów bez nakładania się
Innymi słowy, jeśli drzewo zawierało dwa przedziały [2,3] i [5,6], a użytkownik dodał przedział [4,4], wynikiem byłoby drzewo zawierające tylko jeden przedział [2, 6].
Dzięki
Aktualizacja: przypadek użycia Zastanawiam jest obliczenie przechodni zamknięcia. Zbiory przedziałów czasowych są używane do przechowywania zestawów następców, ponieważ zostały one found to be quite compact. Ale jeśli reprezentujesz zbiory interwałowe jako listę połączoną, odkryłem, że w niektórych sytuacjach mogą one stać się dość duże, a więc także czas wymagany do znalezienia punktu wstawienia. Stąd moje zainteresowanie drzewami interwałowymi. Również może być całkiem dużo scalania jednego drzewa z innym (tj. Operacja zestaw OR) - jeśli oba drzewa są duże, może być lepiej utworzyć nowe drzewo przy użyciu spacerów wewnątrz drzew, zamiast wielokrotnych wstawień każdego interwału.
Usunąłem moją odpowiedź, ponieważ głupio przeoczyłem niektóre przypadki. Nadal można było naprawić, ale stałoby się o wiele bardziej skomplikowane. W każdym razie, odkąd zaktualizowałeś się, by powiedzieć, że głównie będziesz scalał całe drzewa, odpowiedź nie wydaje się już przydatna, ponieważ kolejność w kolejności będzie szybsza. – interjay
Oh ok. Czasami łączę dwa duże drzewa, gdy zamówienie prawdopodobnie będzie szybsze, ale częściej będę dodawał małe drzewo do dużego drzewa. –