@Perzh

Какую структуру данных выбрать?

Здравствуйте.
Есть набор непересекающихся интервалов (далее слои), которым соответствуют текстуры. В функцию отрисовки поступает некоторый интервал, который нужно нарисовать. Таким образом, нужно отыскать все пересечения заданного интервала с каждым слоем и нарисовать каждое пересечение своей текстуркой. Пример:
Слои:
0.00 10.00 white
10.00 20.00 blue
20.00 30.00 red

Нужно отрисовать интервал: 5.00 45.00

В результате:
5.00 до 10.00 белым цветом
10.00 до 20.00 синим цветом
20.00 до 30.00 красным цветом
30.00 45.00 дефолтным цветом

На данный момент я храню слои в упорядоченной последовательности (по возрастанию левой границы). При отрисовке быстро спускаюсь до первого слоя, пересекающего заданный интервал, а далее рисую пока не попадётся слои не пересекающий интервал. В принципе работает достаточно быстро (ненужные интервалы быстро отбрасываются), но хотелось бы знать, может есть какая нибудь интересная структура данных для хранения слоев, которая позволяет быстро находить все пересечения с заданным интервалом? Подскажите пожалуйста, если не трудно, такую структуру или алгоритм нахождения пересечений. Заранее спасибо
  • Вопрос задан
  • 2503 просмотра
Решения вопроса 1
icelaba
@icelaba
Знаю и умею всё
если у вас поиск первого интервала что то вроде бинарного поиска то уже хорошо можете дальше не морочить голову и да есть такая структура вот
en.m.wikipedia.org/wiki/Interval_tree

Если интервалов несколько тысяч всего то вы будете удивлены но наивный О(n) поиск будет быстрее любых древовидных структур.
(особенности процессорной архитектуры)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы