Способы хранения и алгоритмы обработки различных структур в реляционной БД Списки, деревья, графы

Содержание

Слайд 2

Простой
Индексированный список
Связный и двусвязный список

Списки

Простой Индексированный список Связный и двусвязный список Списки

Слайд 3

Добавление элемента в начало/конец/внутрь
Перемещение элемента вперед/назад
Удаление элемента
Выборка диапазона элементов (с/по)
Поиск предыдущего/следующего элемента

Операции

Добавление элемента в начало/конец/внутрь Перемещение элемента вперед/назад Удаление элемента Выборка диапазона элементов
со списками

Слайд 4

Добавление:
Находится нужный индекс и делается вставка с пересчетом индексов последующих элементов списка
Перемещение:
Старый

Добавление: Находится нужный индекс и делается вставка с пересчетом индексов последующих элементов
индекс = Индекс перемещаемого элемента
Индекс перемещаемого элемента = Индекс новой позиции
Изменяем индексы элементов между Индексом новой позиции и Старым индексом (или наоборот)

Списки. Индексированный список

Слайд 5

Удаление:
Изменяем индексы последующих элементов после удаляемого
Выборка диапазона:
Запрос элементов с индексами между индексами

Удаление: Изменяем индексы последующих элементов после удаляемого Выборка диапазона: Запрос элементов с
крайних элементов
Следующий/предыдущий:
Запрос элемента с индексом на единицу большим/меньшим

Списки. Индексированный список

Слайд 6

Преимущества:
Простота выборок
Простота хранения
Недостатки:
Изменение списка требует небольшой обработки остальных элементов
Варианты:
Индекс может быть например

Преимущества: Простота выборок Простота хранения Недостатки: Изменение списка требует небольшой обработки остальных
датой

Списки. Индексированный список

Слайд 7

Добавление в начало:
Во вставляемом элементе указываем на первый и помечаем его первым
Добавление

Добавление в начало: Во вставляемом элементе указываем на первый и помечаем его
в конец:
Находим последний элемент и указываем на вставляемый
Добавление внутрь:
Находим элемент после которого нужно добавить
Во вставляемом элементе указываем следующий из найденного
В найденном элементе указываем на вставляемый

Списки. Связный список

Слайд 8

Перемещение:
Находим предыдущий элемент от перемещаемого
В найденном элементе указываем на следующий элемент из

Перемещение: Находим предыдущий элемент от перемещаемого В найденном элементе указываем на следующий
перемещаемого
Если не нашли нет, значит помечаем следующий элемент как первый
Делаем вставку перемещаемого элемента в нужную позицию списка
Удаление:
Находим предыдущий элемент от удаляемого
В найденном элементе указываем на следующий элемент из удаляемого
Если не нашли нет, значит помечаем следующий элемент как первый

Списки. Связный список

Слайд 9

Выборка диапазона:
В цикле начиная с начала диапазона по одному выбираем следующий элемент

Выборка диапазона: В цикле начиная с начала диапазона по одному выбираем следующий
пока не конец диапазона
Следующий:
Выбираем из указателя в элементе
Предыдущий:
Если это не первый элемент, то выбрать элемент в котором есть указатель на текущий

Списки. Связный список

Слайд 10

Преимущества:
Относительная простота изменения списка
Недостатки:
Сложная навигация по списку и выборки
Варианты:
Связующим полем может быть

Преимущества: Относительная простота изменения списка Недостатки: Сложная навигация по списку и выборки
дата

Списки. Связный список

Слайд 11

Смежные вершины (Adjacency List)
Материализованный путь (Materialized Path)
Вложенные множества (Nested Set)

Деревья

Смежные вершины (Adjacency List) Материализованный путь (Materialized Path) Вложенные множества (Nested Set) Деревья

Слайд 12

Добавление узла
Перемещение узла
Удаление узла
Выборка пути от узла до корня
Выборка ветки дерева
Выборка узлов

Добавление узла Перемещение узла Удаление узла Выборка пути от узла до корня
уровня
Выборка конечных узлов
Выборка соседних узлов

Операции с деревьями

Слайд 13

