Лекция 11. Деревья отрезков (interval trees)
DESCRIPTION
Деревья отрезков (Interval trees)TRANSCRIPT
Лекция 11Деревья отрезков(Interval trees)
Курносов Михаил Георгиевич
E-mail: [email protected]: www.mkurnosov.net
Курс “Алгоритмы и структуры данных”Сибирский государственный университет телекоммуникаций и информатики (Новосибирск)Осенний семестр, 2014
Отрезки и интервалы
2
Отрезок (замкнутый интервал, closed interval) – это множество действительных чисел, которое записывается как [t1, t2] и определяется следующим образом
{𝑡 ∈ ℝ ∶ 𝑡1 ≤ 𝑡 ≤ 𝑡2}
Открытый интервал (open interval) – это множество действительных чисел, которое записывается как (t1, t2) и определяется следующим образом
{𝑡 ∈ ℝ ∶ 𝑡1 < 𝑡 < 𝑡2}
Полуоткрытый интервал (half-open interval) – это множество действительных чисел, которое записывается как [t1, t2) или (t1, t2]и определяется следующим образом
{𝑡 ∈ ℝ ∶ 𝑡1 ≤ 𝑡 < 𝑡2} или {𝑡 ∈ ℝ ∶ 𝑡1 < 𝑡 ≤ 𝑡2}
Представление отрезков
3
Представим отрезок i как объект со следующими атрибутами:
i.low – левый, нижний конец отрезка (low endpoint)
i.high – правый, верхний конец отрезка (high endpoint)
[ ]i.low i.high
Трихотомия отрезков
4
Для любых двух отрезков a и b выполняется только одно из трех свойств:
a) отрезки a и b перекрываются (overlap): a.low ≤ b.high и b.low ≤ a.high
b) отрезок a находится левее b: a.high < b.low
c) отрезок a находится правее b: a.low > b.high
a
b
a
b
a
b
a
b
a) overlap
a b b a
b) c)
Дерево отрезков (Interval tree)
5
Дерево отрезков (interval tree) – это красно-черное дерево, в котором каждый узел содержит:
Интервал, заданный полями low, high(своими границами)
Поле max – максимальное значение всех конечных точек отрезков (поля high), хранящихся в поддереве узла
указатели left и right
Ключом поиска в дереве являетcе поле low
Дерево отрезков (Interval tree)
6
Дерево отрезков (interval tree) – это красно-черное дерево, каждый узел которого содержит отрезок [low, high]
Операции
Insert(T, a) – добавляет интервал a в дерево T
Delete(T, a) – удаляет интервал a из дерева T
Lookup(T, a) – осуществляет поиск отрезка x в дереве Tтакого, что x перекрывается с a
(CLRS, 3ed.)
Дерево отрезков (Interval tree)
7
Дерево отрезков (interval tree) – это красно-черное дерево, каждый узел которого содержит отрезок [low, high]
Дерево из 10 интервалов(CLRS, 3ed.)
Дерево отрезков (Interval tree)
8
Дерево отрезков (interval tree) – это красно-черное дерево, каждый узел которого содержит отрезок [low, high]
Дерево из 10 интервалов(CLRS, 3ed.)
Поиск отрезка (Lookup)
9
function IntervalTreeLookup(tree, interval)
node = tree
while node != null and IsOverlaps(interval, node) = False do
if node.left != null and node.left.max >= interval.low then
// Отрезок interval левее отрезка node
node = node.left
else
node = node.right
end if
end while
return node
end function TLookup = O(logn)
Вставка отрезка (Insert)
10
1. Отыскиваем лист для вставки узла (поиск по полю low)
2. Создаем лист красного цвета
3. Восстанавливаем свойства красно-черного дерева (6 случаев) – поднимаемся от созданного листа к корню
Для каждого узла корректируем значение поля max
node.max = max(node.high, node.left.max, node.right.max)
Вычислительная сложность вставки отрезка – O(logn)
Удаление отрезка (Delete)
11
1. Отыскиваем лист для удаления (поиск по полю low)
2. Удаляем лист
3. Восстанавливаем свойства красно-черного дерева
Для каждого узла корректируем значение поля max
node.max = max(node.high, node.left.max, node.right.max)
Вычислительная сложность удаления отрезка – O(logn)
Задания
12
Прочитать в [CLRS, 3ed] “14.3 Деревья отрезков”