Изменения
Нет описания правки
{{Определение|definition== Многопоточная сортировка слиянием ==Благодаря тому, что сортировка слиянием построена на принципе "Разделяй Пусть дан фиксированный граф <tex>G</tex> и властвуй", выполнение данного алгоритма можно весьма эффективно распараллелитьфиксированное число красок <tex>x</tex>. При оценке асимптотики допускается, что возможен запуск неограниченного количества независимых процессов, тКоличество способов правильной <tex>x</tex> — [[Раскраска графа|раскраски графа]] <tex>G</tex> называется '''хроматическим многочленом''' (англ.е''chromatic polynomial''). процессов с вычислительными ресурсамиОбозначение: <tex>P(G, не зависящими от других процессов, что на практике не достижимо. Более того, при реализации имеет смысл ограничить количество параллельных потоковx)</tex>.===Сортировка с однопоточным слиянием===Внесем в алгоритм сортировки слиянием следующую модификацию: будем сортировать левую и правую части массива параллельно.}}
===Сортировка с многопоточным слияниемХроматический многочлен простой цепи ===Приведем псевдокод алгоритмаПусть <tex>T_n</tex> — простая цепь, использующего слияние состоящая из <tex>n</tex> вершин. Рассмотрим процесс раскраски простой цепи: первую вершину можно покрасить в один из предыдущего раздела, сортирующего элементы <tex>A[leftA \dots rightA]x</tex> цветов, вторую и помещающего отсортированный массив последующие в один из <tex>x - 1</tex> цветов (т.е. так, чтобы цвет не совпадал с предыдущей вершиной). Тогда <tex>B[leftB \dots leftB + rightA P(T_n, x) = x(x - 1) ^ {n - leftA]1}</tex>.
{{Теорема|about=2|statement=Старший коэффициент хроматического многочлена равен <tex>1</tex>.|proof=Оценка при фиксированном числе потоковВоспользуемся рекуррентной формулой:<br/><tex>P(G,x) ===ОчевидноP(G_{1},x) + P(G_{2}, что при отсутствии возможности запуска неограниченного количества независимых потоковx)</tex>, вычислительная сложность многопоточного алгоритма зависит от максимально возможного количества независимых потоков. Обозначим такое количество как <br/>где <tex>N_G_{ind1}</tex>. Допустим— граф, полученный из <tex>G</tex> добавлением отсутствующего в <tex>G</tex> ребра <tex>nuv</tex> много больше , а <tex>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>\ThetaP(G,x) = {P(\fracK_{n},x) + a_{N_{ind}1}\logP(\fracK_{n-1},x) + a_{N_2}P(K_{ind}n-2},x) + n) \ldots = x^{\Theta(\fracunderline{n}} + a_{1}x^{N_\underline{indn-1}}+a_{2}x^{\log(\fracunderline{n-2}}+\ldots}</tex><br/>Из этой формулы видно, что хроматический многочлен имеет старший коэффициент, равный <tex>1</tex>.}} {N_{ind}}Теорема|about=3|statement=Коэффициенты хроматического многочлена составляют знакопеременную последовательность.|proof=Индукция по количеству вершин.<br/>'''База индукции:'''<br/>Теорема верна для графа <tex>G</tex> из одной вершины, потому что <tex>P(G,x)=x</tex>.<br/>'''Индукционный переход''' (<tex>n \to n+1)</tex>:<br/>Предположим, что теорема верна для всех графов на <tex>n</tex> вершинах. Рассмотрим графы на <tex>n+1</tex> вершине.::::Индукционный переход будем доказывать индукцией по количеству ребер графа <tex>G</tex>. Если <tex>G</tex> не содержит ребер, то есть <tex>G</tex> является <tex>O_{n+1}</tex>, то его хроматический многочлен <tex>\ThetaP(\fracG,x)=x^{n+1}</tex> обладает доказываемым свойством. Теперь предположим, что для всех <tex>(n+1,m)</tex>-графов теорема верна. Возьмем <tex>(n+1,m+1)</tex>-граф <tex>G_{N_1}</tex> и его ребро <tex>uv</tex>. Обозначим за <tex>G</tex> граф, полученный из <tex>G_{ind1}}\log</tex> удалением ребра <tex>uv</tex> (\frac<tex>G=G_{n1}-uv</tex>), а за <tex>G_{N_2}</tex> — граф, полученный из <tex>G_{ind1}}))</tex> операций нужно на последовательную сортировку массива длиной слиянием вершин <tex>u</tex> и <tex>v</tex>. Тогда из рекуррентной формулы следует:<br/><tex>\fracP(G_{n1},x)=P(G,x)-P(G_{N_{ind}2},x)</tex>.::::Так как <tex>G</tex> — <tex>\Theta(n+1,m)</tex> необходимо на последовательное слияние.-граф, а в <tex>G_{2}</tex> — <tex>n</tex> вершин, то для <tex>G</tex> и <tex>G_{2}</tex> теорема верна:<br/>::[[#.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>\Theta{P((\fracG,x)=x^{n+1}-a_{N_1}x^{indn}+a_{2})x^{(\log_{\frac{4n-1}-a_{3}}x^{n-2)} + \log(n) \cdot minldots}</tex> ,<br/><tex>{P(N_G_{ind2}, \log(n)x)=\Theta((\fracx^{n}-b_{N_1}x^{indn-1}+b_{2})x^{(n-2}+\log_ldots}</tex> ,<br/>где <tex>a_{\frac1}</tex>, <tex>a_{42}</tex> … <tex>a_{3n+1}</tex>, <tex>b_{1}2)})</tex>:::::Прежде чем достигнуть ограничения на создание нового потока, алгоритм углубится на <tex>min(N_b_{ind2}, \log(n))</tex> уровней вглубь дерева рекурсии, где на каждом уровне выполняется бинпоиск за … <tex>\Theta(\log(b_{n))}</tex>— некоторые неотрицательные целые числа. Из этих равенств получаем::::Асимптотика многопоточного слияния при работе в одном потоке по основной теореме рекуррентных соотношений равна <br/>::::<tex>T_P(G_{merge1}'(n,x) = 2T_x^{mergen+1}'-(\frac {3}a_{41}n) + \Theta(\log(n)1) = \Theta(nx^{n}+(\log_a_{\frac{42}+b_{31}}2)x^{n-1})+\ldots</tex>.::Оценим [[#Видно, что в этом полученном полиноме коэффициенты составляют знакопеременную последовательность.D0}} {{Теорема|about=4|statement=Второй коэффициент хроматического многочлена равен по модулю количеству ребер графа.A1|proof=Из доказательства '''Теоремы (3)''' видно, что при увеличении количества ребер графа на <tex>1</tex>, второй коэффициент также увеличивается на <tex>1</tex>.D0Так как для пустого графа второй коэффициент равен <tex>0</tex>, то утверждение верно для любого графа.BE}} == Источники информации ==* Асанов М.D1О.80, Баранский В.D1А.82, Расин В.D0В.B8- Дискретная математика: Графы, матроиды, алгоритмы: Учебное пособие.D12-е изд.80, испр.D0и доп.BE- СПб.D0: Издательство "Лань", 2010.B2- 368 с.D0: ил.BA- (Учебники для вузов.D0Специальная литература).B0_ISBN 978-5-8114-1068-2* Харари Ф.D1— Теория графов: Изд.81_4-е.D0- М.BC: Книжный дом "ЛИБРОКОМ", 2009.D0- 296 с.BDISBN 978-5-397-00622-4* [[wikipedia:en:Chromatic_polynomial| Wikipedia {{---}} Chromatic_polynomial]]* [[wikipedia:ru:Хроматическое_число#.D0.BEA5.D0D1.B380.D0.BE.D0.BFBC.D0.BEB0.D1.82.D0.BEB8.D1.87.D0.BDB5.D1.8B81.D0.BC_BA.D1D0.81B8.D0.BBB9_.D0.B8.D1.8FBC.D0.BD.D0.B8BE.D0.B5B3.D0.BC|сортировку с многопоточным слиянием]] снизу:::::Части массива длиной <tex>\frac{n}{N_{ind}}</tex> гарантированно будут сортироваться последовательно, тBE.кD1. только алгоритм сортировки запустит к моменту вызова mergeSortMT2 от массива длиной <tex>\frac{n}{N_{ind}}</tex> число потоков, равное <tex>N_{ind}</tex>87. Тогда по основной теореме рекуррентных соотношений:::::<tex>T_{mergeSort}'(\frac{n}{N_{ind}}) = 2T_{mergeSort}'(\frac{n}{2N_{ind}}) + \Theta(\frac{n}{N_{ind}})^{(\log_{\frac{4}{3}}2)} = \Theta(\frac{n}{N_{ind}})^{(\log_{\frac{4}{3}}2)}</tex>Очевидно, что нижняя оценка алгоритма сортировки с многопоточным слиянием вышеD0. Таким образом, при приведенных выше допущениях алгоритм сортировки с однопоточным слиянием эффективнее и его асимптотика состовляет <tex>\Theta(\frac{n}{N_{ind}}\log(\frac{n}{N_{ind}}))</tex>BB.===Литература===Cormen TD0.HB5., Leiserson C.E., Rivest R.L., Stein CD0. BD| Wikipedia {{---}} Introduction to Algorithms, Third EditionХроматический многочлен]] [[Категория: Алгоритмы и структуры данных]][[Категория: Раскраски графов]]