Факторизация графов — различия между версиями
м |
м (rollbackEdits.php mass rollback) |
||
(не показано 19 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
{{Определение | {{Определение | ||
− | |definition ='''Фактором ''' ''(англ. factor)'' графа <tex>G</tex> называется остовный подграф графа <tex>G</tex>, | + | |definition ='''Фактором ''' ''(англ. factor)'' [[Основные определения теории графов|графа]] <tex>G</tex> называется [[Остовные деревья: определения, лемма о безопасном ребре|остовный подграф]] графа <tex>G</tex>, имеющий хотя бы одно ребро. |
}} | }} | ||
Строка 8: | Строка 8: | ||
{{Определение | {{Определение | ||
− | |definition = '''<tex> | + | |definition = '''<tex>k</tex>-фактор''' — [[Основные определения теории графов|регулярный]] остовный подграф степени <tex>k</tex>. Если граф <tex>G</tex> представляет собой сумму <tex>k</tex>-факторов, то их объединение называется <tex>k</tex>-факторизацией, а сам граф <tex>G</tex> назыается <tex>k</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|right| Примеры факторов в графе: (1) {{---}} <tex>3</tex>-фактор, (2) {{---}} <tex>f</tex>-фактор (значения <tex>f(v)</tex> указаны возле вершин)]] | ||
+ | |||
+ | |||
+ | == Задача о поиске произвольного <tex>f</tex>-фактора == | ||
+ | |||
+ | Сведем задачу о поиске <tex>f</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>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> образует полный двудольный граф. | ||
+ | |||
+ | [[Файл: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 = | ||
+ | Граф <tex>G</tex> имеет <tex>f</tex>-фактор тогда и только тогда, когда соответствующий графу <tex>G</tex> и функции <tex>f</tex> граф <tex>G^*</tex> имеет совершенное паросочетание. | ||
+ | |proof = | ||
+ | <tex>\Rightarrow</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>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>\Leftarrow</tex> | ||
+ | |||
+ | Пусть <tex>G^*</tex> имеет совершенное паросочетание <tex>M</tex>. Для каждой вершины <tex>v\in V(G)</tex> <tex>T(v)</tex> является независимым множеством и полностью покрыто <tex>M</tex>, следовательно множество <tex>R(v)\subset S(v)</tex> покрыто ребрами, концы которых лежат в <tex>T(v)</tex>, а значит каждая вершина из <tex>S(v)\setminus R(v)</tex> покрыта ребром, второй конец которого принадлежит <tex>S(w) : w \in V(G)</tex>, причем <tex>|S(v)\setminus R(v)| = deg(v)-(deg(v)-f(v))=f(v)</tex>. Поэтому если мы добавим в <tex>G_f</tex> все ребра соответствующие ребрам из <tex>M</tex> покрывающим <tex>S(v)\setminus R(v) : v \in V(G)</tex>, то есть все ребра из <tex>M</tex> концы которых лежат в множествах <tex>S</tex>, то степень каждой вершины <tex>v \in G_f</tex> будет равна <tex>f(v)</tex>, а значит <tex>G_f</tex> будет являться <tex>f</tex>-фактором. | ||
+ | }} | ||
+ | |||
+ | Из доказательства напрямую следует, что для нахождения <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>O(E \cdot V^2)</tex>. Построение графа <tex>G^*</tex> можно выполнить за время <tex>O(E+V)</tex>. Поэтому итоговая асимптотика {{---}} <tex>O(E \cdot V^2)</tex> | ||
== 1-факторизация == | == 1-факторизация == | ||
− | |||
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
− | Полный граф <tex>K_{2n}</tex> <tex>1</tex>-факторизуем. | + | [[Основные определения теории графов|Полный]] граф <tex>K_{2n}</tex> <tex>1</tex>-факторизуем. |
|proof= | |proof= | ||
+ | [[Файл: Факторизация K6.png|thumb|360px|right|<tex>1</tex>-факторизация графа <tex>K_6</tex>]] | ||
Нам нужно только указать разбиение множества рёбер <tex>E</tex> графа на <tex>(2n - 1)</tex> <tex>1</tex>-фактора. Для этого обозначим вершины графа <tex>G</tex> через <tex>v_1, v_2, \dots, v_{2n}</tex> и определим множества рёбер <tex>X_i = (v_iv_{2n}) \cup (v_{i - j}v_{i + j}; j = 1, 2, \dots, n - 1)</tex>, <tex>i = 1, 2, \dots, 2n - 1 </tex>, где каждый из индексов <tex>i - j</tex> и <tex>i + j</tex> является одним из чисел <tex>1, 2, \dots, 2n - 1</tex>; здесь сумма и разность берутся по модулю <tex>2n - 1</tex>. Легко видеть, что набор <tex>X_i</tex> даёт необходимое разбиение множества <tex>X</tex>, а сумма подграфов <tex>G_i</tex>, порождённых множествами <tex>X_i</tex>, является <tex>1</tex>-факторизацией графа <tex>K_{2n}</tex>. | Нам нужно только указать разбиение множества рёбер <tex>E</tex> графа на <tex>(2n - 1)</tex> <tex>1</tex>-фактора. Для этого обозначим вершины графа <tex>G</tex> через <tex>v_1, v_2, \dots, v_{2n}</tex> и определим множества рёбер <tex>X_i = (v_iv_{2n}) \cup (v_{i - j}v_{i + j}; j = 1, 2, \dots, n - 1)</tex>, <tex>i = 1, 2, \dots, 2n - 1 </tex>, где каждый из индексов <tex>i - j</tex> и <tex>i + j</tex> является одним из чисел <tex>1, 2, \dots, 2n - 1</tex>; здесь сумма и разность берутся по модулю <tex>2n - 1</tex>. Легко видеть, что набор <tex>X_i</tex> даёт необходимое разбиение множества <tex>X</tex>, а сумма подграфов <tex>G_i</tex>, порождённых множествами <tex>X_i</tex>, является <tex>1</tex>-факторизацией графа <tex>K_{2n}</tex>. | ||
}} | }} | ||
+ | == 2-факторизация == | ||
+ | |||
+ | {{Утверждение | ||
+ | |statement = | ||
+ | Если граф <tex>2</tex>-факторизуем, то каждый его фактор должен быть объединением непересекающихся (по вершинам) [[Основные определения теории графов|циклов]]. | ||
+ | |proof = | ||
+ | Начнём обход <tex>2</tex>-фактора с какой-то вершины. Пойдём по одному из её рёбер и попадаем в смежную ей вершину. Далее идём по рёбрам, по которым мы ещё не ходили. Мы входим в вершину по одному ребру и выходим по другому, так как степень каждой вершины равна <tex>2</tex>, пока не вернёмся в первую вершину. Это цикл, так как в каждой вершине мы были только один раз. Если есть вершины, которые мы не посетили, то снова начинаем обход с любой из таких вершин. В вершины прежних циклов попасть нельзя, так как мы уже проходили по рёбрам этих вершин. Значит, циклы не пересекаются по вершинам. | ||
+ | }} | ||
+ | |||
+ | {{Теорема | ||
+ | |id=regular2factor | ||
+ | |author=J. Petersen, 1981 | ||
+ | |about = О наличии <tex>2</tex>-фактора в регулярном графе чётной степени. | ||
+ | |statement = Пусть <tex>G</tex> {{---}} [[Основные определения теории графов#defRegularGraph |регулярный граф]] чётной степени. Тогда в <tex>G</tex> есть <tex>2</tex>-фактор. | ||
+ | |proof = | ||
+ | Пусть <tex>G</tex> {{---}} <tex>2k</tex>-регулярный граф, пусть <tex>G</tex> [[Отношение связности, компоненты связности#connected_graph | связен]]. | ||
+ | |||
+ | Согласно [[Эйлеровость графов#eulerTheorem | критерию эйлеровости]] граф <tex>G</tex> имеет эйлеров цикл <tex>v_0e_1 \cdots e_lv_l</tex>, где <tex>v_0 = v_l</tex>. | ||
+ | |||
+ | Будем строить граф <tex>H</tex> следующим образом: разделим каждую вершину графа <tex>G</tex> <tex>v</tex> на две, назовём их <tex>v^-</tex> и <tex>v^+</tex>. Заменим каждое ребро в эйлеровом обходе <tex>v_iv_{i+1}</tex> на ребро <tex>v_i^-v_{i+1}^+</tex> | ||
+ | |||
+ | [[Файл:2-фактор(1).png|300px|thumb|right|Пример регулярного графа чётной степени. В нём есть эйлеров цикл <tex>1</tex>{{---}}<tex>2</tex>{{---}}<tex>3</tex>{{---}}<tex>4</tex>{{---}}<tex>1</tex>]] | ||
+ | |||
+ | [[Файл:2-фактор(2).png|300px|thumb|right|Соответствующий ему граф <tex>H</tex>]] | ||
+ | |||
+ | |||
+ | Получившийся граф является <tex>k</tex>-регулярным, и по [[Рёберная раскраска двудольного графа#lem2 | лемме о существовании совершенного паросочетания в регулярном двудольном графе]] в нём есть совершенное паросочетание, то есть <tex>1</tex>-фактор. | ||
+ | |||
+ | Объединим вершины <tex>v^-</tex> и <tex>v^+</tex> обратно в вершину <tex>v</tex>. Так как в графе <tex>H</tex> каждой вершине было инцидентно <tex>1</tex> ребро, то после объединения в графе <tex>G</tex> каждой вершине будет инцидентно <tex>2</tex> ребра. | ||
+ | |||
+ | Если <tex>G</tex> несвязен, то аналогичные рассуждения можно провести для каждой его [[Отношение связности, компоненты связности#def2 | компоненты связности]], и, таким образом, найти <tex>2</tex>-фактор в каждой его компоненте связности. Тогда каждой вершине каждой его компоненты связности будет инцидентно <tex>2</tex> ребра, значит, каждой вершине <tex>G</tex> будет инцидентно <tex>2</tex> ребра, значит, в <tex>G</tex> существует <tex>2</tex>-фактор. | ||
+ | }} | ||
+ | |||
+ | [[Файл:Факторизация K7 разбиение.png|300px|thumb|right| Пример графа, имеющего <tex>3</tex> различных <tex>2</tex>-фактора, то есть разбиваемого на <tex>3</tex> рёберно непересекающихся [[Гамильтоновы графы#defCycle|гамильтоновых цикла]]]] | ||
+ | |||
+ | Заметим, что если <tex>2</tex>-фактор связен, то он является [[Гамильтоновы графы|гамильтоновым циклом]]. | ||
+ | |||
+ | {{Теорема | ||
+ | |statement = | ||
+ | Граф <tex>K_{2n+1}</tex> можно представить в виде суммы <tex>n</tex> гамильтоновых циклов. | ||
+ | |proof = | ||
+ | [[Файл: Факторизация K7.png|thumb|360px|right|<tex>2</tex>-факторизация графа <tex>K_7</tex>. Рёбра, отмеченные пунктиром, не пересекают другие рёбра при правильной [[Укладка графа на плоскости|укладке графа]].]]Для того чтобы в графе <tex>K_{2n+1}</tex> построить <tex>n</tex> гамильтоновых циклов, непересекающихся по рёбрам, перенумеруем сначала его вершины <tex>v_1, v_2, \dots, v_{2n+1}</tex>. На множестве вершин <tex>v_1, v_2, \dots, v_{2n}</tex> зададим <tex>n</tex> непересекающихся простых цепей <tex>P_i=v_i v_{i-1} v_{i+1} v_{i-2} \dots v_{i+n-1}v_{i-n}</tex> следующим образом: <tex>j</tex>-ой вершине цепи <tex>P_i</tex> является вершина <tex>v_k</tex>, где <tex>k=i+(-1)^{j+1}\dfrac{j}{2}</tex>, все индексы приводятся к числам <tex>1, 2, \dots, 2n </tex> по модулю <tex>2n</tex>. Гамильтонов цикл <tex>Z_i</tex> можно получить, соединив вершину <tex>v_{2n+1}</tex> с концевыми вершинами цепи <tex>P_i</tex>. | ||
+ | }} | ||
+ | |||
+ | == Замечания == | ||
+ | * Факторизация графов используется как один из способов построения покрывающих наборов, используемых при создании тестов для программ с большим количеством параметров. | ||
+ | * <tex>1</tex>-факторизация <tex>k</tex>-регулярного графа является рёберной [[Раскраска графа|<tex>k</tex>-раскраской графа]]. | ||
+ | == См. также == | ||
+ | * [[Гамильтоновы графы]] | ||
+ | * [[Остовные деревья: определения, лемма о безопасном ребре|Остовные деревья]] | ||
+ | * [[Основные определения теории графов]] | ||
+ | |||
+ | == Источники информации == | ||
+ | * Харари Фрэнк '''Теория графов''' Пер. с англ. и предисл. В. П. Козырева. Под ред. Г.П.Гаврилова. Изд. 2-е. — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6 | ||
+ | * [http://en.wikipedia.org/wiki/Graph_factorization Wikipedia — Graph factorization] | ||
+ | * Factors and Factorizations of Graphs: Proof Techniques in Factor Theory / Jin Akiyama, Mikio Kano. — Springer Science & Business Media, 2011. ISBN 3642219187, 9783642219184. | ||
+ | |||
+ | [[Категория: Алгоритмы и структуры данных]] | ||
+ | [[Категория: Основные определения теории графов]] |
Текущая версия на 19:23, 4 сентября 2022
Определение: |
Фактором (англ. factor) графа называется остовный подграф графа , имеющий хотя бы одно ребро. |
Определение: |
Граф | — сумма факторов , если графы не имеют попарно общих рёбер, а является их объединением. Такое разложение называется факторизацией (англ. factorization) графа .
Определение: |
регулярный остовный подграф степени . Если граф представляет собой сумму -факторов, то их объединение называется -факторизацией, а сам граф назыается -факторизуемым. | -фактор —
Определение: |
Пусть задана функция | , такая что . Тогда остовный подграф в котором степень каждой вершины равна называется -фактором.
Содержание
Задача о поиске произвольного -фактора
Сведем задачу о поиске
-фактора к задаче о поиске наибольшего паросочетания.Пусть дан граф
и функция . Построим граф следующим образом.- Для каждого ребра добавим в граф по одной новой вершине в множества и , и соединим их ребром . В результате каждой вершине будет соответствовать множество такое что ; Каждому ребру будет соответствовать ребро , причем ни для каких двух ребер из концы соответствующих им ребер в не пересекаются.
- Для каждой вершины добавим в новые вершин, образующие множество . Каждую вершину из свяжем ребром с каждой вершиной из . В результате для каждой вершины Множество образует полный двудольный граф.
Теорема: |
Граф имеет -фактор тогда и только тогда, когда соответствующий графу и функции граф имеет совершенное паросочетание. |
Доказательство: |
Пусть граф имеет -фактор . Построим паросочетание для графа следующим образом:
В результате каждая вершина в покрыта , следовательно является совершенным паросочетанием.Пусть имеет совершенное паросочетание . Для каждой вершины является независимым множеством и полностью покрыто , следовательно множество покрыто ребрами, концы которых лежат в , а значит каждая вершина из покрыта ребром, второй конец которого принадлежит , причем . Поэтому если мы добавим в все ребра соответствующие ребрам из покрывающим , то есть все ребра из концы которых лежат в множествах , то степень каждой вершины будет равна , а значит будет являться -фактором. |
Из доказательства напрямую следует, что для нахождения Алгоритмом Эдмондса для поиска наибольшего паросочетания работающим за время . Построение графа можно выполнить за время . Поэтому итоговая асимптотика —
-фактора графа достаточно найти совершенное паросочетание в графе . Т.к. в общем случае не является двудольным, для решения этой задачи можно воспользваться1-факторизация
Теорема: |
Полный граф -факторизуем. |
Доказательство: |
Нам нужно только указать разбиение множества рёбер графа на -фактора. Для этого обозначим вершины графа через и определим множества рёбер , , где каждый из индексов и является одним из чисел ; здесь сумма и разность берутся по модулю . Легко видеть, что набор даёт необходимое разбиение множества , а сумма подграфов , порождённых множествами , является -факторизацией графа . |
2-факторизация
Утверждение: |
Если граф циклов. -факторизуем, то каждый его фактор должен быть объединением непересекающихся (по вершинам) |
Начнём обход | -фактора с какой-то вершины. Пойдём по одному из её рёбер и попадаем в смежную ей вершину. Далее идём по рёбрам, по которым мы ещё не ходили. Мы входим в вершину по одному ребру и выходим по другому, так как степень каждой вершины равна , пока не вернёмся в первую вершину. Это цикл, так как в каждой вершине мы были только один раз. Если есть вершины, которые мы не посетили, то снова начинаем обход с любой из таких вершин. В вершины прежних циклов попасть нельзя, так как мы уже проходили по рёбрам этих вершин. Значит, циклы не пересекаются по вершинам.
Теорема (J. Petersen, 1981, О наличии | -фактора в регулярном графе чётной степени.):
Пусть регулярный граф чётной степени. Тогда в есть -фактор. — |
Доказательство: |
Пусть связен. — -регулярный граф, пустьСогласно критерию эйлеровости граф имеет эйлеров цикл , где . Будем строить граф следующим образом: разделим каждую вершину графа на две, назовём их и . Заменим каждое ребро в эйлеровом обходе на ребро
Объединим вершины Если и обратно в вершину . Так как в графе каждой вершине было инцидентно ребро, то после объединения в графе каждой вершине будет инцидентно ребра. несвязен, то аналогичные рассуждения можно провести для каждой его компоненты связности, и, таким образом, найти -фактор в каждой его компоненте связности. Тогда каждой вершине каждой его компоненты связности будет инцидентно ребра, значит, каждой вершине будет инцидентно ребра, значит, в существует -фактор. |
Заметим, что если гамильтоновым циклом.
-фактор связен, то он являетсяТеорема: |
Граф можно представить в виде суммы гамильтоновых циклов. |
Доказательство: |
Для того чтобы в графе построить гамильтоновых циклов, непересекающихся по рёбрам, перенумеруем сначала его вершины . На множестве вершин зададим непересекающихся простых цепей следующим образом: -ой вершине цепи является вершина , где , все индексы приводятся к числам по модулю . Гамильтонов цикл можно получить, соединив вершину с концевыми вершинами цепи . |
Замечания
- Факторизация графов используется как один из способов построения покрывающих наборов, используемых при создании тестов для программ с большим количеством параметров.
- . -раскраской графа -факторизация -регулярного графа является рёберной
См. также
Источники информации
- Харари Фрэнк Теория графов Пер. с англ. и предисл. В. П. Козырева. Под ред. Г.П.Гаврилова. Изд. 2-е. — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6
- Wikipedia — Graph factorization
- Factors and Factorizations of Graphs: Proof Techniques in Factor Theory / Jin Akiyama, Mikio Kano. — Springer Science & Business Media, 2011. ISBN 3642219187, 9783642219184.