Обсуждение:Факторизация графов — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Задача о поиске произвольного f-фактора)
(Задача о поиске произвольного f-фактора)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 6: Строка 6:
 
|definition = Пусть задана функция <tex>f : V(G) \rightarrow \mathbb{N}</tex>, такая что <tex>\forall~v \in V(G):f(v)\leq \text{deg}(v)</tex>. Тогда остовный подграф <tex>G_f</tex> в котором степень каждой вершины <tex>v</tex> равна <tex>f(v)</tex> называется '''<tex>f</tex>-фактором'''.
 
|definition = Пусть задана функция <tex>f : V(G) \rightarrow \mathbb{N}</tex>, такая что <tex>\forall~v \in V(G):f(v)\leq \text{deg}(v)</tex>. Тогда остовный подграф <tex>G_f</tex> в котором степень каждой вершины <tex>v</tex> равна <tex>f(v)</tex> называется '''<tex>f</tex>-фактором'''.
 
}}
 
}}
 +
 +
 +
[[Файл:1-A-general-graph-G-with-a-3-regular-factor-2-A-general-graph-G-with-an-f-factor (1).png|700px|thumb|centre| Примеры факторов в графе: (1) {{---}} <tex>3</tex>-фактор, (2) {{---}} <tex>f</tex>-фактор (значения <tex>f(v)</tex> указаны возле вершин)]]
 +
  
 
== Задача о поиске произвольного <tex>f</tex>-фактора ==
 
== Задача о поиске произвольного <tex>f</tex>-фактора ==
 +
 +
Сведем задачу о поиске <tex>f</tex>-фактора к задаче о поиске наибольшего паросочетания.
  
 
Пусть дан граф <tex>G</tex> и функция <tex>f : V(G) \rightarrow \mathbb{N}</tex>. Построим граф <tex>G^*</tex> следующим образом.  
 
Пусть дан граф <tex>G</tex> и функция <tex>f : V(G) \rightarrow \mathbb{N}</tex>. Построим граф <tex>G^*</tex> следующим образом.  
# Для каждого ребра <tex>(u,w)\in E(G)</tex> добавим в граф <tex>G^*</tex> две новых вершины <tex>e(u)</tex> и <tex>e(w)</tex>, соответствующие <tex>u</tex> и <tex>w</tex>, и соединим их ребром. В результате каждой вершине <tex>v \in V(G)</tex> будет соответствовать множество <tex>S(v) \subset V(G_f^*)</tex> такое что <tex>|S(v)|=deg(v)</tex>; Каждому ребру <tex>(u,w) \in E(G)</tex> соответствует ребро <tex>(e(u),e(w))</tex>, причем ни для каких двух ребер из <tex>E(G)</tex> концы соответствующих им ребер в <tex>G^*</tex> не пересекаются.
+
# Для каждого ребра <tex>(u,w)\in E(G)</tex> добавим в граф <tex>G^*</tex> по одной новой вершине в множества <tex>S(u)</tex> и <tex>S(w)</tex>, и соединим их ребром <tex>(e(u),e(w))</tex>. В результате каждой вершине <tex>v \in V(G)</tex> будет соответствовать множество <tex>S(v) \subset V(G^*)</tex> такое что <tex>|S(v)|=deg(v)</tex>; Каждому ребру <tex>(u,w) \in E(G)</tex> будет соответствовать ребро <tex>(e(u),e(w))</tex>, причем ни для каких двух ребер из <tex>E(G)</tex> концы соответствующих им ребер в <tex>G^*</tex> не пересекаются.
 
# Для каждой вершины <tex>v\in V(G)</tex> добавим в <tex>G^*</tex> новые <tex>deg(v)-f(v)</tex> вершин, образующие множество <tex>T(v)</tex>. Каждую вершину из <tex>T(v)</tex> свяжем ребром с каждой вершиной из <tex>S(v)</tex>. В результате для каждой вершины <tex>v \in V(G)</tex> Множество <tex>S(v)\cup T(v)</tex> образует полный двудольный граф.  
 
# Для каждой вершины <tex>v\in V(G)</tex> добавим в <tex>G^*</tex> новые <tex>deg(v)-f(v)</tex> вершин, образующие множество <tex>T(v)</tex>. Каждую вершину из <tex>T(v)</tex> свяжем ребром с каждой вершиной из <tex>S(v)</tex>. В результате для каждой вершины <tex>v \in V(G)</tex> Множество <tex>S(v)\cup T(v)</tex> образует полный двудольный граф.  
 +
 +
