Теория графов Основные определения Дуга Пусть имеется множество вершин V={V1,V2,…,Vn} и пусть на нем задано бинарное отношение Г⊂V×V, – Vi Г Vj↔(Vi Vj)∈ Г – эту пару назовем дугой Uk Пример Неориентированные графы Если бинарное отношение симметрично, то наряду с дугой (Vi,Vj) есть дуга (Vj,Vi). В этом случае чаще всего переходят к неориентированным графам. Задание графов Матрица инцидентности A. По вертикали указываются вершины, по горизонтали - ребра. aij=1 если вершина i инцидентна ребру j, в противном случае aij=0. Для орграфа aij=-1 если из вершины i исходит ребро j, aij=1 если в вершину i входит ребро j. Если ребро - петля, то aij=2. Список ребер. В первом столбце ребра, во втором вершины им инцидентные. Матрица смежности - квадратная симметричная матрица. По горизонтали и вертикали - все вершины. Dij= число ребер, соединяющее вершины i,j. Матрица Кирхгофа: bij=-1, если вершины i и j смежны, bij=0 если вершины i и j не смежны. Сумма элементов в каждой строке и каждом столбце матрицы Кирхгофа равна 0. Полустепень вершины Для ориентированных графов: полустепенью исхода вершины |Г(Vi)| будем называть число дуг, исходящих из вершины Vi; полустепенью захода вершин |Г-1(Vi)| будем называть число дуг, заходящих в вершину. В орграфе две локальных степени вершины v: deg(v)+ и deg(v) - (число ребер с началом и концом в v). Для неориентированных графах говорят только о степени. Следствие 2 из леммы о рукопожатиях. Число ребер в полном графе n(n-1)/2. Достижимость Матрица достижимости R={rij}, {rij}=1, если Vj достижима из Vi, {rij}=0 в противном случае. R=E+A+А2+…+Ak В степенях используется «булевское» умножение матриц (строк на столбец, но 1+1=1, 0+1=1,0+0=0, 1+0=0). K – такое число, при котором дальнейшее сужение степеней не меняет матрицу R. Алгоритм Краскалла Составляется список ребер в порядке увеличения весов. В искомое дерево добавляем, начиная с первого элемента списка по порядку этого списка ветви до те пор, пока не встречаем ветвь, образующую с ранее включенной цикл. Данную ветвь вычеркиваем из списка. Затем продолжаем аналогичные действия до (n-1) ветви. Алгоритм Дейкстры Пусть имеется направленный ориентированный граф с двумя выделенными вершинами Vs и Vt. Найти минимальный направленный путь из Vs в Vt. Помечаем вершину Vs, и присваиваем ей вес qs:=0, а всем остальным присваиваем временный вес qi=∞ Полагаем i=s – номер последней отмеченной вершины Для каждой неотмеченной вершины Vj выполняется следующий оператор qj:=min(qj, qi+pij), где pij – вес ветви, ведущей из i-той вершины в j-тую, если нет pij, считаем pij=∞ Алгоритм Дейкстры Проверяем, есть ли среди только что отмеченных qj конечное значение. Если таких вершин нет, то мы завершаем алгоритм, пути из s в t не существует. Если же конечное значение qj найдется, то из них выбирается минимальная. Пусть это вершина j0, тогда мы помечаем эту вершину, а так же помечаем ту дугу, по которой мы добирались в вершину Vj0, при получении этого минимального значения. I=jo Проверяем условие i=t. Если это так, алгоритм завершается, L(s-t)=qj0. Сам же минимальный путь считается, начиная с вершины Vt по выделенным дугам в обратном порядке. Если же i≠t, возвращаемся к пункту 3.