🗊Презентация Каркасы графа. (Лекция 6)

Категория: Математика
Нажмите для полного просмотра!
Каркасы графа. (Лекция 6), слайд №1Каркасы графа. (Лекция 6), слайд №2Каркасы графа. (Лекция 6), слайд №3Каркасы графа. (Лекция 6), слайд №4Каркасы графа. (Лекция 6), слайд №5Каркасы графа. (Лекция 6), слайд №6Каркасы графа. (Лекция 6), слайд №7Каркасы графа. (Лекция 6), слайд №8Каркасы графа. (Лекция 6), слайд №9Каркасы графа. (Лекция 6), слайд №10Каркасы графа. (Лекция 6), слайд №11Каркасы графа. (Лекция 6), слайд №12Каркасы графа. (Лекция 6), слайд №13Каркасы графа. (Лекция 6), слайд №14Каркасы графа. (Лекция 6), слайд №15Каркасы графа. (Лекция 6), слайд №16Каркасы графа. (Лекция 6), слайд №17Каркасы графа. (Лекция 6), слайд №18Каркасы графа. (Лекция 6), слайд №19Каркасы графа. (Лекция 6), слайд №20Каркасы графа. (Лекция 6), слайд №21Каркасы графа. (Лекция 6), слайд №22Каркасы графа. (Лекция 6), слайд №23Каркасы графа. (Лекция 6), слайд №24Каркасы графа. (Лекция 6), слайд №25Каркасы графа. (Лекция 6), слайд №26Каркасы графа. (Лекция 6), слайд №27

Содержание

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

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


Слайд 1





Каркасы графа
Лекция 6
Описание слайда:
Каркасы графа Лекция 6

Слайд 2





Определения
G(V,E) - связный  неориентированный граф с заданной функцией стоимости, отображающей ребра в вещественные числа.

Остовное дерево или каркас (скелет) графа – это подграф, который : 
 1) содержит все вершины графа, 
 2) является деревом. 
Нас интересуют алгоритмы построения минимального каркаса. 
Минимальным каркасом является такой
 каркас, сумма весов ребер которого минимальна.
Описание слайда:
Определения G(V,E) - связный неориентированный граф с заданной функцией стоимости, отображающей ребра в вещественные числа. Остовное дерево или каркас (скелет) графа – это подграф, который :  1) содержит все вершины графа,   2) является деревом. Нас интересуют алгоритмы построения минимального каркаса. Минимальным каркасом является такой каркас, сумма весов ребер которого минимальна.

Слайд 3





Алгоритм Краскала   (Джозеф Крускал, 1956 год) 
Алгоритм Краскала   (Джозеф Крускал, 1956 год) 
Сортируем ребра графа по возрастанию весов. 
Полагаем, что каждая вершина относится к своей компоненте связности. 
Проходим ребра в "отсортированном" порядке. Для каждого ребра выполняем: 
если вершины, соединяемые данным ребром, лежат в разных компонентах связности, то объединяем эти компоненты в одну, а рассматриваемое ребро добавляем к минимальному остовному дереву;
если вершины, соединяемые данным ребром лежат в одной компоненте связности, то исключаем ребро из рассмотрения. 
Если есть еще нерассмотренные ребра и не все компоненты связности объединены в одну, то переходим к шагу 3, иначе выход.
Описание слайда:
Алгоритм Краскала (Джозеф Крускал, 1956 год) Алгоритм Краскала (Джозеф Крускал, 1956 год) Сортируем ребра графа по возрастанию весов. Полагаем, что каждая вершина относится к своей компоненте связности. Проходим ребра в "отсортированном" порядке. Для каждого ребра выполняем: если вершины, соединяемые данным ребром, лежат в разных компонентах связности, то объединяем эти компоненты в одну, а рассматриваемое ребро добавляем к минимальному остовному дереву; если вершины, соединяемые данным ребром лежат в одной компоненте связности, то исключаем ребро из рассмотрения. Если есть еще нерассмотренные ребра и не все компоненты связности объединены в одну, то переходим к шагу 3, иначе выход.

Слайд 4






Время работы:

Cортировка рёбер - O(|E|×log|E|)  
Компоненты связности удобно хранить в виде системы непересекающихся множеств. 
Все операции в таком случае займут O(E)
Описание слайда:
Время работы: Cортировка рёбер - O(|E|×log|E|) Компоненты связности удобно хранить в виде системы непересекающихся множеств. Все операции в таком случае займут O(E)

