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

Презентация:



Advertisements
Похожие презентации
Теория графов Основные определения. Дуга Пусть имеется множество вершин V={V 1,V 2,…,V n } и пусть на нем задано бинарное отношение Г V×V, – V i Г V j.
Advertisements

Структуры и алгоритмы обработки данных Лекция. Структуры. Связные списки. Заикин Олег Сергеевич zaikin.all24.org.
МОДЕЛИРОВАНИЕ ИЕРАРХИЙ СРЕДСТВАМИ РЕЛЯЦИОННОЙ СУБД AB C D FG E HI J NO K L RS M T U PQ.
Б-деревья Лекция 19. Б-деревья Б-деревья – сбалансированные деревья, обеспечивающие эффективное хранение информации на дисках и других устройствах с прямым.
Методика изучения темы «Информационные технологии». Электронные таблицы.
Физические модели баз данных Файловые структуры, используемые для хранения информации в базах данных.
Алгоритмы сканирования и обхода Лекция 3. Алгоритм сканирования графа Input: Орграф (граф) G и вершина s. Output: Множество R вершин, достижимых из s,
1 Массивы 2 Опр. Массивом называется совокупность однотипных данных, связанных общим именем. Основные характеристики массива: 1. Имя массива 2. Тип компонентов.
Лекция 7. Определение связности узлов коммутации сети связи на основе теории графов Учебные и воспитательные цели: 1.Уяснить алгоритмы определения связности.
Применение поиска на графах для решения задач о лабиринте Дегтярев Юрий гр. 3057/2.
Двусвязность Лекция 14. Связность компонент Граф G называется k-связным (k 1), если не существует набора из k-1 или меньшего числа узлов V` V, такого,
Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
Задание бинарных деревьев с помощью массивов Обходы деревьев.
Двоичные деревья поиска. Очередь с приоритетами Федор Царев Спецкурс «Олимпиадное программирование» Лекция , Санкт-Петербург, Гимназия.
V-множество вершин, E- множество ребер Граф - G(V, Е). Л. Эйлер 1736 г. G(V, Е, f) V,E – множества, отображение инциденции f: Е V&V множества Е в V&V Основы.
Теория графов. Теория графов – обширный самостоятельный раздел дискретной математики. Используется при проектировании компьютерных сетей, трубопроводов,
Теория графов Основные определения. Дуга Пусть имеется множество вершин V={V 1,V 2,…,V n } и пусть на нем задано бинарное отношение Г V×V, – V i Г V j.
Методика решения и оценивания задач «С1», «С2» Единого Государственного Экзамена.
Дерево это связный ациклический граф. Связность означает наличие путей между любой парой вершин, ацикличность отсутствие циклов и то, что между парами.
Методика изучения темы «Информационные технологии». Электронные таблицы.
Транксрипт:

Списки, деревья, графы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Список ребер РеброИз вершиныВ вершину 1AB 2AE 3BC 4BD 5DC 6CE ВершинаНаименование AУбил старушку BПоймала милиция CСуд DПопытался бежать EВиновен

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

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

Получение родителей: 1)Находим вершины приводящие к текущей вершине, включаем их в список просмотренных вершин 2)В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока ест вершины РеброИз вершиныВ вершину 1AB 2AE 3BC 4BD 5DC 6CE

Получение потомков: 1)Находим вершины выводящие из текущей вершины, включаем их в список просмотренных вершин 2)В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока есть вершины РеброИз вершиныВ вершину 1AB 2AE 3BC 4BD 5DC 6CE

Получение пути: Аналогично процессу получения родителей для начальной вершины, но ищем до получения конечной вершины Или аналогично процессу получения потомков для начальной вершины, но ищем до получения конечной вершины РеброИз вершиныВ вершину 1AB 2AE 3BC 4BD 5DC 6CE

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

РеброИз вершиныВ вершину Начальное ребро 1AB 2BC 3AC1 4BD 5AD1 6DC 7CE 8BE2 9AE3 10DE6 11AE

Добавление: Добавление ребра Добавление всех путей ведущих по этому ребру Перемещение: Удаление ребра с зависимыми путями Добавление ребра с зависимыми путями Удаление: Удаление ребра и всех зависимых путей РеброИз вершиныВ вершину Начальное ребро 1AB 2BC 3AC1 4BD 5AD1 6DC 7CE 8BE2 9AE3 10DE6 11AE

Получение родителе: Выбрать все «ребра» и их вершины по которым достижима заданная вершина Получение потомков: Выбрать все «ребра» и их вершины которые достижимы из заданной вершины Получение пути: Найти «ребро» в котором присутствуют обе вершины В цикле построить полный путь РеброИз вершиныВ вершину Начальное ребро 1AB 2BC 3AC1 4BD 5AD1 6DC 7CE 8BE2 9AE3 10DE6 11AE

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

Храните данные в базах данных … и регулярно делайте backup!