Максимальное количество попарно непересекающихся остовных деревьев в графе с n вершинами — различия между версиями
Строка 2: | Строка 2: | ||
|id = max_spanning_tree | |id = max_spanning_tree | ||
|statement=Максимальное количество попарно непересекающихся [[Остовные деревья: определения, лемма о безопасном ребре#spanning_tree| остовных деревьев]] в графе с <tex>n</tex> вершинами равно <tex> \left \lfloor {\dfrac{n}{2}}\right \rfloor </tex> | |statement=Максимальное количество попарно непересекающихся [[Остовные деревья: определения, лемма о безопасном ребре#spanning_tree| остовных деревьев]] в графе с <tex>n</tex> вершинами равно <tex> \left \lfloor {\dfrac{n}{2}}\right \rfloor </tex> | ||
− | |proof = | + | |proof = |
#Очевидно, что наибольшее количество непересекающихся остовных деревьев может быть только в полном графе из <tex>n</tex> вершин. Количество ребер в таком графе равно <tex> \dfrac{n(n - 1)}{2}</tex>, а в каждом дереве <tex>n - | #Очевидно, что наибольшее количество непересекающихся остовных деревьев может быть только в полном графе из <tex>n</tex> вершин. Количество ребер в таком графе равно <tex> \dfrac{n(n - 1)}{2}</tex>, а в каждом дереве <tex>n - | ||
1</tex> ребро. Значит, в полном графе мы сможем построить не более <tex> \left \lfloor {\dfrac{n(n - 1)}{2(n - 1)}}\right \rfloor =</tex> <tex dpi = "130">\left \lfloor {\dfrac{n}{2}}\right \rfloor</tex> остовных деревьев. | 1</tex> ребро. Значит, в полном графе мы сможем построить не более <tex> \left \lfloor {\dfrac{n(n - 1)}{2(n - 1)}}\right \rfloor =</tex> <tex dpi = "130">\left \lfloor {\dfrac{n}{2}}\right \rfloor</tex> остовных деревьев. | ||
}} | }} | ||
− | ==Алгоритм== | + | ==Алгоритм== |
− | ===Описание алгоритма=== | + | ===Описание алгоритма=== |
Расположим вершины на окружности так, чтобы они образовывали правильный многоугольник, и выберем начальную вершину '''(рис.1)'''. Для <tex>\left \lfloor {\dfrac{n}{2}}\right \rfloor</tex> вершин по часовой стрелке, начиная с этой вершины, будем строить остовные деревья. Для <tex>i</tex>-ой вершины строим такой путь <tex>:</tex><tex>V_i V_{i+1} V_{i-1} V_{i+2} V_{i-2}\ldots, </tex> {{---}} до тех пор, пока не соединим все вершины. Это и будет остовным деревом. '''(рис.2-3)''' | Расположим вершины на окружности так, чтобы они образовывали правильный многоугольник, и выберем начальную вершину '''(рис.1)'''. Для <tex>\left \lfloor {\dfrac{n}{2}}\right \rfloor</tex> вершин по часовой стрелке, начиная с этой вершины, будем строить остовные деревья. Для <tex>i</tex>-ой вершины строим такой путь <tex>:</tex><tex>V_i V_{i+1} V_{i-1} V_{i+2} V_{i-2}\ldots, </tex> {{---}} до тех пор, пока не соединим все вершины. Это и будет остовным деревом. '''(рис.2-3)''' | ||
− | {| cellpadding="10" | + | {| cellpadding="10" |
|- | |- | ||
|[[Файл:Max spanning tree1.png|thumb|300px|center|Рис.1 Стрелкой указана начальная вершина]] || [[Файл:Max spanning tree2.png|thumb|339px|center|Рис.2 Красным цветом выделено первое построенное остовное дерево]] || [[Файл:Max spanning tree6.png|thumb|270px|center|Рис.3 Все остовные деревья]] | |[[Файл:Max spanning tree1.png|thumb|300px|center|Рис.1 Стрелкой указана начальная вершина]] || [[Файл:Max spanning tree2.png|thumb|339px|center|Рис.2 Красным цветом выделено первое построенное остовное дерево]] || [[Файл:Max spanning tree6.png|thumb|270px|center|Рис.3 Все остовные деревья]] | ||
− | |} | + | |} |
===Доказательство корректности=== | ===Доказательство корректности=== |
Версия 16:05, 15 декабря 2017
Утверждение: |
Максимальное количество попарно непересекающихся остовных деревьев в графе с вершинами равно |
|
Алгоритм
Описание алгоритма
Расположим вершины на окружности так, чтобы они образовывали правильный многоугольник, и выберем начальную вершину (рис.1). Для
вершин по часовой стрелке, начиная с этой вершины, будем строить остовные деревья. Для -ой вершины строим такой путь — до тех пор, пока не соединим все вершины. Это и будет остовным деревом. (рис.2-3)Доказательство корректности
Докажем, что построенные с помощью такого алгоритма остовные деревья будут попарно непересекающимися. Для этого докажем, что никакие ребра не совпадут. Ребра могут совпасть только в том случае, если дуги, на которые эти ребра опираются, будут одинаковой длины. Заметим, что при построении каждого последующего дерева его ребра получаются из поворотов ребер предыдущего на длину
, где — длина окружности. Рассмотрим первое построенное остовное дерево.(рис.3) В нем не более -х ребер имеют одинаковую длину дуги (длина дуги у ребра, расположенного на диаметре окружности, не совпадает с длиной дуги любого другого ребра данного остовного дерева). Значит, повороты только этих ребер могут совпасть между собой.- Докажем, что повороты ребра, расположенного на диаметре окружности, не совпадут друг с другом (если
Чтобы хоть какой-то поворот совпал, мы должны повернуть ребро на . Каждый раз мы поворачиваем ребро на . А так как мы поворачиваем ребро раз, то в сумме мы повернем его на
. А это значит, что никакие ребра не совпадут друг с другом. (рис.4)
нечетно, то такого ребра не будет). - Докажем для остальных ребер. (рис.5)
Возьмем ребро, которое не лежит на диаметре окружности. В данном остовном дереве есть ребро, которое имеет такую же длину дуги. Ориентируем данные ребра в сторону часовой стрелки. Чтобы повороты этих ребер совпали, нужно, чтобы совпали их начала и концы. Покажем, что их начала никогда не совпадут. Чтобы начало первого ребра совпало с началом второго, нужно первое ребро повернуть хотя бы на половину длины окружности, то есть на . Для этого нам нужно сделать поворотов: . Но мы делаем только поворот. Аналогично с поворотом второго ребра. Для нечетных граф будет неполным, поэтому даже поворотов может не хватить для совпадения ребер.