Слайд 5





Алгоритм Краскала
Вход. Неориентированный граф G= (V, Е) с функцией стоимости с, заданной на его ребрах.
Выход. Остовное дерево S= (V, Т) наименьшей стоимости для G. 

Метод: 
1.  Т ; 	// остовное дерево (каркас)
2. VS  ;	 // набор непересекающихся множеств вершин
3.   построить очередь с приоритетами Q, содержащую все ребра из Е;
4.   Для  vV  выполнить:  добавить {v} к VS;
      Пока |VS|> 1 выполнить:
6.      {	 выбрать в Q ребро (v, w) наименьшей стоимости;
7.       	удалить (v, w) из Q;
8.      	если v и w принадлежат различным множествам W1 и W2 из VS 	то
9.  		{	заменить W1 и W2 на W1W2 в VS;
10.			добавить (v, w)  к Т;
 		}
	}
Описание слайда:
Алгоритм Краскала Вход. Неориентированный граф G= (V, Е) с функцией стоимости с, заданной на его ребрах. Выход. Остовное дерево S= (V, Т) наименьшей стоимости для G. Метод: 1. Т ; // остовное дерево (каркас) 2. VS  ; // набор непересекающихся множеств вершин 3. построить очередь с приоритетами Q, содержащую все ребра из Е; 4. Для  vV выполнить: добавить {v} к VS; Пока |VS|> 1 выполнить: 6. { выбрать в Q ребро (v, w) наименьшей стоимости; 7. удалить (v, w) из Q; 8. если v и w принадлежат различным множествам W1 и W2 из VS то 9. { заменить W1 и W2 на W1W2 в VS; 10. добавить (v, w) к Т; } }

Слайд 6





Пример
Описание слайда:
Пример

Слайд 7






Получившееся дерево является каркасом минимального
веса.
Введем массив меток вершин графа Mark. 
Начальные значения элементов массива равны номерам
соответствующих вершин (Mark[i] = i;  i  1.. N).
Ребро выбирается в каркас в том случае, если вершины,
соединяемые им, имеют разные значения меток.
Пример приведен на следующем слайде, 
изменения Mark показаны в таблице.
Описание слайда:
Получившееся дерево является каркасом минимального веса. Введем массив меток вершин графа Mark. Начальные значения элементов массива равны номерам соответствующих вершин (Mark[i] = i; i  1.. N). Ребро выбирается в каркас в том случае, если вершины, соединяемые им, имеют разные значения меток. Пример приведен на следующем слайде, изменения Mark показаны в таблице.

Слайд 8


Каркасы графа. (Лекция 6), слайд №8
Описание слайда:

Слайд 9





Алгоритм Прима
На каждом шаге вычеркиваем из графа дугу максимальной стоимости с тем условием, что она не разрывает граф на две или более компоненты связности, т.е. после удаления дуги граф должен оставаться связным.
Для того, чтобы определить, остался ли граф связным, достаточно запустить поиск в глубину от одной из вершин, связанных с удаленной дугой.
Условие окончания алгоритма?
Например, пока количество ребер больше либо равно количеству вершин, нужно продолжать, иначе – остановиться.
Описание слайда:
Алгоритм Прима На каждом шаге вычеркиваем из графа дугу максимальной стоимости с тем условием, что она не разрывает граф на две или более компоненты связности, т.е. после удаления дуги граф должен оставаться связным. Для того, чтобы определить, остался ли граф связным, достаточно запустить поиск в глубину от одной из вершин, связанных с удаленной дугой. Условие окончания алгоритма? Например, пока количество ребер больше либо равно количеству вершин, нужно продолжать, иначе – остановиться.

Слайд 10





Пример
Описание слайда:
Пример

Слайд 11





