Jeśli mam duży zestaw ciągłych zakresów (np. [0..5], [10..20], [7..13], [- 1. 37)) i może rozmieścić te zestawy w dowolnej strukturze danych, którą lubię, jaki jest najbardziej skuteczny sposób testowania , który to zestaw ustawia konkretny numer test_number?skuteczny algorytm do testowania _, który_ ustawia konkretną liczbę należy do
Myślałem o przechowywaniu zestawów w zbalansowanym drzewie binarnym na podstawie małej liczby zestawu (a każdy węzeł miałby wszystkie zestawy, które mają taką samą najniższą liczbę z ich zestawu). Umożliwiłoby to wydajne przycinanie liczby zestawów w zależności od tego, czy test_numer, który testujesz względem zestawów, jest mniejszy niż najniższy numer zestawu, a następnie czyszczenie tego węzła i wszystkich węzłów po prawej stronie tego węzła (co mają małą liczbę w ich zakresie, która jest większa niż liczba testowa). Myślę, że przycinałoby to średnio 25% zbiorów, ale wtedy musiałbym liniowo spojrzeć na wszystkie pozostałe węzły w drzewie binarnym, aby określić, czy test_number należał do tych zestawów. (Mogłabym dalej zoptymalizować sortując listy zestawów w dowolnym węźle według najwyższego numeru w zestawie, co pozwoliłoby mi na wyszukiwanie binarne w ramach określonej listy, aby określić, który zestaw, jeśli taki występuje, zawiera numer_testowy. zestawów, z którymi będę miał do czynienia, nie ma zachodzących na siebie granic.)
Myślę, że problem ten został rozwiązany w przetwarzaniu grafiki, ponieważ odkrył sposoby efektywnego testowania, które wielokąty w całym swoim modelu przyczyniają się do do określonego piksela, ale nie znam terminologii tego typu algorytmu.
Drzewo segmentów nie jest najszybszą metodą zliczania liczby zestawów. Ponieważ będzie to wymagało O (m. (Log (n) + k)), gdzie m jest liczbą sprawdzeń, a k jest liczbą zestawów, do których należy, n jest całkowitą liczbą zestawów. Mój algorytm to O (m.log (n)) –
Mehrdad, twój pomysł jest nie do pobicia dla odpowiednich zestawów danych. Ale drzewo segmentów jest drastycznie bardziej elastyczne. Może obsługiwać gry podwójne, a twoja jest ograniczona do liczb całkowitych. Bez problemu obsłuży ogromne zasięgi (na przykład [0..2000000000], które uczynią z Ciebie ogromną ilość czasu i przestrzeni.) – Sol
Jeśli jesteś zainteresowany tylko liczeniem, po prostu przechowuj liczbę zestawów w drzewie segmentów i wtedy koszt pobrania liczby staje się O (n log n) –