Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л8 Поиск по графу+ / Л8 Поиск по графу+.ppt
Скачиваний:
22
Добавлен:
09.02.2015
Размер:
1.46 Mб
Скачать

Построение и анализ алгоритмов

Лекция 8 Раздел: Алгоритмы на графах

Тема лекции: Поиск по графу

07.04.2014

Поиск на графах

1

Поиск по графу. Алгоритм пометок

Обход графа: (ср.обходы дерева, леса)

из текущей вершины (на рисунке - красная) доступны смежные (на рисунке - синие) и ещё не помеченные;

они помечаются и заносятся в специальное

множество; • из множества

извлекается очередная

вершина, она посещается (обрабатывается), и процесс повторяется, пока множество не

станет пустым.

07.04.2014

Поиск на графах

2

Поиск по графу. Алгоритм пометок

8

9

Структура смежности:

 

 

 

 

1

2, 4

5

 

2

1, 3, 5

7

3

2, 4, 6

 

6

4

1, 3, 6, 7

 

 

2

4

5

2, 6, 8, 9

6

3, 4, 5, 7, 9

 

3

 

7

4, 6

 

 

 

 

8

5

 

1

9

5, 6

 

 

 

Множеств

 

Обход закончен!

о:

 

 

 

07.04.2014

Поиск на графах

3

Поиск по графу. Алгоритм пометок

search (vert v0)

{setVert Q; // рабочее множество вершин графа bool newVert [n];

global

setVert V; //множество вершин графа G=(V,E), Card(V)=n

listVert adj [n]; //списки смежности

 

for ( v V) newVert[v] = true; //пометить вершины как

необследованные

 

Q = { v0 }; NewVert[v0] = false;

 

while (Q { })

{

 

v = произвольный элемент из Q;

 

удалить v из Q;

 

 

 

O(n + m)

посетить ( v );

 

for ( u Adj[v]) {

каждая

if (NewVert[u]) {

 

вершина один

Q = Q + {u};

 

раз заносится в

NewVert[u] = false;

множество и

} // if

 

 

один раз

}//for

 

 

исключается

// вершина v - использована

•Каждое ребро

} //while

 

 

} //search

 

 

при анализе

07.04.2014

 

Поиск на графах

пометки

 

 

 

проверяется

ПОИСК В ШИРИНУ

(Breadth First Search - BFS )

Множество Q реализуется очередью q (раньше посетили - раньше использовали).

Заодно строится остовное дерево (T – множество

древесных ребер)

search_BFS (vert v0)

{queueVert q; bool newVert [n];

global setVert V; //множество вершин графа G=(V,E),

Card(V)=n

listVert adj [n]; //списки смежности

setBr T; // множество ветвей (branch) дерева

07.04.2014

Поиск на графах

6

ПОИСК В ШИРИНУ ( O(n+m) )

for ( v V) newVert[v]=true;//пометить вершины как необследованные Create(q);

q v0; newVert[v0] =false; T = { };

while ( !Null( q )) { v q;

посетить ( v ); for ( u Adj[v] ) { if (newVert[u] ) { q u;

newVert[u] =false; T = T + { <v,u> };

//predVert[u] = v

}//if

}//for вершина v - использована

}//while

}// searchBFS

07.04.2014

Поиск на графах

7

ПОИСК В ШИРИНУ Пример

8 8

9 9

5 5 7 7 6 6

2 2 4 3

3 4

 

1

2

4

1

1

5

6

7 8 9

Очередь:

3

1

2, 4

2

1, 3, 5

3

2, 4, 6

4

1, 3, 6, 7

5

2, 6, 8, 9

6

3, 4, 5, 7, 9

7

4, 6

8

5

9

5, 6

Обход закончен!

07.04.2014

Поиск на графах

9

ПОИСК В ШИРИНУ = Волновой алгоритм

 

Свойство BFS-остова:

 

G = (V, E) и

 

(V, T) – BFS-остов

 

графа G.

 

Тогда путь в (V, T) из

2

v V до корня остова

4 r является

3

кратчайшим путем

 

из v в r в графе G.

1

Док-во по индукции

(по этапам волны

 

или по порциям

07.04.2014

Поиск на графах записи в очередь).

ПОИСК В ГЛУБИНУ

( Depth First Search - DFS )

Q = Stack. Можно сразу рекурсивно.

searchDFS (vert v)

{ global bool newVert [n];

setVert V; //множество вершин графа G=(V,E), Card(V)=n listVert adj [n]; //списки смежности

setBr T; // множество ветвей (branch) дерева

посетить v; newVert[v] =false; for ( u Adj[v] )

if (newVert[u]) searchDFS(u);

//v - использована

} // searchDFS

07.04.2014

Поиск на графах

11

ПОИСК В ГЛУБИНУ (ПВГ)

(Depth First Search - DFS )

//cобственно поиск в глубину в графе G=(V,E) {…

setVert V; //множество вершин графа G=(V,E), Card(V)=n

listVert adj [n]; //списки смежности for ( v V) newVert[v] = true;

// - пометить все вершины как необследованные for ( v V)

if (newVert[v] ) searchDFS(v);

}

07.04.2014

Поиск на графах

12

 

ПОИСК В ГЛУБИНУ

8

9

пример

 

5 7 6

2 4 3

1

1

2, 4

2

1, 3, 5

3

2, 4, 6

4

1, 3, 6, 7

5

2, 6, 8, 9

6

3, 4, 5, 7, 9

7

4, 6

8

5

9

5, 6

07.04.2014

Поиск на графах

13