🗊Презентация Фундаментальные циклы

Категория: Математика
Нажмите для полного просмотра!
Фундаментальные циклы, слайд №1Фундаментальные циклы, слайд №2Фундаментальные циклы, слайд №3Фундаментальные циклы, слайд №4Фундаментальные циклы, слайд №5Фундаментальные циклы, слайд №6Фундаментальные циклы, слайд №7Фундаментальные циклы, слайд №8Фундаментальные циклы, слайд №9Фундаментальные циклы, слайд №10Фундаментальные циклы, слайд №11Фундаментальные циклы, слайд №12Фундаментальные циклы, слайд №13Фундаментальные циклы, слайд №14Фундаментальные циклы, слайд №15Фундаментальные циклы, слайд №16Фундаментальные циклы, слайд №17Фундаментальные циклы, слайд №18Фундаментальные циклы, слайд №19Фундаментальные циклы, слайд №20Фундаментальные циклы, слайд №21Фундаментальные циклы, слайд №22Фундаментальные циклы, слайд №23Фундаментальные циклы, слайд №24Фундаментальные циклы, слайд №25Фундаментальные циклы, слайд №26Фундаментальные циклы, слайд №27Фундаментальные циклы, слайд №28Фундаментальные циклы, слайд №29Фундаментальные циклы, слайд №30Фундаментальные циклы, слайд №31Фундаментальные циклы, слайд №32Фундаментальные циклы, слайд №33Фундаментальные циклы, слайд №34Фундаментальные циклы, слайд №35Фундаментальные циклы, слайд №36Фундаментальные циклы, слайд №37Фундаментальные циклы, слайд №38Фундаментальные циклы, слайд №39Фундаментальные циклы, слайд №40Фундаментальные циклы, слайд №41Фундаментальные циклы, слайд №42Фундаментальные циклы, слайд №43Фундаментальные циклы, слайд №44Фундаментальные циклы, слайд №45Фундаментальные циклы, слайд №46Фундаментальные циклы, слайд №47Фундаментальные циклы, слайд №48Фундаментальные циклы, слайд №49Фундаментальные циклы, слайд №50Фундаментальные циклы, слайд №51Фундаментальные циклы, слайд №52

Содержание

Вы можете ознакомиться и скачать презентацию на тему Фундаментальные циклы. Доклад-сообщение содержит 52 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Фундаментальные циклы 
(продолжение)
Описание слайда:
Фундаментальные циклы (продолжение)

Слайд 2





Структуры данных
Граф задаем матрицей смежности.
Для отметки проходимых вершин используем массив Chk[N]. 
Для хранения проходимых вершин используем стек.
Описание слайда:
Структуры данных Граф задаем матрицей смежности. Для отметки проходимых вершин используем массив Chk[N]. Для хранения проходимых вершин используем стек.

Слайд 3





Алгоритм обхода в глубину
1) Берем произвольную начальную вершину, и заносим ее в стек;

2) Стек пуст? Если ДА – конец;

3) Берем вершину Z из стека;

4) Если есть вершина Q, связанная с Z и не отмеченная, то возвращаем Z в стек, заносим в стек Q, печатаем ребро (Z,Q);

5) Переходим к п.2
Описание слайда:
Алгоритм обхода в глубину 1) Берем произвольную начальную вершину, и заносим ее в стек; 2) Стек пуст? Если ДА – конец; 3) Берем вершину Z из стека; 4) Если есть вершина Q, связанная с Z и не отмеченная, то возвращаем Z в стек, заносим в стек Q, печатаем ребро (Z,Q); 5) Переходим к п.2

Слайд 4


Фундаментальные циклы, слайд №4
Описание слайда:

Слайд 5


Фундаментальные циклы, слайд №5
Описание слайда:

Слайд 6


Фундаментальные циклы, слайд №6
Описание слайда:

Слайд 7


Фундаментальные циклы, слайд №7
Описание слайда:

Слайд 8


Фундаментальные циклы, слайд №8
Описание слайда:

Слайд 9


Фундаментальные циклы, слайд №9
Описание слайда:

Слайд 10


Фундаментальные циклы, слайд №10
Описание слайда:

Слайд 11


Фундаментальные циклы, слайд №11
Описание слайда:

Слайд 12


Фундаментальные циклы, слайд №12
Описание слайда:

Слайд 13


Фундаментальные циклы, слайд №13
Описание слайда:

Слайд 14


Фундаментальные циклы, слайд №14
Описание слайда:

Слайд 15


Фундаментальные циклы, слайд №15
Описание слайда:

Слайд 16


Фундаментальные циклы, слайд №16
Описание слайда:

Слайд 17


Фундаментальные циклы, слайд №17
Описание слайда:

Слайд 18


Фундаментальные циклы, слайд №18
Описание слайда:

