Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Лекция 11. Деревья отрезков (Interval trees)
1. Лекция 11Деревья отрезков(Interval trees)
КурносовМихаил Георгиевич
E-mail: mkurnosov@gmail.com
WWW: www.mkurnosov.net
Курс “Алгоритмы и структуры данных”
Сибирский государственный университет телекоммуникаций и информатики (Новосибирск)
Осенний семестр, 2014
2. Отрезки и интервалы
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. Представление отрезков
3
Представим отрезок iкак объект со следующими атрибутами:
i.low–левый, нижний конец отрезка(low endpoint)
i.high–правый, верхний конец отрезка(high endpoint)
[
]
i.low
i.high
4. Трихотомия отрезков
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)
5. Дерево отрезков (Interval tree)
5
Дерево отрезков (interval tree) –это красно-черное дерево, в котором каждый узел содержит:
Интервал, заданный полями low, high(своими границами)
Поле max–максимальное значение всех конечных точек отрезков (поля high), хранящихся в поддереве узла
указатели leftи right
Ключом поиска в дереве являетcе поле low
6. Дерево отрезков (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.)
7. Дерево отрезков (Interval tree)
7
Дерево отрезков (interval tree) –это красно-черное дерево, каждый узел которого содержит отрезок [low, high]
Дерево из 10 интервалов(CLRS, 3ed.)
8. Дерево отрезков (Interval tree)
8
Дерево отрезков (interval tree) –это красно-черное дерево, каждый узел которого содержит отрезок [low, high]
Дерево из 10 интервалов(CLRS, 3ed.)
9. Поиск отрезка (Lookup)
9
functionIntervalTreeLookup(tree, interval)
node = tree
whilenode != nulland IsOverlaps(interval, node) = Falsedo
ifnode.left!= nulland node.left.max>= interval.lowthen
// Отрезок interval левее отрезка node
node = node.left
else
node = node.right
end if
end while
return node
endfunction
TLookup= O(logn)
10. Вставка отрезка (Insert)
10
1.Отыскиваем лист для вставки узла (поиск по полю low)
2.Создаем лист красного цвета
3.Восстанавливаем свойства красно-черного дерева (6 случаев) –поднимаемся от созданного листа к корню
Для каждого узла корректируем значение поля max
node.max= max(node.high, node.left.max, node.right.max)
Вычислительная сложность вставки отрезка –O(logn)
11. Удаление отрезка (Delete)
11
1.Отыскиваем лист для удаления (поиск по полю low)
2.Удаляем лист
3.Восстанавливаем свойства красно-черного дерева
Для каждого узла корректируем значение поля max
node.max= max(node.high, node.left.max, node.right.max)
Вычислительная сложность удаления отрезка –O(logn)