Добавление:
По аналогии со связным списком
Перемещение:
Удаление из связного списка
Вставка в связный список
Удаление:
Удаление из

Добавление: По аналогии со связным списком Перемещение: Удаление из связного списка Вставка
связного списка

Деревья. Смежные вершины

Слайд 14

Выборка пути от узла до корня
В цикле выбираем родителя текущего узла, затем

Выборка пути от узла до корня В цикле выбираем родителя текущего узла,
родителя делаем текущим узлом и продолжаем до корня
Выборка ветки дерева относительно узла:
Выбираем всех детей для текущего узла затем в цикле по детям выполняем рекурсивно такой же выбор детей

Деревья. Смежные вершины

Слайд 15

Выборка конечных узлов:
Выбираем текущим узел корня дерева
Ищем всех, у кого являемся родителем
Если

Выборка конечных узлов: Выбираем текущим узел корня дерева Ищем всех, у кого
не нашли таких узлов, то добавляем текущий узел в выбранные
Если нашли, то в цикле рекурсивно выполняем с п.2) для найденных узлов

Деревья. Смежные вершины

Слайд 16

Выборка уровня дерева:
Выбираем текущим узел корня дерева
Если достигнут нужный уровень, то добавляем

Выборка уровня дерева: Выбираем текущим узел корня дерева Если достигнут нужный уровень,
узел в выбранные
Ищем всех, у кого являемся родителем, затем в цикле рекурсивно выполняем с п.2) для найденных узлов
Выборка соседних узлов:
Выбрать узлы у которых родитель совпадает с текущим узлом

Деревья. Смежные вершины

Слайд 17

Преимущества:
Простота хранения
Простота изменения
Недостатки:
Сложность работы с ветками
Сложность работы с уровнями
Сложность определения принадлежности к

Преимущества: Простота хранения Простота изменения Недостатки: Сложность работы с ветками Сложность работы
родителям/детям

Деревья. Смежные вершины

Слайд 18

Добавление:
Находим место и путь в дереве для вставки
В добавляемом узле указывается полный

Добавление: Находим место и путь в дереве для вставки В добавляемом узле
путь
Перемещение:
Находим новое место и путь в дереве для вставки
У перемещаемого узла и всех его дочерних узлов изменяется полный путь
Удаление:
Удаление узла

Деревья. Материализованный путь

Слайд 19

Выборка пути от узла до корня
Выбираем те узлы дерева, в которых полный

Выборка пути от узла до корня Выбираем те узлы дерева, в которых
путь является началом полного пути заданного узла
Выборка ветки дерева относительно узла:
Выбираем те узлы, у которых полный путь начинается с полного пути заданного узла

Деревья. Материализованный путь

Слайд 20

Выборка конечных узлов:
Выбрать те узлы, по которым не найдется узлов с полным

Выборка конечных узлов: Выбрать те узлы, по которым не найдется узлов с
путем начинающимся с полного пути текущего узла
Выборка уровня дерева:
Выбрать узлы, у которых в полном пути присутствует элемент искомого уровня
Выборка соседних узлов:
Выбрать узлы, у которых полный путь совпадает с заданным узлом за исключением последнего элемента пути

Деревья. Материализованный путь

Слайд 21

Преимущества:
Простота работы с ветками
Простота определения принадлежности к родителям/детям
Недостатки:
Сложность работы с уровнями
Небольшая сложность

Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность
в изменении
Варианты:
Добавить атрибут уровня

Деревья. Материализованный путь

Слайд 22

Добавление:
Пересчет узлов дерева находящихся правее добавляемого узла
Перемещение:
Пересчет узлов дерева находящихся между начальной

Добавление: Пересчет узлов дерева находящихся правее добавляемого узла Перемещение: Пересчет узлов дерева
позицией перемещаемого элемента и конечной позицией (или наоборот)
Удаление:
Пересчет узлов дерева находящихся правее удаляемого узла

Деревья. Вложенные множества

Слайд 23

Выборка пути от узла до корня
Выбираем те узлы дерева, у которых правое