Алгоритм Прима ( Ярника, Дейкстры )
Алгоритм впервые был открыт в 1930 году чешским
математиком Войцехом Ярником, позже переоткрыт
Робертом Примом в 1957 году, и, независимо от них,  
Э. Дейкстрой в 1959 году. 
Время работы алгоритма –  O(V * E) 
Можно улучшить  –               O(E log V + V2) 
При использовании  двоичной кучи –  O(E log V) 
При использовании фибоначчиевой кучи – O(E + V log V)
Описание слайда:
Алгоритм Прима ( Ярника, Дейкстры ) Алгоритм впервые был открыт в 1930 году чешским математиком Войцехом Ярником, позже переоткрыт Робертом Примом в 1957 году, и, независимо от них, Э. Дейкстрой в 1959 году. Время работы алгоритма – O(V * E) Можно улучшить – O(E log V + V2) При использовании двоичной кучи – O(E log V) При использовании фибоначчиевой кучи – O(E + V log V)

Слайд 12





1)  Выбирается произвольная вершина - она будет корнем остовного
1)  Выбирается произвольная вершина - она будет корнем остовного
дерева;
2) Измеряется расстояние от нее до всех других вершин, т.е. находится
минимальное расстояние s от дерева до вершин, которые не включены в
 дерево;
3)  До тех пор, пока в дерево не добавлены все вершины делать: 
- найти вершину u, расстояние от дерева до которой минимально;
- добавить ее к дереву;
- пересчитать расстояния от невключенных вершин до дерева
 следующим образом:
 если расстояние до какой-либо вершины от  u меньше
 текущего расстояния s от дерева, то в s записывается новое
 расстояние.
Описание слайда:
1) Выбирается произвольная вершина - она будет корнем остовного 1) Выбирается произвольная вершина - она будет корнем остовного дерева; 2) Измеряется расстояние от нее до всех других вершин, т.е. находится минимальное расстояние s от дерева до вершин, которые не включены в дерево; 3) До тех пор, пока в дерево не добавлены все вершины делать: - найти вершину u, расстояние от дерева до которой минимально; - добавить ее к дереву; - пересчитать расстояния от невключенных вершин до дерева следующим образом: если расстояние до какой-либо вершины от u меньше текущего расстояния s от дерева, то в s записывается новое расстояние.

Слайд 13


Каркасы графа. (Лекция 6), слайд №13
Описание слайда:

Слайд 14





Реализация за O (M log N + N2)
Отсортируем все рёбра в списках смежности каждой вершины по увеличению
веса – O (M log N).
Для каждой вершины заведем указатель, указывающий на первое доступное
ребро в её списке смежности. Изначально все указатели указывают на начала
списков. 
На i-ой итерации перебираем все вершины, и выбираем наименьшее по весу
ребро среди доступных. Поскольку все рёбра уже отсортированы по весу, а
указатели указывают на первые доступные рёбра, то выбор наименьшего
ребра осуществится за O (N). 
После этого обновляем указатели (сдвигаем вправо), т.к. некоторые из них
указывают на ставшие недоступными рёбра (оба конца которых оказались
внутри дерева). 
На поддержание работы  указателей требуется O (M) действий.
Описание слайда:
Реализация за O (M log N + N2) Отсортируем все рёбра в списках смежности каждой вершины по увеличению веса – O (M log N). Для каждой вершины заведем указатель, указывающий на первое доступное ребро в её списке смежности. Изначально все указатели указывают на начала списков. На i-ой итерации перебираем все вершины, и выбираем наименьшее по весу ребро среди доступных. Поскольку все рёбра уже отсортированы по весу, а указатели указывают на первые доступные рёбра, то выбор наименьшего ребра осуществится за O (N). После этого обновляем указатели (сдвигаем вправо), т.к. некоторые из них указывают на ставшие недоступными рёбра (оба конца которых оказались внутри дерева). На поддержание работы указателей требуется O (M) действий.

Слайд 15





Система непересекающихся множеств (СНМ)
Система непересекающихся множеств — это структура данных, которая реализует разбиение множества. 
Каждое подмножество, входящее в разбиение, характеризуется своим представителем. 
Это понятие было введено Тарьяном (Tarjan) в 1975 году.
Описание слайда:
Система непересекающихся множеств (СНМ) Система непересекающихся множеств — это структура данных, которая реализует разбиение множества. Каждое подмножество, входящее в разбиение, характеризуется своим представителем. Это понятие было введено Тарьяном (Tarjan) в 1975 году.

Слайд 16





