LINUX.ORG.RU

нужна структура данных


0

1

Всем привет. Собственно, задача в создании никоего map'а, для хранения key, value, но соль в том, что key это некий промежуток значений, при этом границы могут быть как открытыми, так и закрытыми, тоесть дожно быть что-то навроде

M = [1, 10) -> a
[10, 20) -> b
[20, 30) -> c

соотвественно поиск будет давать следующие результаты:

find(1,M) = a
find(15,M) = b
find(20,M) = c
find(30,M) – EXCEPTION

есть идеи? мне почему-то кажется что здесь напрашиваются деревья, но какие лучше? и как делать поиск? я пока не могу придумать...

всем заранее спасибо.

★★★

Последнее исправление: Cy6erBr4in (всего исправлений: 1)
Ответ на: комментарий от ly

ну d и будет... [ и ] - это значит что крайнее значение тоже матчится, а ( и ) значит что крайнее значение не матчится...

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от do0dlez

если это имелось в виду, то логично предположить что в нашем мапе не должно быть пересекающихся интервалов, так что такого варианта быть не может.

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от pacify

дада, видимо интервальные деревья спасут меня...

/me ушел читать Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein - Introduction to Algorithms, Third Edition - 2009.pdf

Cy6erBr4in ★★★
() автор топика

Структура данных эта под что затачивается? Быстрый поиск, быстрое изменение, быстрое увеличение без удалений?

А то может вам хеш-таблица (map) и не нужна тут.

amomymous ★★★
()
Ответ на: комментарий от amomymous

тут в основном поиск, тоесть однократно (ну или очень редко) заполняется «база», а потом делается многократный поиск.

Вообщем в вышеупомянутой книге нашел решение - Interval Tree которое делается на основе Red-Black Tree (можно и любое другое сбалансированное дерево). Вообщем довольно увлекательно :)

всем спасибо, разобрался и реализовал.

Cy6erBr4in ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.