[[Файл:A-general-graph-G-with-an-f-factor-and-the-corresponding-simple-graph-G-with-a.png|700px|thumb|centre| Граф <tex>G</tex> и соответствующий ему граф <tex>G^*</tex>]]
  
 
{{Теорема
 
{{Теорема
 
|statement =  
 
|statement =  
Граф <tex>G</tex> имеет <tex>f</tex>-фактор тогда и только тогда, когда соответствующий данным графу и функции граф <tex>G^*</tex> имеет совершенное паросочетание.
+
Граф <tex>G</tex> имеет <tex>f</tex>-фактор тогда и только тогда, когда соответствующий графу <tex>G</tex> и функции <tex>f</tex> граф <tex>G^*</tex> имеет совершенное паросочетание.
 
|proof =  
 
|proof =  
 
<tex>\Rightarrow</tex>
 
<tex>\Rightarrow</tex>
Строка 21: Строка 29:
 
Пусть граф <tex>G</tex> имеет <tex>f</tex>-фактор <tex>G_f</tex>. Построим паросочетание <tex>M</tex> для графа <tex>G^*</tex> следующим образом:
 
Пусть граф <tex>G</tex> имеет <tex>f</tex>-фактор <tex>G_f</tex>. Построим паросочетание <tex>M</tex> для графа <tex>G^*</tex> следующим образом:
 
# Для каждого ребра <tex>(u,w)\in G_f</tex> добавим в <tex>M</tex>  соответствующее ему ребро из <tex>G^*</tex> . Теперь для каждой вершины <tex>v \in V(g)</tex> <tex>f(v)</tex> вершин из множества <tex>S(v)</tex> покрыты <tex>M</tex> .
 
# Для каждого ребра <tex>(u,w)\in G_f</tex> добавим в <tex>M</tex>  соответствующее ему ребро из <tex>G^*</tex> . Теперь для каждой вершины <tex>v \in V(g)</tex> <tex>f(v)</tex> вершин из множества <tex>S(v)</tex> покрыты <tex>M</tex> .
# Для каждой вершины <tex>v \in V(g)</tex> пусть <tex>R(v)\subset S(v)</tex> - множество вершин еще не покрытых <tex>M</tex>. <tex>R(v)\cup T(v)</tex> является полным двудольным графом, причем размер каждой из долей равен <tex>deg(v)-f(v)</tex>, следовательно этот граф имеет совершенное паросочетание <tex>M_v</tex>. Добавим каждое ребро из <tex>M_v</tex> в <tex>M</tex>.
+
# Для каждой вершины <tex>v \in V(g)</tex> пусть <tex>R(v)\subset S(v)</tex> {{---}} множество вершин еще не покрытых <tex>M</tex>. <tex>R(v)\cup T(v)</tex> является полным двудольным графом, причем размер каждой из долей равен <tex>deg(v)-f(v)</tex>, следовательно этот граф имеет совершенное паросочетание <tex>M_v</tex>. Добавим каждое ребро из <tex>M_v</tex> в <tex>M</tex>.
 
В результате каждая вершина в <tex>G^*</tex> покрыта <tex>M</tex>, следовательно <tex>M</tex> является совершенным паросочетанием.
 
В результате каждая вершина в <tex>G^*</tex> покрыта <tex>M</tex>, следовательно <tex>M</tex> является совершенным паросочетанием.
  
Строка 29: Строка 37:
 
}}
 
}}
  
Из доказательства напрямую следует, что задача о поиске произвольного <tex>f</tex>-фактора графа <tex>G</tex> сводится к поиску совершенного паросочетания в графе <tex>G^*</tex>. Т.к. <tex>G^*</tex> в общем случае не является двудольным, для решения этой задачи можно воспользваться [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D1%8F_%D1%86%D0%B2%D0%B5%D1%82%D0%BA%D0%BE%D0%B2 Алгоритмом Эдмондса для поиска наибольшего паросочетания].
+
Из доказательства напрямую следует, что для нахождения <tex>f</tex>-фактора графа <tex>G</tex> достаточно найти совершенное паросочетание в графе <tex>G^*</tex>. Т.к. <tex>G^*</tex> в общем случае не является двудольным, для решения этой задачи можно воспользваться [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D1%8F_%D1%86%D0%B2%D0%B5%D1%82%D0%BA%D0%BE%D0%B2 Алгоритмом Эдмондса для поиска наибольшего паросочетания].

Текущая версия на 21:24, 29 декабря 2019

Определение:
[math]k[/math]-факторрегулярный остовный подграф степени [math]k[/math]. Если граф [math]G[/math] представляет собой сумму [math]k[/math]-факторов, то их объединение называется [math]k[/math]-факторизацией, а сам граф [math]G[/math] назыается [math]k[/math]-факторизуемым.


Определение:
Пусть задана функция [math]f : V(G) \rightarrow \mathbb{N}[/math], такая что [math]\forall~v \in V(G):f(v)\leq \text{deg}(v)[/math]. Тогда остовный подграф [math]G_f[/math] в котором степень каждой вершины [math]v[/math] равна [math]f(v)[/math] называется [math]f[/math]-фактором.