Выборка пути от узла до корня Выбираем те узлы дерева, у которых
число больше правого числа и левое число меньше левого числа заданного узла
Выборка ветки дерева относительно узла:
Выбираем те узлы, у которых
левое число находится между
левым и правым числом
заданного узла

Деревья. Вложенные множества

Слайд 24

Выборка конечных узлов:
Выбрать те узлы, у которых разница между левым и правым

Выборка конечных узлов: Выбрать те узлы, у которых разница между левым и
числом равна 1
Выборка уровня дерева:
Алгоритма нет! (я не знаю)
Выборка соседних узлов:
Постепенно выбирать узлы, у которых левое число отличается на 1 от правого числа начального элемента и у которых правое число отличается на 1 от левого числа начального элемента

Деревья. Вложенные множества

Слайд 25

Преимущества:
Простота работы с ветками
Простота определения принадлежности к родителям/детям
Недостатки:
Сложность работы с уровнями
Сложность в

Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность
изменении
Варианты:
Добавить атрибут уровня

Деревья. Вложенные множества

Слайд 26

Список ребер

Графы

Список ребер Графы

Слайд 27

Добавление вершины/ребра
Перемещение вершины/ребра
Удаление вершины/ребра
Получение всех вершин/ребер родителей
Получение всех вершин/ребер потомков
Поиск пути между

Добавление вершины/ребра Перемещение вершины/ребра Удаление вершины/ребра Получение всех вершин/ребер родителей Получение всех
вершинами

Операции с графами

Слайд 28

Добавление:
Добавление ребер ведущих к и из вершины
Перемещение:
Удаление ребер ведущих к и из

Добавление: Добавление ребер ведущих к и из вершины Перемещение: Удаление ребер ведущих
перемещаемой вершине
Добавление ребер ведущих к и из новой позиции вершины
Удаление:
Удаление ребер ведущих к и из удаляемой вершины

Графы. Список ребер

Слайд 29

Получение родителей:
Находим вершины приводящие к текущей вершине, включаем их в список просмотренных

Получение родителей: Находим вершины приводящие к текущей вершине, включаем их в список
вершин
В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока ест вершины

Графы. Список ребер

Слайд 30

Получение потомков:
Находим вершины выводящие из текущей вершины, включаем их в список просмотренных

Получение потомков: Находим вершины выводящие из текущей вершины, включаем их в список
вершин
В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока есть вершины

Графы. Список ребер

Слайд 31

Получение пути:
Аналогично процессу получения родителей для начальной вершины, но ищем до получения

Получение пути: Аналогично процессу получения родителей для начальной вершины, но ищем до
конечной вершины
Или аналогично процессу получения потомков для начальной вершины, но ищем до получения конечной вершины

Графы. Список ребер

Слайд 32

Преимущества:
Простота ведения
Недостатки:
Сложность поиска пути
Сложность поиска родителей и потомков
Варианты:
Список достижимости

Графы. Список ребер

Преимущества: Простота ведения Недостатки: Сложность поиска пути Сложность поиска родителей и потомков

Слайд 33

Графы. Список достижимости

Графы. Список достижимости

Слайд 34

Добавление:
Добавление ребра
Добавление всех путей ведущих по этому ребру
Перемещение:
Удаление ребра с зависимыми путями
Добавление

Добавление: Добавление ребра Добавление всех путей ведущих по этому ребру Перемещение: Удаление
ребра с зависимыми путями
Удаление:
Удаление ребра и всех зависимых
путей

Графы. Список достижимости

Слайд 35

Получение родителе:
Выбрать все «ребра» и их вершины по которым достижима заданная вершина
Получение

Получение родителе: Выбрать все «ребра» и их вершины по которым достижима заданная
потомков:
Выбрать все «ребра» и их вершины которые достижимы из заданной вершины
Получение пути:
Найти «ребро» в котором
присутствуют обе вершины
В цикле построить полный путь

Графы. Список достижимости

Слайд 36

Преимущества:
Пути строятся при ведении графа
Простота навигации по графу
Недостатки:
Небольшая сложность ведения графа

Графы. Список

Преимущества: Пути строятся при ведении графа Простота навигации по графу Недостатки: Небольшая
достижимости