СНМ поддерживает следующие операции:
MakeSet (x) — добавляет в СНМ новый элемент x, который заносится в новое подмножество, представителем которого становится x. 
FindSet (x) — осуществляет поиск подмножества, которому принадлежит элемент x, и возвращает его представителя. 
Union (x, y) — объединяет  в одно множество два подмножества, к которым принадлежат элементы x и y. Возвращает элемент, который становится представителем этого множества.
Описание слайда:
СНМ поддерживает следующие операции: MakeSet (x) — добавляет в СНМ новый элемент x, который заносится в новое подмножество, представителем которого становится x. FindSet (x) — осуществляет поиск подмножества, которому принадлежит элемент x, и возвращает его представителя. Union (x, y) — объединяет в одно множество два подмножества, к которым принадлежат элементы x и y. Возвращает элемент, который становится представителем этого множества.

Слайд 17





Простая реализация
В этой реализации для каждого элемента множества хранится номер или, другими словами, цвет подмножества, к которому этот элемент принадлежит.
Описание слайда:
Простая реализация В этой реализации для каждого элемента множества хранится номер или, другими словами, цвет подмножества, к которому этот элемент принадлежит.

Слайд 18





Реализация с помощью списков
1 способ. Если хранить множества в виде линейных списков с указателями на начало и конец списка, и в качестве представителя множества возвращать голову списка, то операция Union (x, y), слияние двух списков, выполняется за O(1), а FindSet (x), поиск элемента в списке, — за O(|V|).
2 способ. Каждый элемент списка может содержать ссылки на следующий элемент и на первый элемент списка. Кроме того, для каждого списка хранятся указатели на его первый и последний элементы. При такой реализации операция  FindSet(x) требует времени O(1). При выполнении операции Union (x, y) список, содержащий элемент y, добавляется к концу списка, содержащего элемент x. При этом требуется установить правильные указатели на начало списка для всех бывших элементов множества, содержащего y. Время на выполнение операции Union (x, y) линейно зависит от размера множества, которому принадлежит  y, т.е. составляет  O(|V|).
Описание слайда:
Реализация с помощью списков 1 способ. Если хранить множества в виде линейных списков с указателями на начало и конец списка, и в качестве представителя множества возвращать голову списка, то операция Union (x, y), слияние двух списков, выполняется за O(1), а FindSet (x), поиск элемента в списке, — за O(|V|). 2 способ. Каждый элемент списка может содержать ссылки на следующий элемент и на первый элемент списка. Кроме того, для каждого списка хранятся указатели на его первый и последний элементы. При такой реализации операция  FindSet(x) требует времени O(1). При выполнении операции Union (x, y) список, содержащий элемент y, добавляется к концу списка, содержащего элемент x. При этом требуется установить правильные указатели на начало списка для всех бывших элементов множества, содержащего y. Время на выполнение операции Union (x, y) линейно зависит от размера множества, которому принадлежит y, т.е. составляет O(|V|).

Слайд 19





Весовая эвристика
Весовая эвристика — это улучшение простой реализации, в которой следует перекрашивать элементы из множества меньшей мощности. В этой реализации для каждого множества из СНМ необходимо хранить его мощность.
Описание слайда:
Весовая эвристика Весовая эвристика — это улучшение простой реализации, в которой следует перекрашивать элементы из множества меньшей мощности. В этой реализации для каждого множества из СНМ необходимо хранить его мощность.

Слайд 20





Реализация с использованием дерева
Описание слайда:
Реализация с использованием дерева

Слайд 21





Применение весовой эвристики
(вес вершины – количество узлов в ее поддереве)
Описание слайда:
Применение весовой эвристики (вес вершины – количество узлов в ее поддереве)

Слайд 22





Если размер дерева равен k, то его высота не более log k . 
Доказательство по индукции:
 для  k = 1 утверждение верно. 
Пусть теперь объединяются два дерева размеров k1 и k2 ; тогда по предположению индукции их высоты меньше либо равны, соответственно, log k1   и log k2 . Не теряя общности, считаем, что первое дерево — большее (k1  k2), поэтому после объединения глубина получившегося дерева из k1 + k2 вершин станет равна:
	h = max( log k1 , 1 +  log k2 ).