Примеры факторов в графе: (1) — [math]3[/math]-фактор, (2) — [math]f[/math]-фактор (значения [math]f(v)[/math] указаны возле вершин)


Задача о поиске произвольного [math]f[/math]-фактора

Сведем задачу о поиске [math]f[/math]-фактора к задаче о поиске наибольшего паросочетания.

Пусть дан граф [math]G[/math] и функция [math]f : V(G) \rightarrow \mathbb{N}[/math]. Построим граф [math]G^*[/math] следующим образом.

  1. Для каждого ребра [math](u,w)\in E(G)[/math] добавим в граф [math]G^*[/math] по одной новой вершине в множества [math]S(u)[/math] и [math]S(w)[/math], и соединим их ребром [math](e(u),e(w))[/math]. В результате каждой вершине [math]v \in V(G)[/math] будет соответствовать множество [math]S(v) \subset V(G^*)[/math] такое что [math]|S(v)|=deg(v)[/math]; Каждому ребру [math](u,w) \in E(G)[/math] будет соответствовать ребро [math](e(u),e(w))[/math], причем ни для каких двух ребер из [math]E(G)[/math] концы соответствующих им ребер в [math]G^*[/math] не пересекаются.
  2. Для каждой вершины [math]v\in V(G)[/math] добавим в [math]G^*[/math] новые [math]deg(v)-f(v)[/math] вершин, образующие множество [math]T(v)[/math]. Каждую вершину из [math]T(v)[/math] свяжем ребром с каждой вершиной из [math]S(v)[/math]. В результате для каждой вершины [math]v \in V(G)[/math] Множество [math]S(v)\cup T(v)[/math] образует полный двудольный граф.
Граф [math]G[/math] и соответствующий ему граф [math]G^*[/math]
Теорема:
Граф [math]G[/math] имеет [math]f[/math]-фактор тогда и только тогда, когда соответствующий графу [math]G[/math] и функции [math]f[/math] граф [math]G^*[/math] имеет совершенное паросочетание.
Доказательство:
[math]\triangleright[/math]

[math]\Rightarrow[/math]

Пусть граф [math]G[/math] имеет [math]f[/math]-фактор [math]G_f[/math]. Построим паросочетание [math]M[/math] для графа [math]G^*[/math] следующим образом:

  1. Для каждого ребра [math](u,w)\in G_f[/math] добавим в [math]M[/math] соответствующее ему ребро из [math]G^*[/math] . Теперь для каждой вершины [math]v \in V(g)[/math] [math]f(v)[/math] вершин из множества [math]S(v)[/math] покрыты [math]M[/math] .
  2. Для каждой вершины [math]v \in V(g)[/math] пусть [math]R(v)\subset S(v)[/math] — множество вершин еще не покрытых [math]M[/math]. [math]R(v)\cup T(v)[/math] является полным двудольным графом, причем размер каждой из долей равен [math]deg(v)-f(v)[/math], следовательно этот граф имеет совершенное паросочетание [math]M_v[/math]. Добавим каждое ребро из [math]M_v[/math] в [math]M[/math].

В результате каждая вершина в [math]G^*[/math] покрыта [math]M[/math], следовательно [math]M[/math] является совершенным паросочетанием.

[math]\Leftarrow[/math]

Пусть [math]G^*[/math] имеет совершенное паросочетание [math]M[/math]. Для каждой вершины [math]v\in V(G)[/math] [math]T(v)[/math] является независимым множеством и полностью покрыто [math]M[/math], следовательно множество [math]R(v)\subset S(v)[/math] покрыто ребрами, концы которых лежат в [math]T(v)[/math], а значит каждая вершина из [math]S(v)\setminus R(v)[/math] покрыта ребром, второй конец которого принадлежит [math]S(w) : w \in V(G)[/math], причем [math]|S(v)\setminus R(v)| = deg(v)-(deg(v)-f(v))=f(v)[/math]. Поэтому если мы добавим в [math]G_f[/math] все ребра соответствующие ребрам из [math]M[/math] покрывающим [math]S(v)\setminus R(v) : v \in V(G)[/math], то есть все ребра из [math]M[/math] концы которых лежат в множествах [math]S[/math], то степень каждой вершины [math]v \in G_f[/math] будет равна [math]f(v)[/math], а значит [math]G_f[/math] будет являться [math]f[/math]-фактором.
[math]\triangleleft[/math]

Из доказательства напрямую следует, что для нахождения [math]f[/math]-фактора графа [math]G[/math] достаточно найти совершенное паросочетание в графе [math]G^*[/math]. Т.к. [math]G^*[/math] в общем случае не является двудольным, для решения этой задачи можно воспользваться Алгоритмом Эдмондса для поиска наибольшего паросочетания.