Слайд 19


Фундаментальные циклы, слайд №19
Описание слайда:

Слайд 20


Фундаментальные циклы, слайд №20
Описание слайда:

Слайд 21





Как программно построить фундаментальные циклы?
Описание слайда:
Как программно построить фундаментальные циклы?

Слайд 22





Посмотрим на состояние стека:
Описание слайда:
Посмотрим на состояние стека:

Слайд 23





Алгоритм генерации циклов параллельно с поиском в глубину
Добавив в стек очередную вершину Z, нужно пройтись по стеку от вершины к началу, проверяя (по матрице смежности) нет ли в графе ребра (Z,C).
(C – вершина в стеке, расположенная ниже Z.)  

Если ребро есть – 
печатаем отрезок стека от Z до C.
Описание слайда:
Алгоритм генерации циклов параллельно с поиском в глубину Добавив в стек очередную вершину Z, нужно пройтись по стеку от вершины к началу, проверяя (по матрице смежности) нет ли в графе ребра (Z,C). (C – вершина в стеке, расположенная ниже Z.) Если ребро есть – печатаем отрезок стека от Z до C.

Слайд 24





Просмотр стека нужно начинать с вершины, лежащей на 2 позиции ниже вершины.
Просмотр стека нужно начинать с вершины, лежащей на 2 позиции ниже вершины.
Описание слайда:
Просмотр стека нужно начинать с вершины, лежащей на 2 позиции ниже вершины. Просмотр стека нужно начинать с вершины, лежащей на 2 позиции ниже вершины.

Слайд 25





Программная реализация построения фундаментального множества циклов
Описание слайда:
Программная реализация построения фундаментального множества циклов

Слайд 26


Фундаментальные циклы, слайд №26
Описание слайда:

Слайд 27





void ChkLoop()         // Проверка стека на наличие циклов
void ChkLoop()         // Проверка стека на наличие циклов
{
	int i,j,C,k;

	i=sPtr-1;                // i указывает на верхний элемент стека
	
	if (i <= 1) return;   // Если в стеке мало вершин - выход

	C=sArr[i];              // C – вершина, добавленная последней

	for (j=i-2; j >= 0; j--)   // Ищем связь с одной из более глубоких
                                         // вершин
          if (isBound(C,sArr[j])) 
                                        // Нашли – печатаем найденный цикл
             {
                cout << "Loop: ";
                for (k=j; k<=i; k++) cout << sArr[k] << " ";
                cout << endl;
            }
}
Описание слайда:
void ChkLoop() // Проверка стека на наличие циклов void ChkLoop() // Проверка стека на наличие циклов { int i,j,C,k; i=sPtr-1; // i указывает на верхний элемент стека if (i <= 1) return; // Если в стеке мало вершин - выход C=sArr[i]; // C – вершина, добавленная последней for (j=i-2; j >= 0; j--) // Ищем связь с одной из более глубоких // вершин if (isBound(C,sArr[j])) // Нашли – печатаем найденный цикл { cout << "Loop: "; for (k=j; k<=i; k++) cout << sArr[k] << " "; cout << endl; } }

Слайд 28





void Show()    // Вывод состояния стека
void Show()    // Вывод состояния стека
{
	int i;
	cout << "STACK: ";
	for (i=0; i < sPtr; i++)
		cout << sArr[i] << " ";
	cout << endl;
}
Описание слайда:
void Show() // Вывод состояния стека void Show() // Вывод состояния стека { int i; cout << "STACK: "; for (i=0; i < sPtr; i++) cout << sArr[i] << " "; cout << endl; }

Слайд 29





