Надежость сети
Общее понятие графа, его виды и сущность вершинного покрытия. Написание точного алгоритма решения задачи о надежности сети, нахождение минимального покрытия. Реализация данного алгоритма на языке TurboC++. Код программы, решающий поставленную задачу.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.06.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего и профессионального образования
«Магнитогорский Государственный Технический Университет
им. Г.И.Носова»
Институт энергетики и автоматики
Кафедра вычислительной техники и программирования
Курсовая работа
по дисциплине: «Алгоритмы на сетях и графах»
на тему: «Надежность сети»
Исполнитель студент группы АВБ-12 Картавцев Е.П.
Проверил Файнштейн С.И.
Магнитогорск 2014
Оглавление
- Введение
- 1. Теоретическая часть
- 1.1 Понятия графа
- 1.2 Виды графов
- 1.3 Кратчайший путь в графе
- 1.4 Задача о кратчайшем пути с учетом дополнительных ограничений
- 1.5 Алгоритмы
- 2. Практическая часть
- 2.1 Постановка задачи
- 2.2 Алгоритм решения
- 2.3 Код программы
- Заключение
- Литература
- Введение
Курсовая работа - самостоятельно выполненная работа с элементами научного исследования.
Целью моей курсовой работы является углубление знаний по дисциплине, изучить тему «Графы», а так же «Алгоритмы на сетях и графах».
Вместе с тем известно, что это NP-полная задача. Для таких задач не известно эффективных алгоритмов, а накопленный к настоящему времени опыт делает правдоподобным предположение о том, что таких алгоритмов и не существует. Тем не менее, алгоритмы для подобных задач разрабатывались и продолжают разрабатываться, и в некоторых случаях они могут быть полезны. Все эти алгоритмы в той или иной форме осуществляют перебор вариантов (число которых может быть очень большим). Далее рассмотрим один из способов такого перебора для задачи о вершинном покрытие.
В курсовой работе будет рассмотрен точный алгоритм решения задачи о вершинном покрытии, а так же нахождение минимального покрытия. Помимо алгоритма будет освещены понятия графа, его виды и вершинного покрытия.
1. Теоретическая часть
1.1 Понятия графа
Для описания строения различных систем, состоящих из связанных между собой элементов, часто используют графические схемы, изображая элементы точками (кружками, прямоугольниками и т.д.), а связи между ними - линиями или стрелками, соединяющими элементы.
Термин «граф» неоднозначен, это легко обнаружить, сравнивая приводимые в разных книгах определения графа. Однако во всех этих определениях есть и общее. В любом случае граф состоит из двух множеств - множества вершин и множества ребер, причем для каждого ребра указанапара вершин, которые это ребро соединяет. Вершины и ребра называютсяэлементами графа[3].
1.2 Виды графов
Выделяют следующие виды графов.
Ориентированный граф (сокращённо орграф) G . Это упорядоченная пара G := (V, A), для которой выполнены следующие условия:
1. V -- это непустое множество вершин или узлов,
2. A -- это множество (упорядоченных) пар различных ребер, называемых дугами или ориентированными рёбрами.
Дуга - это упорядоченная пара вершин (v, w), где вершину v называют началом, а w - концом дуги. Можно сказать, что дуга vw ведёт от вершины v к вершине w.
Смешанный граф G. это граф, в котором некоторые рёбра могут быть ориентированными, а некоторые - неориентированными. Записывается упорядоченной тройкой G := (V, E, A), где V, E и A определены так же, как выше.
Ориентированный и неориентированный графы являются частными случаями смешанного.
Изоморфные графы. Граф G называется изоморфным графу H, если существует биекция f из множества вершин графа G в множество вершин графа H, обладающая следующим свойством: если в графе G есть ребро из вершины A в вершину B, то в графе H должно быть ребро из вершины f(A) в вершину f(B) и наоборот -- если в графе H есть ребро из вершины A в вершину B, то в графе G должно быть ребро из вершины в вершину
В случае ориентированного графа эта биекция также должна сохранять ориентацию ребра. В случае взвешенного графа биекция также должна сохранять вес ребра.
Двудольный граф.Двудольный граф (или биграф, или чётный граф) ? это граф G(V,E), такой что множество вершин V разбито на два непересекающихся подмножества V1 и V2, причём всякое ребро E инцидентно вершине из V1 и вершине из V2 (то есть соединяет вершину из V1 с вершиной из V2).
Мультиграф.Граф, в котором имеются кратные (параллельные) ребра.Мультиграф- это псевдограф без петель. Пример: пусть D=(V,X) - ориентированный граф,V={V1,V2},X={x1={V1,V2},x2={V1,V2}}. Тогда D=(V,X)-ориентированный мультиграф.
Простые графы ? не имеющие петель и кратных рёбер.
Полный граф. Простой граф, в котором каждая пара различных вершин смежна. Полный граф с n вершинами имеет n(n ? 1) / 2 рёбер и обозначается Kn. Является регулярным графом степени n ? 1 (Рис.7).
Псевдограф. Граф с кратными ребрами и петлями. Пример : пусть D=(V,X) - ориентированный граф, V={V1,V2},X={x1={V1,V2},x2={V1,V2},x3={V1,V2},x4={V2,V2}. Тогда D=(V,X) - ориентированный псевдограф.
1.3 Кратчайший путь в графе
Задача поиска кратчайшего пути на графе может быть определена для неориентированного, ориентированного или смешанного графа. Далее будет рассмотрена постановка задачи в самом простом виде для неориентированного графа. Для смешанного и ориентированного графа дополнительно должны учитываться направления ребер.
Граф представляет собой совокупность непустого множества вершин и ребер (наборов пар вершин). Две вершины на графе смежны, если они соединяются общим ребром. Путь в неориентированном графе представляет собой последовательность вершин , таких что смежна с для . Такой путь называется путем длиной из вершины в ( указывает на номер вершины пути и не имеет никакого отношения к нумерации вершин на графе).
Пусть -- ребро соединяющее две вершины: и . Дана весовая функция , которая отображает ребра на их веса, значения которых выражаются действительными числами, и неориентированный граф . Тогда кратчайшим путем из вершины в вершину будет называться путь (где и ), который имеет минимальное значение суммы Если все ребра в графе имеют единичный вес, то задача сводится к определению наименьшего количества обходимых ребер.
Существуют различные постановки задачи о кратчайшем пути:
· Задача о кратчайшем пути в заданный пункт назначения. Требуется найти кратчайший путь в заданную вершину назначения t, который начинается в каждой из вершин графа (кроме t). Поменяв направление каждого принадлежащего графу ребра, эту задачу можно свести к задаче о единой исходной вершине (в которой осуществляется поиск кратчайшего пути из заданной вершины во все остальные).
· Задача о кратчайшем пути между заданной парой вершин. Требуется найти кратчайший путь из заданной вершины u в заданную вершину v.
· Задача о кратчайшем пути между всеми парами вершин. Требуется найти кратчайший путь из каждой вершины u в каждую вершину v. Эту задачу тоже можно решить с помощью алгоритма, предназначенного для решения задачи об одной исходной вершине, однако обычно она решается быстрее.
В различных постановках задачи, роль длины ребра могут играть не только сами длины, но и время, стоимость, расходы, объем затрачиваемых ресурсов (материальных, финансовых, топливно-энергетических и т. п.) или другие характеристики, связанные с прохождением каждого ребра. Таким образом, задача находит практическое применение в большом количестве областей (информатика, экономика, география и др.).
1.4 Задача о кратчайшем пути с учетом дополнительных ограничений
Задача о кратчайшем пути очень часто встречается в ситуации, когда необходимо учитывать дополнительные ограничения. Наличие их может значительно повысить сложность задачи[2]. Примеры таких задач:
1. Кратчайший путь, проходящий через заданное множество вершин. Можно рассматривать два ограничения: кратчайший путь должен проходить через выделенное множество вершин, и кратчайший путь должен содержать как можно меньше невыделенных вершин. Первое из них хорошо известна в теорииисследования операций[3].
2. Минимальное покрытие вершин ориентированного графа путями. Осуществляется поиск минимального по числу путей покрытия графа, а именно подмножества всех s-t путей, таких что, каждая вершина ориентированного графа принадлежит хотя бы одному такому пути[4].
3. Задача о требуемых путях. Требуется найти минимальное по мощности множество s-t путей такое, что для любого найдется путь , накрывающий его. -- множество некоторых путей в ориентированном графе G[5].
4. Минимальное покрытие дуг ориентированного графа путями. Задача состоит в отыскании минимального по числу путей подмноржества всех путей, такого, что каждая дуга принадлежит хотя бы одному такому пути. При этом возможно дополнительное требование о том, чтобы все пути исходили из одной вершины[6].
1.5 Алгоритмы
В связи с тем, что существует множество различных постановок данной задачи, есть наиболее популярные алгоритмы для решения задачи поиска кратчайшего пути на графе:
· Алгоритм Дейкстры находит кратчайший путь от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса[7].
· Алгоритм Беллмана -- Форда находит кратчайшие пути от одной вершины графа до всех остальных во взвешенном графе. Вес ребер может быть отрицательным.
· Алгоритм поиска A* находит маршрут с наименьшей стоимостью от одной вершины (начальной) к другой (целевой, конечной), используя алгоритм поиска по первому наилучшему совпадению на графе.
· Алгоритм Флойда -- Уоршелла находит кратчайшие пути между всеми вершинами взвешенного ориентированного графа[7].
· Алгоритм Джонсона находит кратчайшие пути между всеми парами вершин взвешенного ориентированного графа.
· Алгоритм Ли (волновой алгоритм) основан на методе поиска в ширину. Находит путь между вершинами s и t графа (s не совпадает с t), содержащий минимальное количество промежуточных вершин (ребер). Основное применение -- трассировки электрических соединений на кристаллах микросхем и на печатных платах. Так же используется для поиска кратчайшего расстояния на карте в стратегических играх.
· Поиск кратчайшего пути на основе алгоритма Килдала[8].
В работе (Черкасский и др., 1993)[9] представлено ещё несколько алгоритмов для решения этой задачи.
2. Практическая часть
2.1 Постановка задачи
УСЛОВИЕ. Заданы граф G=(V, E), подмножество V' э V, для каждого eэ E рациональное число p(e), 0 - вероятность исправности, положительное рациональное число q.
ВОПРОС. Верно ли, что с вероятностью, не меньшей q, любые две вершины из V соединены хотя бы одним путем, не содержащим неисправных рёбер?
2.2 Алгоритм решения
Задаем граф. Составляем список инцидентности. С главной программы вызываем рекурсивную функцию поиска минимального пути с наибольшей надежностью (P). Проходя по вершинам каждыйi-ый объект проверяется на допустимость. Затем внутри одной процедуры допустимая вершина включается в выборку, и с этой вершиной рекурсивно генерируются всевозможные решения и лучшее запоминается как оптимальное. После этого происходит возврат и i-уювершина удаляется из выборки. Но, прежде чем пытаться получить решения без i-ой вершины, проверим можно ли, не включив эту вершину, получить решение лучше, чем найденное оптимальное с i-ой. Если нет - то не стоит пытаться.
2.3 Код программы
Код программы, решающий поставленную задачу представлен ниже. На рисунке 2 показан результат выполнения программы.
//---------------------------------------------------------------------------
#include <vcl.h>
#include "File1.h"
#pragma hdrstop
//---------------------------------------------------------------------------
externint N = 0;
externbool *nov = NULL;
externint *OptX = NULL;
externint *X = NULL;
extern float OptCost = 0;
extern float cost = 1;
#pragma argsused
//----------------------------------------------------------------------------
void P(int v, int f, std::vector<std::vector<Ver>>vq)
{
for(inti=0; i<vq[v].size();i++)
{
if (v == f)
{
OptX = X;
OptCost = cost;
return;
}
else
if ((nov[v]) && (nov[vq[v][i].numb-1]) && (cost*vq[v][i].ves>OptCost))
{
X[v+1] = vq[v][i].numb;
nov[v] = false;
cost = cost*vq[v][i].ves;
P(vq[v][i].numb - 1, f, vq);
/**************************/
nov[v] = true;
cost = cost/vq[v][i].ves;
}
}
}
//----------------------------------------------------------------------------
int main(intargc, char* argv[])
{
//----------------------------------------------------------------------------
Vertmp;
ifstream source;
source.open("Input.txt");
try
{
if (!source.is_open()) throw sException("Source not exist!");
}
catch (sException e)
{
cout<<e.mes<<endl;
cin.get();
return 0;
}
char temp[80];
source.getline(temp, 2);
N = atoi(temp);
cout<<N<<endl<<endl;
//----------------------------------------------------------------------------
std::vector<std::vector<Ver>>vq(N);
while(!source.eof())
{
int number, count;
if (source.getline(temp, sizeof(temp)))
{
char *tok;
tok = strtok(temp, " ");
number = StrToInt(tok);
--number;
tok = strtok(NULL, " ");
count = StrToInt(tok);
for (inti=0; i<count; i++)
{
tok = strtok(NULL, " ");
tmp.numb = StrToInt(tok);
tok = strtok(NULL, " ");
tmp.ves = StrToFloat(tok);
vq[number].push_back(tmp);
}
}
}
source.close();
//----------------------------------------------------------------------------
nov = new bool[N];
X = new int[N];
OptX = new int[N];
int s = 0; int f = 0;
for(inti=0;i<N;i++) nov[i]= true;
cout<<"Input START: ";
cin>>s;
cout<<endl<<"Input FINISH: ";
cin>>f;
cout<<endl;
--s;
--f;
P(s,f,vq);
//----------------------------------------------------------------------------
system("Pause");
inti = 0;
//while(OptX[i]!=f) {cout<<OptX[i]<<" "; ++i;}
cout<<"Optimal way ("<<OptCost<<") :"<<endl;
system("Pause");
return 0;
}
//---------------------------------------------------------------------------
Решение задачи
Заключение
В курсовой работе был рассмотрен точный алгоритм решения задачи о надёжности сети. Алгоритм был реализован на языке TurboC++. В теоретической части рассмотрены понятия графа, виды графа и понятие вершинного покрытия.
сеть надежность алгоритм
Литература
1. В.Е. Торчинский, С.И. Файнштейн Структуры и алгоритмы обработки данных на ЭВМ: Учеб. пособие. Магнитогорск: ГОУ ВПО «МГТУ», 2007. 139 с.
2. Алексеев В.В., Гаврилов Г.П., Сапоженко А.А. (ред.) Теория графов. Покрытия, укладки, турниры. Сборник переводов - М. : Мир, 1974 - 224 с.
3. Алексеев В.Е., Таланов В.А. Графы. Модели вычислений. Структурыданных: Учебник. - Нижний Новгород: Изд-во ННГУ, 2005. 307 с.
Размещено на Allbest.ru
Подобные документы
Алгоритм сортировки Шейкер: математическое описание задачи и описание алгоритма. Алгоритм покрытия: построение одного кратчайшего покрытия. Описание схемы и работы алгоритма на графах: нахождение кратчайшего пути. Контрольные примеры работы алгоритмов.
курсовая работа [43,8 K], добавлен 19.10.2010Области применения теории графов. Алгоритм решения задачи поиска инвариантного и полного графа. Реализация программы с графическим интерфейсом пользователя на основе алгоритма. Реализация редактора графа и вывод полученных результатов в понятной форме.
курсовая работа [493,3 K], добавлен 27.12.2008Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Описание методов нахождения и построения эйлеровых циклов в графах при раскрытии содержания цикломатических чисел и фундаментальных циклов. Изучение алгоритма решения задачи "Китайского почтальона" и разработка программы, решающей задачу на языке Си.
курсовая работа [924,3 K], добавлен 09.01.2011Основные понятия и определения теории графов: теоремы и способы задания графа, сильная связность графов. Построение блок-схем алгоритма, тестирование разработанного программного обеспечения, подбор тестовых данных, анализ и исправление ошибок программы.
курсовая работа [525,6 K], добавлен 14.07.2012Основные принципы разработки программ. Разработка алгоритма решения задачи о пересечении двухвыпуклым многоугольником. Реализация разработанного алгоритма на языке программирования. Тесты для проверки работы программы. Графическая иллюстрация решения.
курсовая работа [53,3 K], добавлен 20.11.2015Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Транспортная задача как одна из самых распространенных специальных задач линейного программирования: понятие, основное назначение. Формальное описание метода минимального элемента. Характеристика этапов разработки алгоритма решения поставленной задачи.
курсовая работа [713,3 K], добавлен 19.10.2012Решение базовых задач линейного программирования симплекс-методом, их реализация на языке программирования С++. Математическое обеспечение; разработка алгоритма программы, решающей задачу с помощью симплекс-таблиц с произвольными свободными членами.
курсовая работа [217,8 K], добавлен 25.05.2014Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013