Чтобы завершить доказательство, надо показать, что:
h ≤ log ( k1 +  k2)  
2h = max (2 log k1 , 2log k2 ) ≤ 2 log ( k1 +  k2)  ,
что есть почти очевидное неравенство, поскольку 
k1 ≤ k1 + k2 и 2k2 ≤ k1 + k2
Описание слайда:
Если размер дерева равен k, то его высота не более log k . Доказательство по индукции: для  k = 1 утверждение верно. Пусть теперь объединяются два дерева размеров k1 и k2 ; тогда по предположению индукции их высоты меньше либо равны, соответственно, log k1   и log k2 . Не теряя общности, считаем, что первое дерево — большее (k1  k2), поэтому после объединения глубина получившегося дерева из k1 + k2 вершин станет равна: h = max( log k1 , 1 +  log k2 ). Чтобы завершить доказательство, надо показать, что: h ≤ log ( k1 +  k2)   2h = max (2 log k1 , 2log k2 ) ≤ 2 log ( k1 +  k2)  , что есть почти очевидное неравенство, поскольку  k1 ≤ k1 + k2 и 2k2 ≤ k1 + k2

Слайд 23





Эвристика объединением по рангу
(ранг вершины – высота ее поддерева)
Описание слайда:
Эвристика объединением по рангу (ранг вершины – высота ее поддерева)

Слайд 24





При применении ранговой эвристики получаем дерево высоты O(log n) 
Покажем, что если ранг дерева равен k, то это дерево содержит как минимум 2k вершин (отсюда будет автоматически следовать, что ранг, а, значит, и глубина дерева, есть величина  O(log n) ). 

Доказательство по индукции: 
для k = 0 это очевидно. 
Ранг дерева увеличивается с k–1 до k, когда к нему присоединяется дерево ранга k–1; применяя к этим двум деревьям размера k–1 предположение индукции, получаем, что новое дерево ранга k действительно будет иметь как минимум 2k  вершин, что и требовалось доказать.
Описание слайда:
При применении ранговой эвристики получаем дерево высоты O(log n) Покажем, что если ранг дерева равен k, то это дерево содержит как минимум 2k вершин (отсюда будет автоматически следовать, что ранг, а, значит, и глубина дерева, есть величина  O(log n) ). Доказательство по индукции: для k = 0 это очевидно. Ранг дерева увеличивается с k–1 до k, когда к нему присоединяется дерево ранга k–1; применяя к этим двум деревьям размера k–1 предположение индукции, получаем, что новое дерево ранга k действительно будет иметь как минимум 2k  вершин, что и требовалось доказать.

Слайд 25





Эвристика сжатия путей
Описание слайда:
Эвристика сжатия путей

Слайд 26





Пример реализации СНМ
const int MAXN = 1000; 
int p[MAXN], rank[MAXN];
void makeset (int x) 
{ 
	p[x] = x; rank[x] = 0; 
}
int find_set (int x) 
{ 
	if (x == p[x]) return x;
	return p[x] = find_set (p[x]); 
}
void union (int x, int y) 
{
	x = find_set (x); 
	y = find_set (y); 
	if (x == y) return;
	if (rank[x] > rank[y])
		p[y] = x; 
	else 
	{ 
		p[x] = y; 
		if (rank[x] == rank[y]) 
			++rank[y]; 
	} 
}
Описание слайда:
Пример реализации СНМ const int MAXN = 1000; int p[MAXN], rank[MAXN]; void makeset (int x) { p[x] = x; rank[x] = 0; } int find_set (int x) { if (x == p[x]) return x; return p[x] = find_set (p[x]); } void union (int x, int y) { x = find_set (x); y = find_set (y); if (x == y) return; if (rank[x] > rank[y]) p[y] = x; else { p[x] = y; if (rank[x] == rank[y]) ++rank[y]; } }

Слайд 27





Итог
При совместном применении эвристик сжатия пути и объединения по рангу время работы на один запрос получается  в среднем O( α( n) ), где α( n )  — обратная функция Аккермана, которая растёт очень медленно, настолько медленно, что для всех разумных ограничений  она не превосходит 4 (примерно для  n ≤ 10600).
Именно поэтому про асимптотику работы системы непересекающихся множеств уместно говорить "почти константное время работы".
Описание слайда:
Итог При совместном применении эвристик сжатия пути и объединения по рангу время работы на один запрос получается  в среднем O( α( n) ), где α( n )  — обратная функция Аккермана, которая растёт очень медленно, настолько медленно, что для всех разумных ограничений  она не превосходит 4 (примерно для  n ≤ 10600). Именно поэтому про асимптотику работы системы непересекающихся множеств уместно говорить "почти константное время работы".



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