97
правок
Изменения
Импорт статьи о хроматическом многочлене
==Многопоточное слияниеХроматический многочлен пустого графа ==Как видно из оценки первого алгоритма, слияние является его узким местом. Попытаемся распараллелить слияние, для чего рассмотрим алгоритм рекурсивного слияния массивов <tex dpi="120">T[left_{1} \dots right_{1}]</tex> и <tex dpi="120">T[left_{2} \dots right_{2}]</tex> в массив <tex dpi="120">A[left_{3} \dots right_P(O_{3n}]</tex>:[[Файл:MergeMT.png|430px|thumb|Слияние массивов]]# Убедимся, что размер <tex dpi="120">T[left_{1} \dots right_{1}]</tex> больше либо равен размеру <tex dpi="120">T[left_{2} \dots right_{2}]</tex># Возьмем <tex dpi="120">x )= T[mid_{1}]</tex> - середину первого массива (<tex dpi="120">x</tex> также является и медианой этого массива)# При помощи [[Целочисленный двоичный поиск|бинарного поиска]] найдем <tex dpi="120">mid_^{2n}</tex> такое, что так как каждую из <tex dpi="120">\forall y \in T[left_{2} \dots mid_{2} - 1]: y < xn</tex># вершин нулевого графа <tex dpi="120">mid_{3} = left_{3} + (mid_{1} - left_{1}) + (mid_{2} - left_O_{2n})</tex># можно независимо окрасить в любой из <tex dpi="120">A[mid_{3}] = x</tex># Сольем <tex dpi="120">T[right_{1} \dots mid_{1} - 1]цветов.<br /tex> и Примечание. Нулевой граф <tex dpi="120">T[right_{2} \dots mid_O_{2n}]</tex> в также можно обозначать <tex dpi="120">A[right_{3} \dots mid_overline{3} - 1]</tex># Сольем <tex dpi="120">T[mid_K_{1n} + 1 \dots right_{1}]</tex> и (дополнительный граф для полного графа <tex dpi="120">T[mid_{2} \dots right_K_{2n}]</tex> в <tex dpi="120">A[mid_{3} + 1 \dots right_{3}]</tex>).
===РеализацияХроматический многочлен дерева =={{Теорема|about= // если <tex dpi="120">right \leqslant left</tex> возвращает <tex dpiхроматический многочлен дерева|statement="120">left</tex> // если Граф <tex dpi="120">x \leqslant T[left]G</tex>, возвращает с <tex dpi="120">leftn</tex> // иначе возвращает наибольший индекс <tex dpi="120">i</tex> из отрезка <tex dpi="120">[leftвершинами является деревом тогда и только тогда, right]когда </tex> такойP(G, что <tex dpix)="120">array[i x(x-1)^{n- 1] < x}</tex>.|proof= integer binarySearch(xСначала покажем, array, left, right) // слияние что хроматический многочлен любого дерева <tex dpi="120">T[left_{1} \dots right_{1}]</tex> и с <tex dpi="120">T[left_{2} \dots right_{2}]n</tex> в вершинами есть <tex dpi="120">A[left_{3} \dots right_{1} x(x- left_{1} + right_)^{2} n- left_{21}]</tex>.<br /> function mergeMT(T, leftДоказательство индукцией по числу <tex dpi="120">_{1}n</tex>, right. Для <tex dpi>n="120">_{1}</tex>, leftи <tex dpi>n="120">_{2}</tex>результат очевиден. Предположим, rightчто <tex dpi>P(T',x)="120">_x(x-1)^{n-2}</tex>, A, leftдля любого дерева <tex dpi="120">_{3}T'</tex>): nс количеством вершин равным <tex dpi="120">_{n-1}</tex> = right. Пусть <tex dpi="120">_{1}uv</tex> - left— ребро дерева <tex dpi="120">_{1}T</tex> + 1 n, такое что <tex dpi="120">_{2}v</tex> = rightявляется висячей вершиной. Хроматический многочлен дерева <tex dpi="120">_{2}T</tex> - leftбез ребра <tex dpi="120">_{2}uv</tex> + 1 '''if''' nравен <tex dpi>P(T/uv,x)="120">_x(x-1)^{1n-2}</tex> < nпо нашему предположению. Вершину <tex dpi="120">_{2}v</tex> swap(leftможно окрасить <tex dpi="120">_{x-1}</tex>способом, leftтак как её цвет должен только лишь отличаться от цвета вершины <tex dpi="120">_{2}u</tex>. Итого: <tex>P(T,x)=(x-1) swapP(right<tex dpiT/uv,x)="120">_x(x-1)^{n-1}</tex>, right.<tex dpi="120"br />_{2}<br /tex>) swap(nОбратно, пусть <tex dpi="120">_{1}G</tex>— граф, nу которого <tex dpi>P(G,x)="120">_x(x-1)^{2n-1}</tex>) '''if''' n<tex dpi="120">_{1}. Тогда верны два следующих утверждения:<br /tex> == 0 '''return''' '''else''' mid1. Граф <tex dpi="120">_{1}G</tex> = связен, потому что если было бы две компоненты связности (leftили больше), то <tex dpi="120">_{1}P(G,x)</tex> + rightделился бы на <tex dpi="120">_{1}x^2</tex>) без остатка.<br / >2 mid. В графе <tex dpi="120">_{2}G</tex> = binarySearch(T[midколичество рёбер равно <tex dpi="120">_{n-1}</tex>, так как по одной из теорем о коэффициентах хроматического многочлена ([[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена]], Tтеорема 4), leftколичество рёбер в графе соответствует коэффициенту при <tex dpi="120">_x^{2n-1}</tex>, rightвзятому со знаком минус. В нашем случае, этот коэффициент удобно искать, используя бином Ньютона:<tex dpi="120"br />_{2}</tex>{P(G,x) mid<tex dpi="120">_x(x-1)^{3n-1}</tex> = x\left<tex dpi="120">_{3}</tex> + (mid<tex dpi="120">_x^{n-1}</tex> - left<tex dpi="120">_{n-1 \choose 1}</tex>) + (mid<tex dpi="120">_x^{n-2}</tex> +{n- left<tex dpi="120">_{1 \choose 2}</tex>) A[mid<tex dpi="120">_x^{n-3}</tex>] = T[mid<tex dpi="120">_{1}</tex>] '''spawn''' mergeMT-...+(T, left<tex dpi="120">_{-1}</tex>, mid<tex dpi="120">_)^{1}</tex> n- 1, left<tex dpi="120">_{2}</tex>, mid<tex dpi\right)="120">_x^{2n}</tex> -(n- 1, A, left<tex dpi="120">_{3}</tex>) mergeMT(T, mid<tex dpi="120">_x^{n-1}</tex> + ...+(-1, right<tex dpi="120">_)^{n-1}x}</tex>, mid<tex dpi="120">_{2}<br /tex>, rightИз этих двух утверждений (связность и <tex dpi="120">_{2}n-1</tex>ребро) следует, A, midчто граф <tex dpi="120">_{3}G</tex> + является деревом (см. [[Дерево, эквивалентные определения]], утверждения 1и 3). '''sync'''}}
{{Теорема|about=2|statement=Оценка при фиксированном числе потоковСтарший коэффициент хроматического многочлена равен <tex>1</tex>.|proof=Воспользуемся рекуррентной формулой:<br/><tex>P(G,x) =ОчевидноP(G_{1},x) + P(G_{2}, что при отсутствии возможности запуска неограниченного количества независимых потоковx)</tex>, вычислительная сложность многопоточного алгоритма зависит от максимально возможного количества независимых потоков. Обозначим такое количество как <br/>где <tex dpi="120">N_G_{ind1}</tex>. Допустим— граф, полученный из <tex>G</tex> добавлением отсутствующего в <tex>G</tex> ребра <tex dpi="120">nuv</tex> много больше , а <tex dpi="120">N_G_{ind2}</tex>— граф, что полученный из <tex>G</tex> слиянием вершин <tex>u</tex> и <tex>v</tex> в общем случае верно для ПК одну и достаточно больших объемов данныхудалением возникших при этом кратных ребер. Оценим приведенные выше алгоритмы с учетом наложенных ограничений и допущенийПрименяя рекуррентную формулу повторно, хроматический полином можно представить в виде суммы хроматических полиномов полных графов, то есть:<br/>::[[#.D0.A1.D0.BE.D1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B0_.D1.81_.D0.BE.D0.B4.D0.BD.D0.BE.D0.BF.D0.BE.D1.82.D0.BE.D1.87.D0.BD.D1.8B.D0.BC_.D1.81.D0.BB.D0.B8.D1.8F.D0.BD.D0.B8.D0.B5.D0.BC|Сортировка с однопоточным слиянием]] будет иметь асимптотику <tex dpi>P(G,x) ="135">\Theta{P(\fracK_{n},x) + a_{N_1}P(K_{indn-1},x) + a_{2}\log \fracP(K_{n-2},x) + \ldots = x^{N_\underline{indn}} + n) = \Theta(a_{1}x^{\fracunderline{n-1}}+a_{N_2}x^{ind}}\log \fracunderline{n-2}{N_{ind}+\ldots})</tex><br/>Из этой формулы видно, что хроматический многочлен имеет старший коэффициент, равный <tex>1</tex>.}} {{Теорема|about=3|statement=Коэффициенты хроматического многочлена составляют знакопеременную последовательность.|proof=Индукция по количеству вершин.<br/>'''База индукции:'''<br/>::::Теорема верна для графа <tex>G</tex> из одной вершины, потому что <tex dpi>P(G,x)="135"x</tex>.<br/>\Theta'''Индукционный переход''' (\frac{<tex>n}{N_{ind}}\log \frac{to n}{N_{ind}}+1)</tex> операций нужно :<br/>Предположим, что теорема верна для всех графов на <tex>n</tex> вершинах. Рассмотрим графы на последовательную сортировку массива длиной <tex dpi="135">\fracn+1</tex> вершине.Индукционный переход будем доказывать индукцией по количеству ребер графа <tex>G</tex>. Если <tex>G</tex> не содержит ребер, то есть <tex>G</tex> является <tex>O_{n+1}</tex>, то его хроматический многочлен <tex>P(G,x)=x^{N_{ind}n+1}</tex>обладает доказываемым свойством.::::Теперь предположим, что для всех <tex dpi="135">\Theta(n+1,m)</tex> необходимо на последовательное слияние-графов теорема верна.::[[#Возьмем <tex>(n+1,m+1)</tex>-граф <tex>G_{1}</tex> и его ребро <tex>uv</tex>.D0.9C.D0.BD.D0.BE.D0.B3.D0.BE.D0.BF.D0.BE.D1.82.D0.BE.D1.87.D0.BD.D0.BE.D0.B5_.D1.81.D0.BB.D0.B8.D1.8F.D0.BD.D0.B8.D0.B5|Многопоточное слияние]] будет работать Обозначим за <tex dpi="135">\Theta((\fracG</tex> граф, полученный из <tex>G_{n1}</tex> удалением ребра <tex>uv</tex> (<tex>G=G_{N_{ind}1}-uv</tex>)^, а за <tex>G_{\log_{\frac{42}</tex> — граф, полученный из <tex>G_{31}}2} + \log n \cdot min</tex> слиянием вершин <tex>u</tex> и <tex>v</tex>. Тогда из рекуррентной формулы следует:<br/><tex>P(N_G_{ind1}, \log nx)=\ThetaP(G,x)-P(\fracG_{n}{N_{ind}})^{\log_{\frac{4}{3}}2},x)</tex>:.::::Прежде чем достигнуть ограничения на создание нового потокаТак как <tex>G</tex> — <tex>(n+1,m)</tex>-граф, алгоритм углубится на а в <tex dpi="110">min(N_G_{ind2}, \log </tex> — <tex>n)</tex> уровней вглубь дерева рекурсиивершин, где на каждом уровне выполняется бинпоиск за то для <tex>G</tex> и <tex dpi="135">\Theta(\log n)G_{2}</tex>теорема верна::::Асимптотика многопоточного слияния при работе в одном потоке по основной теореме рекуррентных соотношений равна <br/>::::<tex dpi="135">T_{\mathrm P(G,x)=x^{mergen+1}-a_{1}'(x^{n) = 2T_}+a_{\mathrm 2}x^{mergen-1}}'(\frac -a_{3}x^{4n-2}n) + \Thetaldots}</tex> ,<br/><tex>{P(\log nG_{2},x) = \Theta(nx^{\log_n}-b_{\frac1}x^{4n-1}+b_{32}x^{n-2}2+\ldots})</tex> ,<br/>::Оценим [[#.D0.A1.D0.BE.D1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B0_.D1.81_.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE.D0.BF.D0.BE.D1.82.D0.BE.D1.87.D0.BD.D1.8B.D0.BC_.D1.81.D0.BB.D0.B8.D1.8F.D0.BD.D0.B8.D0.B5.D0.BC|сортировку с многопоточным слиянием]] снизу:::::Части массива длиной где <tex dpi="135">\fraca_{n1}</tex>, <tex>a_{N_{ind}2}</tex> гарантированно будут сортироваться последовательно, т.к. только алгоритм сортировки запустит к моменту вызова …, <tex>\mathrm a_{mergeSortMT2n+1} </tex> от массива длиной , <tex dpi="135">\fracb_{n1}</tex>, <tex>b_{N_{ind}2}</tex> число потоков, равное …, <tex dpi="135">N_b_{indn}</tex>— некоторые неотрицательные целые числа. Тогда по основной теореме рекуррентных соотношенийИз этих равенств получаем:<br/>::::<tex dpi="135">T_{\mathrm {mergeSort}}'P(\fracG_{n}{N_{ind}1},x) = 2T_x^{\mathrm {mergeSortn+1}}'-(\fraca_{n1}+1)x^{2N_{indn}}) + \Theta(\fraca_{n2}+b_{N_{ind}1})x^{\log_{\frac{4n-1}{3}}2} = +\Theta(\frac{nldots</tex>.Видно, что в этом полученном полиноме коэффициенты составляют знакопеременную последовательность.}{N_{ind}})^ {\log_{\frac{Теорема|about=4}{|statement=Второй коэффициент хроматического многочлена равен по модулю количеству ребер графа.|proof=Из доказательства '''Теоремы (3}}2})''' видно, что при увеличении количества ребер графа на <tex>1</tex>Очевидно, что нижняя оценка алгоритма сортировки с многопоточным слиянием вышевторой коэффициент также увеличивается на <tex>1</tex>. Таким образом, при приведенных выше допущениях алгоритм сортировки с однопоточным слиянием эффективнее и его асимптотика составляет Так как для пустого графа второй коэффициент равен <tex dpi="120">\Theta(\frac{n}{N_{ind}}\log \frac{n}{N_{ind}})0</tex>, то утверждение верно для любого графа.}} ==Источники информацииЛитература ==#Cormen T1.HАсанов М. О., Leiserson CБаранский В.EА., Rivest RРасин В.LВ.- Дискретная математика: Графы, матроиды, Stein Cалгоритмы: Учебное пособие. 2-е изд., испр. и доп. - СПб.: Издательство "Лань", 2010. - 368 с.: ил. - (Учебники для вузов. Специальная литература). '''ISBN 978-5-8114-1068-2'''<br />2. Харари Ф. {{-Теория графов: Изд. 4-е. -}} Introduction to AlgorithmsМ.: Книжный дом "ЛИБРОКОМ", Third Edition2009. - 296 с. '''ISBN 978-5-397-00622-4''' [[Категория: Алгоритмы и структуры данных]][[Категория: Раскраски графов]]