Опубликован: 27.09.2006 | Уровень: специалист | Доступ: свободно | ВУЗ: Нижегородский государственный университет им. Н.И.Лобачевского
Лекция 12:

Паросочетания

Выявление цветков не представляет трудности - нужно только добавить ветвь else к оператору if в строке 14 алгоритма 1. Первое, что мы сделаем, обнаружив цветок, - превратим все сильные ребра пути P в слабые, а слабые - в сильные. После этого преобразования множество сильных ребер является паросочетанием той же мощности, но вместо вершины a свободной вершиной станет вершина b. Таким образом, на цикле C будет одна свободная вершина и этот цикл является чередующимся путем, который начинается и заканчивается в этой вершине. Покажем, что такой цикл можно стянуть в одну вершину, не теряя информации о существовании увеличивающих путей.

Операция стягивания подграфа H в графе G состоит в следующем. Все вершины этого подграфа удаляются из графа, а вместо них добавляется новая вершина. Эта новая вершина соединяется ребрами с теми и только теми из оставшихся вершин графа, которые были смежны хотя бы с одной вершиной подграфа H. Граф, получаемый в результате такой операции, будем обозначать через G/H.

Теорема 3. Пусть M - паросочетание в графе G, C - цикл длины 2k+1 в этом графе, причем на цикле имеется k сильных ребер и одна свободная вершина. Пусть M' - паросочетание в графе G'=G/C, составленное из всех ребер паросочетания M, не принадлежащих циклу C. Паросочетание M является наибольшим в графе G тогда и только тогда, когда M' - наибольшее паросочетание в графе G'.

Доказательство. Докажем, что из существования увеличивающего пути относительно паросочетания M в графе G следует, что существует увеличивающий путь относительно паросочетания M' в графе G' и обратно.

Пусть b - свободная вершина цикла C. Новую вершину, образованную в графе G' при стягивании цикла C, обозначим через c. Отметим, что она является свободной вершиной относительно паросочетания M'.

Пусть P - увеличивающий путь в графе G. Если он не содержит вершин цикла C, то он будет увеличивающим путем и в графе G'. В противном случае рассмотрим отрезок P' пути P, начинающийся в свободной вершине, отличной от b, заканчивающийся в вершине x, лежащей на цикле C, и не содержащий других вершин цикла C. Если в пути P' заменить вершину x вершиной c, то, очевидно, получится увеличивающий путь в графе G'.

Обратно, пусть P' - увеличивающий путь в графе G'. Если P' не проходит через вершину c, то он будет увеличивающим путем и в графе G. В противном случае рассмотрим путь P'', получающийся удалением вершины c из пути P'. Можно считать, что вершина c была последней вершиной пути P', а путь P'' заканчивается в предпоследней вершине x. Так как вершина x смежна с вершиной c в графе G', то в графе G на цикле C имеется вершина y, смежная с x. Добавим к пути P'' тот из отрезков цикла C, соединяющих вершину y с вершиной b, который начинается сильным ребром. В результате получится увеличивающий путь в графе G.

Из доказательства видно, что увеличивающий путь в графе G при известном увеличивающем пути в графе G' находится за линейное время. Для получения оценок времени работы алгоритма в целом требуется еще проработка ряда деталей, например подробностей выполнения операции стягивания и т.д. Однако ясно, что это время ограничено полиномом.

Татьяна Наумович
Татьяна Наумович

Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов?
Или нужно проходить заново?

Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?


( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0604102501208watchdog( )../bootstrap.inc:0
23.0607102503672module_invoke( )../bootstrap.inc:967
33.0607102505528call_user_func_array ( )../module.inc:462
43.0607102505864devel_watchdog( )../module.inc:462
53.0608102506712decode_entities( )../devel.module:382
63.0608102508632drupal_error_handler( )../devel.module:340
73.0608102512240watchdog( )../common.inc:663
83.0609102514304module_invoke( )../bootstrap.inc:967
93.0609102516160call_user_func_array ( )../module.inc:462
103.0609102516496devel_watchdog( )../module.inc:462
113.0609102517192decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0604102501208watchdog( )../bootstrap.inc:0
23.0607102503672module_invoke( )../bootstrap.inc:967
33.0607102505528call_user_func_array ( )../module.inc:462
43.0607102505864devel_watchdog( )../module.inc:462
53.0608102506712decode_entities( )../devel.module:382
63.0608102508632drupal_error_handler( )../devel.module:340
73.0608102512240watchdog( )../common.inc:663
83.0609102514304module_invoke( )../bootstrap.inc:967
93.0609102516160call_user_func_array ( )../module.inc:462
103.0609102516496devel_watchdog( )../module.inc:462
113.0609102517192decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0604102501208watchdog( )../bootstrap.inc:0
23.0607102503672module_invoke( )../bootstrap.inc:967
33.0607102505528call_user_func_array ( )../module.inc:462
43.0607102505864devel_watchdog( )../module.inc:462
53.0608102506712decode_entities( )../devel.module:382
63.0616102508824drupal_error_handler( )../devel.module:340
73.0616102512512watchdog( )../common.inc:663
83.0617102514576module_invoke( )../bootstrap.inc:967
93.0617102516432call_user_func_array ( )../module.inc:462
103.0617102516768devel_watchdog( )../module.inc:462
113.0617102517544decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0604102501208watchdog( )../bootstrap.inc:0
23.0607102503672module_invoke( )../bootstrap.inc:967
33.0607102505528call_user_func_array ( )../module.inc:462
43.0607102505864devel_watchdog( )../module.inc:462
53.0608102506712decode_entities( )../devel.module:382
63.0616102508824drupal_error_handler( )../devel.module:340
73.0616102512512watchdog( )../common.inc:663
83.0617102514576module_invoke( )../bootstrap.inc:967
93.0617102516432call_user_func_array ( )../module.inc:462
103.0617102516768devel_watchdog( )../module.inc:462
113.0617102517544decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0622102501752watchdog( )../bootstrap.inc:0
23.0622102503816module_invoke( )../bootstrap.inc:967
33.0622102505672call_user_func_array ( )../module.inc:462
43.0622102506008devel_watchdog( )../module.inc:462
53.0622102506712decode_entities( )../devel.module:382
63.0623102508632drupal_error_handler( )../devel.module:340
73.0623102512240watchdog( )../common.inc:663
83.0623102514304module_invoke( )../bootstrap.inc:967
93.0623102516160call_user_func_array ( )../module.inc:462
103.0623102516496devel_watchdog( )../module.inc:462
113.0623102517192decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0622102501752watchdog( )../bootstrap.inc:0
23.0622102503816module_invoke( )../bootstrap.inc:967
33.0622102505672call_user_func_array ( )../module.inc:462
43.0622102506008devel_watchdog( )../module.inc:462
53.0622102506712decode_entities( )../devel.module:382
63.0623102508632drupal_error_handler( )../devel.module:340
73.0623102512240watchdog( )../common.inc:663
83.0623102514304module_invoke( )../bootstrap.inc:967
93.0623102516160call_user_func_array ( )../module.inc:462
103.0623102516496devel_watchdog( )../module.inc:462
113.0623102517192decode_entities( )../devel.module:382

( ! ) Warning: include_once(./includes/unicode.entities.inc) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0622102501752watchdog( )../bootstrap.inc:0
23.0622102503816module_invoke( )../bootstrap.inc:967
33.0622102505672call_user_func_array ( )../module.inc:462
43.0622102506008devel_watchdog( )../module.inc:462
53.0622102506712decode_entities( )../devel.module:382
63.0628102508824drupal_error_handler( )../devel.module:340
73.0628102512512watchdog( )../common.inc:663
83.0629102514576module_invoke( )../bootstrap.inc:967
93.0629102516432call_user_func_array ( )../module.inc:462
103.0629102516768devel_watchdog( )../module.inc:462
113.0629102517544decode_entities( )../devel.module:382

( ! ) Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening './includes/unicode.entities.inc' for inclusion (include_path='.:/usr/local/zend/var/libraries/Zend_Framework_1/default/library:/usr/local/zend/share/pear') in /.2/var_www_new.intuit.ru/htdocs/includes/unicode.inc on line 340
Call Stack
#TimeMemoryFunctionLocation
13.0622102501752watchdog( )../bootstrap.inc:0
23.0622102503816module_invoke( )../bootstrap.inc:967
33.0622102505672call_user_func_array ( )../module.inc:462
43.0622102506008devel_watchdog( )../module.inc:462
53.0622102506712decode_entities( )../devel.module:382
63.0628102508824drupal_error_handler( )../devel.module:340
73.0628102512512watchdog( )../common.inc:663
83.0629102514576module_invoke( )../bootstrap.inc:967
93.0629102516432call_user_func_array ( )../module.inc:462
103.0629102516768devel_watchdog( )../module.inc:462
113.0629102517544decode_entities( )../devel.module:382