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

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

Jul 02, 2015

Download

Software

Деревья отрезков (Interval trees)
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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 Деревья отрезков”