Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уровни описания структур данных.docx
Скачиваний:
10
Добавлен:
22.09.2019
Размер:
62.72 Кб
Скачать
  1. Списки общего вида. Представление и обработка графов.

Графом называют некоторое подмножество декартова произведения двух множеств. В программировании задачи с использованием графов встречаются при проектировании электрических схем, искусственном интеллекте и тп. Одна из проблем связанных с графами является поиск путей между вершинами графа. Одним из способов представления графа в ЭВМ является матрица смежности. Это булевская матрица, элемент на позиции I,j истинен тогда, когда из вершины I в вершину j исходит дуга, и ложен в противном случае. Если граф неориентированный, то матрица смежности будет симметричной.

Для нахождения путей в графе используют операции над матрицами смежности. Для булевых матриц определены операции конъюнкции и дизъюнкции (аналоги умножения и сложения). Путь в матрице между элементами будет существовать тогда, когда элемент с индексами матрица M+ = будет истинен. Эффективным алгоритмом поиска пути в графе является алгоритм Уоршалла (с 3мя вложенными циклами) со сложностной оценкой О(N^3).

Также, граф с К вершинами можно представить с помощью К списков, каждый из которых соответствует вершине графа и содержит номера ее смежных вершин. Если граф меняется во время обработки, то удобно использовать списки. В основной список включены все вершины графа. С каждым узлом графа связан свой список дуг.

Алгоритмы на графах:

Поиск в глубину. Путь продолжается налево до тех пор, пока не будет достигнут лист или не будет найдена цель. Если лист достигнут, то путь поворачивает назад, поднимается на один уровень вверх, затем продолжается направо, потом снова влево, пока не встретится цель или очередной лист. А вся эта процедура продолжается до тех пор, пока не будет найдена цель или не проверена последняя вершина области поиска.

Поиск в ширину выполняется в следующем порядке: началу обхода s приписывается метка 0, смежным с ней вершинам — метка 1. Затем поочередно рассматривается окружение всех вершин с метками 1, и каждой из входящих в эти окружения вершин приписываем метку 2 и т.д.

Если исходный граф связный, то поиск в ширину пометит все его вершины. Дуги вида (i, i+1) порождают остовный бесконтурный орграф, содержащий в качестве своей части остовное ордерево, называемое поисковым деревом.

Поиск в ширину производится при помощи структуры очередь.

  1. Понятие рекурсии. Рекурсия и итерация. Примеры.

Рекурсивным называется объект, частично состоящий или определяемый с помощью самого себя. Рекурсия позволяет конструктивно определить бесконечное множество объектов с помощью небольшого количества правил. Программы, как и функции могут быть описаны рекурсивно. Если программа вызывает себя в теле самой программы, то такая рекурсия прямая. Если же программа вызывает себя посредством другой программы – то рекурсия косвенная. Рекурсия углубляющееся многократное самоприменение, своеобразное повторение, аналогичное циклу. Прибегая к рекурсии для сведения задачи к более простой необходимо определить условие завершения рекурсии. Простейшие примеры применения рекурсии это вычисление факториала и вычисление н-ного члена ряда Фибоначчи. Любую функцию, использующую рекурсию можно заменить циклом или стеком. Хвостовую рекурсию всегда можно свести к итерации. Итерация менее ресурсоемка, нежели чем рекурсия. Рекурсия на каждом своем вызове порождает локальные копии передаваемых значений, тем самым экранируя и откладывая в стек локальные переменные с верхнего уровня рекурсии.

Схема рекурсивных алгоритмов:

P = if B then R[S,P] end

P = R[S, if B then P end]

Где R – композиция из множества операторов S, не содержащих рекурсию P, и саму рекурсивную программу Р.