Dobrze byłoby wiedzieć, o jakich danych mówimy. Ilu istnieje użytkowników? Ile średnio będzie online? Jaki jest stosunek „widzianych użytkowników” do wszystkich użytkowników (nieliczni kontra gęści)?
Modyfikacja algorytmu Nie otwieraj pierwszego, ale wybierz losowy element z zestawu użytkowników online. Powinno to poprawić równowagę i może pomóc w zamortyzowanej złożoności w zależności od stosunku tych dwóch zestawów!
Algorytm alternatywny (bardziej ustrukturyzowany; nadal zły w najgorszym przypadku; powinien być dobry, jeśli jest rzadki widziany )
- Zachowaj widoczność jako drzewo zrównoważone (wstawienie O(log n))
- Zachowaj online jako zrównoważone drzewo.
- Jeśli wybrano za mało użytkowników:
- Wyszukaj pierwszą lukę w widzianym (np. [0,1,3,7] -> 2; O(log n) zgodnie z SO-link)
- Wyszukaj pierwszego użytkownika>=wartość przerwy (O(log n))
- Jeśli użytkownik
- -> wybierz
- Inne
- -> dodaj wybraną wartość przerwy tymczasowo (w tej chwili; model-decyzja, jak często aktualizować online ) do zobaczenia LUB ogranicz wyszukiwanie do> wybranej-wartości przerwy (O(log n))
W zależności od danych powinno to działać bardzo dobrze, jeśli dane są ogromne i widoczne jest rzadki!