Структура для хранения значений "от... до"
От: FreeX  
Дата: 21.04.11 10:07
Оценка:
Привет!

нужно сделать структуру, которая хранила бы следующие диапазоны значений
"занято от... и до..."
соответственно запросы должны быть типа
AddRange(int begin, int end); — добавить
HaveRange(int begin, int end); — есть ли этот диапазон целиком в добавленных, и если нет, то вернуть список диапазонов которых нет в добавленных.

Вот думаю, какую бы для этого структуру модифицировать, для более оптимальной работы.
Re: Структура для хранения значений "от... до"
От: marat321  
Дата: 21.04.11 11:17
Оценка:
Здравствуйте, FreeX, Вы писали:

FX>Вот думаю, какую бы для этого структуру модифицировать, для более оптимальной работы.


Отсортированное множество пар (итерируемое от меньшего к большему). Реализуется обычно через красно-черное дерево.
Легко искать перекрытия при вставке и при поиске диапазона. Легко проводить склейку и удаление диапазонов.
Re[2]: Структура для хранения значений "от... до"
От: FreeX  
Дата: 21.04.11 12:44
Оценка:
А в интернете есть где-нибудь код B-дерева для хранения ключей в виде регионов (от...до)?
что-то я никак не могу найти
Re[3]: Структура для хранения значений "от... до"
От: marat321  
Дата: 22.04.11 06:59
Оценка:
Здравствуйте, FreeX, Вы писали:

FX>А в интернете есть где-нибудь код B-дерева для хранения ключей в виде регионов (от...до)?

FX>что-то я никак не могу найти

Зачем B-tree? Бинарное дерево будет эффективнее. Не надо будет бегать по спискам в ноде.
Re: Структура для хранения значений "от... до"
От: VVishen  
Дата: 22.04.11 08:54
Оценка: 13 (1)
Здравствуйте, FreeX, Вы писали:

FX>Привет!


FX>нужно сделать структуру, которая хранила бы следующие диапазоны значений

FX>"занято от... и до..."
FX>соответственно запросы должны быть типа
FX>AddRange(int begin, int end); — добавить
FX>HaveRange(int begin, int end); — есть ли этот диапазон целиком в добавленных, и если нет, то вернуть список диапазонов которых нет в добавленных.

FX>Вот думаю, какую бы для этого структуру модифицировать, для более оптимальной работы.


http://en.wikipedia.org/wiki/Interval_tree
http://en.wikipedia.org/wiki/Segment_tree

Есть готовое, например http://www.cgal.org/Manual/3.3/doc_html/cgal_manual/SearchStructures_ref/Class_Segment_tree_k.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.