int main(int argc, char* argv[])
int main(int argc, char* argv[])
{
   int i,j,n;
   char fnam[200];
   FILE *inp;
   
   if (argc < 2)
     { cout << "Enter file name: ";  cin >> fnam;   }
   else
     strcpy(fnam,argv[1]);
   
   if ((inp=fopen(fnam,"r")) == NULL)	
     { cout << "Error by open..." << endl;
        return 0;   }
   else
	{
        fscanf(inp,"%d",&n);
        // Ввод размера стека и его создание
        cout << "Stack size=" << n << endl;
        InitStack(n);
Описание слайда:
int main(int argc, char* argv[]) int main(int argc, char* argv[]) { int i,j,n; char fnam[200]; FILE *inp; if (argc < 2) { cout << "Enter file name: "; cin >> fnam; } else strcpy(fnam,argv[1]); if ((inp=fopen(fnam,"r")) == NULL) { cout << "Error by open..." << endl; return 0; } else { fscanf(inp,"%d",&n); // Ввод размера стека и его создание cout << "Stack size=" << n << endl; InitStack(n);

Слайд 30





    // Ввод числа вершин графа
    // Ввод числа вершин графа
    fscanf(inp,"%d",&n);
    cout << "Number of nodes=" << n << endl;

    // Создание матрицы смежности
    InitGraph(n);

    while (1)   // Задание ребер графа
      {
         if (fscanf(inp,"%d %d", &i, &j) == EOF) break;
         if ((i <= n) && (j <= n) && (i > 0) && (j > 0))
            SetBound(i,j);
         else
	       cout << "Bad node numbers: " << i << " " << j << endl; 
       }

      // Построение стягивающего дерева и генерация циклов
     try 
    {   DFS();     }
     catch (char *error_message)
    {   cout << error_message << endl;  }
Описание слайда:
// Ввод числа вершин графа // Ввод числа вершин графа fscanf(inp,"%d",&n); cout << "Number of nodes=" << n << endl; // Создание матрицы смежности InitGraph(n); while (1) // Задание ребер графа { if (fscanf(inp,"%d %d", &i, &j) == EOF) break; if ((i <= n) && (j <= n) && (i > 0) && (j > 0)) SetBound(i,j); else cout << "Bad node numbers: " << i << " " << j << endl; } // Построение стягивающего дерева и генерация циклов try { DFS(); } catch (char *error_message) { cout << error_message << endl; }

Слайд 31





	   // Завершение...
	   // Завершение...
	
       fclose(inp);

       DestroyStack();

	   delete Matr;
	   delete Chk;

	   cin >> i;

   }

  return 0;

}
Описание слайда:
// Завершение... // Завершение... fclose(inp); DestroyStack(); delete Matr; delete Chk; cin >> i; } return 0; }

Слайд 32





Испытаем…
Файл G.txt:
100
8
1  2
1  6
2  3
2  4
2  5
3  5
3  8
4  5
4  7
5  8
5  6
5  7
8  7
Описание слайда:
Испытаем… Файл G.txt: 100 8 1 2 1 6 2 3 2 4 2 5 3 5 3 8 4 5 4 7 5 8 5 6 5 7 8 7

Слайд 33





Двусвязность
Описание слайда:
Двусвязность

Слайд 34





Определение
Вершина A неориентированного графа называется точкой сочленения, если удаление этой вершины и всех инцидентных ей ребер ведет к увеличению числа компонентов связности.
Описание слайда:
Определение Вершина A неориентированного графа называется точкой сочленения, если удаление этой вершины и всех инцидентных ей ребер ведет к увеличению числа компонентов связности.

Слайд 35


Фундаментальные циклы, слайд №35
Описание слайда:

Слайд 36


Фундаментальные циклы, слайд №36
Описание слайда:

Слайд 37





Эквивалентное определение точки сочленения
Вершина A есть точка сочленения, если в графе существуют вершины V и U (отличные от A), такие, что любой путь из V в U проходит через A.
Описание слайда:
Эквивалентное определение точки сочленения Вершина A есть точка сочленения, если в графе существуют вершины V и U (отличные от A), такие, что любой путь из V в U проходит через A.

Слайд 38


Фундаментальные циклы, слайд №38
Описание слайда:

Слайд 39





Определение
Неориентированный граф называется двусвязным, если он связный и не содержит точек сочленения.
Описание слайда:
Определение Неориентированный граф называется двусвязным, если он связный и не содержит точек сочленения.

Слайд 40





Двусвязность – очень важное свойство графа. 
Двусвязность – очень важное свойство графа. 
Расхожий пример:

Если граф компютерной сети двусвязен, то исключение любого из узлов не развалит сеть на изолированные блоки.
Описание слайда:
Двусвязность – очень важное свойство графа. Двусвязность – очень важное свойство графа. Расхожий пример: Если граф компютерной сети двусвязен, то исключение любого из узлов не развалит сеть на изолированные блоки.

Слайд 41


Фундаментальные циклы, слайд №41
Описание слайда:

Слайд 42


Фундаментальные циклы, слайд №42
Описание слайда:

Слайд 43





Интересное свойство блоков
Если B1 и B2 – два разных блока графа G, то возможны только два случая:

Множество вершин B1 и B2 не пересекаются;

Пересечение множества вершин B1 и B2 есть точка сочленения графа G.
Описание слайда:
Интересное свойство блоков Если B1 и B2 – два разных блока графа G, то возможны только два случая: Множество вершин B1 и B2 не пересекаются; Пересечение множества вершин B1 и B2 есть точка сочленения графа G.

Слайд 44





Докажем это
Если блоки B1 и B2 имеют две или более общие вершины, то граф, получающийся из B1 и B2 объединением множества вершин и ребер, будет двусвязным. 

Все пути между вершинами блоков B1 и B2 можно провести через одну или другую общую вершину – нет точек сочленения.
Описание слайда:
Докажем это Если блоки B1 и B2 имеют две или более общие вершины, то граф, получающийся из B1 и B2 объединением множества вершин и ребер, будет двусвязным. Все пути между вершинами блоков B1 и B2 можно провести через одну или другую общую вершину – нет точек сочленения.

Слайд 45





Получается, что объединение блоков B1 и B2 двусвязно, что противоречит максимальности блоков B1 и B2.
Получается, что объединение блоков B1 и B2 двусвязно, что противоречит максимальности блоков B1 и B2.
Описание слайда:
Получается, что объединение блоков B1 и B2 двусвязно, что противоречит максимальности блоков B1 и B2. Получается, что объединение блоков B1 и B2 двусвязно, что противоречит максимальности блоков B1 и B2.

Слайд 46





Рассмотрим случай, когда блоки B1 и B2 имеют одну общую вершину A.
Рассмотрим случай, когда блоки B1 и B2 имеют одну общую вершину A.

Если эта вершина A не есть точка сочленения исходного графа G, то для двух вершин v1 (из B1) и v2 (из B2) существует путь в G, не проходящий через A.

Добавим к объединению B1 и B2 ребра и вершины этого пути – получим двусвязный граф (включающий B1 и B2). 
Значит B1 и B2 – не максимальны.
Описание слайда:
Рассмотрим случай, когда блоки B1 и B2 имеют одну общую вершину A. Рассмотрим случай, когда блоки B1 и B2 имеют одну общую вершину A. Если эта вершина A не есть точка сочленения исходного графа G, то для двух вершин v1 (из B1) и v2 (из B2) существует путь в G, не проходящий через A. Добавим к объединению B1 и B2 ребра и вершины этого пути – получим двусвязный граф (включающий B1 и B2). Значит B1 и B2 – не максимальны.

Слайд 47





Получается, что блоки могут либо пересекаться по точке сочленения, либо не иметь общих вершин.
Получается, что блоки могут либо пересекаться по точке сочленения, либо не иметь общих вершин.
Описание слайда:
Получается, что блоки могут либо пересекаться по точке сочленения, либо не иметь общих вершин. Получается, что блоки могут либо пересекаться по точке сочленения, либо не иметь общих вершин.

Слайд 48





Теорема
Пусть T есть стягивающее дерево графа G, построенное методом обхода в глубину 
и R – корень дерева T.

Вершина V есть точка сочленения графа G в одном из двух случаев:

 V=R и R имеет по крайней мере двух сыновей в T.
 V <>R и существует сын W вершины V, такой, что ни W ни один из его потомков не связаны ребром с предками V.
Описание слайда:
Теорема Пусть T есть стягивающее дерево графа G, построенное методом обхода в глубину и R – корень дерева T. Вершина V есть точка сочленения графа G в одном из двух случаев:  V=R и R имеет по крайней мере двух сыновей в T.  V <>R и существует сын W вершины V, такой, что ни W ни один из его потомков не связаны ребром с предками V.

Слайд 49





Доказательство.
Рассмотрим сначала случай V=R.

Если корень имеет только одного сына, то устранение корня не увеличит число компонент связности.

А если сыновей больше одного, то при устранении корня, они окажутся в разных компонентах связности.
Описание слайда:
Доказательство. Рассмотрим сначала случай V=R. Если корень имеет только одного сына, то устранение корня не увеличит число компонент связности. А если сыновей больше одного, то при устранении корня, они окажутся в разных компонентах связности.

Слайд 50





Это имеет место потому, что путь между двумя различными сыновьями корня проходит через корень.
Это имеет место потому, что путь между двумя различными сыновьями корня проходит через корень.

Если бы это было не так, то между двумя сыновьями корня существовал бы путь, содержащий хорду (U,S), где ни U не было бы потомком S, ни S не было бы потомком U
Описание слайда:
Это имеет место потому, что путь между двумя различными сыновьями корня проходит через корень. Это имеет место потому, что путь между двумя различными сыновьями корня проходит через корень. Если бы это было не так, то между двумя сыновьями корня существовал бы путь, содержащий хорду (U,S), где ни U не было бы потомком S, ни S не было бы потомком U

Слайд 51





Пусть теперь V<>R. Устраним V. 
Пусть теперь V<>R. Устраним V. 
Если после устранения существует путь от W (потомка V) до корня R, то этот путь должен содержать ребро, соединяющее W (или его потомка) с предком V
Описание слайда:
Пусть теперь V<>R. Устраним V. Пусть теперь V<>R. Устраним V. Если после устранения существует путь от W (потомка V) до корня R, то этот путь должен содержать ребро, соединяющее W (или его потомка) с предком V

Слайд 52





http://catstail.narod.ru/lec/lec-10.zip
Описание слайда:
http://catstail.narod.ru/lec/lec-10.zip



Похожие презентации
Mypresentation.ru
Загрузить презентацию