12
Лекция 11 Деревья отрезков (Interval trees) Курносов Михаил Георгиевич E-mail: [email protected] WWW: www.mkurnosov.net Курс “Алгоритмы и структуры данных” Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) Осенний семестр, 2014

Лекция 11. Деревья отрезков (Interval trees)

Embed Size (px)

DESCRIPTION

Деревья отрезков (Interval trees)

Citation preview

Page 1: Лекция 11. Деревья отрезков (Interval trees)

Лекция 11Деревья отрезков(Interval trees)

Курносов Михаил Георгиевич

E-mail: [email protected]: www.mkurnosov.net

Курс “Алгоритмы и структуры данных”Сибирский государственный университет телекоммуникаций и информатики (Новосибирск)Осенний семестр, 2014

Page 2: Лекция 11. Деревья отрезков (Interval trees)

Отрезки и интервалы

2

Отрезок (замкнутый интервал, closed interval) – это множество действительных чисел, которое записывается как [t1, t2] и определяется следующим образом

{𝑡 ∈ ℝ ∶ 𝑡1 ≤ 𝑡 ≤ 𝑡2}

Открытый интервал (open interval) – это множество действительных чисел, которое записывается как (t1, t2) и определяется следующим образом

{𝑡 ∈ ℝ ∶ 𝑡1 < 𝑡 < 𝑡2}

Полуоткрытый интервал (half-open interval) – это множество действительных чисел, которое записывается как [t1, t2) или (t1, t2]и определяется следующим образом

{𝑡 ∈ ℝ ∶ 𝑡1 ≤ 𝑡 < 𝑡2} или {𝑡 ∈ ℝ ∶ 𝑡1 < 𝑡 ≤ 𝑡2}

Page 3: Лекция 11. Деревья отрезков (Interval trees)

Представление отрезков

3

Представим отрезок i как объект со следующими атрибутами:

i.low – левый, нижний конец отрезка (low endpoint)

i.high – правый, верхний конец отрезка (high endpoint)

[ ]i.low i.high

Page 4: Лекция 11. Деревья отрезков (Interval trees)

Трихотомия отрезков

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)

Page 5: Лекция 11. Деревья отрезков (Interval trees)

Дерево отрезков (Interval tree)

5

Дерево отрезков (interval tree) – это красно-черное дерево, в котором каждый узел содержит:

Интервал, заданный полями low, high(своими границами)

Поле max – максимальное значение всех конечных точек отрезков (поля high), хранящихся в поддереве узла

указатели left и right

Ключом поиска в дереве являетcе поле low

Page 6: Лекция 11. Деревья отрезков (Interval trees)

Дерево отрезков (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.)

Page 7: Лекция 11. Деревья отрезков (Interval trees)

Дерево отрезков (Interval tree)

7

Дерево отрезков (interval tree) – это красно-черное дерево, каждый узел которого содержит отрезок [low, high]

Дерево из 10 интервалов(CLRS, 3ed.)

Page 8: Лекция 11. Деревья отрезков (Interval trees)

Дерево отрезков (Interval tree)

8

Дерево отрезков (interval tree) – это красно-черное дерево, каждый узел которого содержит отрезок [low, high]

Дерево из 10 интервалов(CLRS, 3ed.)

Page 9: Лекция 11. Деревья отрезков (Interval trees)

Поиск отрезка (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)

Page 10: Лекция 11. Деревья отрезков (Interval trees)

Вставка отрезка (Insert)

10

1. Отыскиваем лист для вставки узла (поиск по полю low)

2. Создаем лист красного цвета

3. Восстанавливаем свойства красно-черного дерева (6 случаев) – поднимаемся от созданного листа к корню

Для каждого узла корректируем значение поля max

node.max = max(node.high, node.left.max, node.right.max)

Вычислительная сложность вставки отрезка – O(logn)

Page 11: Лекция 11. Деревья отрезков (Interval trees)

Удаление отрезка (Delete)

11

1. Отыскиваем лист для удаления (поиск по полю low)

2. Удаляем лист

3. Восстанавливаем свойства красно-черного дерева

Для каждого узла корректируем значение поля max

node.max = max(node.high, node.left.max, node.right.max)

Вычислительная сложность удаления отрезка – O(logn)

Page 12: Лекция 11. Деревья отрезков (Interval trees)

Задания

12

Прочитать в [CLRS, 3ed] “14.3 Деревья отрезков”