Скачиваний:
181
Добавлен:
02.05.2014
Размер:
891.9 Кб
Скачать

Алгоритм звз

Вход:неориентированный графGс вершинами [n] и параметром t.

Выход: -звезда в графеG, или сообщение «звезда не найдена».

  1. Найти максимальное паросочетание MвG. ПустьN- множество согласованных вершин (а именно, концевые точки ребер вM) и пусть =[n]-N.

  2. Проверить, что паросочетание Mимеет свойство:

2.1. Пусть Т– множество трехглавых вершин, а именноT={i j,kтакие, что (i,j),(i,k)G}. ПустьC=-T.

2.2. Пусть B– множество вершин, имеющих соседние вершины вC, а именноB:={jN iCтакие, что (i,j)G}. ПустьD:=[n]-B.

2.3. ЕслиCn-2tиDn-tвыдать (C,D), в противном случае выдать «звезда не найдена».

Предложение 3.3.Предположим, что процедураЗВЗвыдает (C,D) на входном графеG. Тогда, (C,D) формирует -звезду вG.

Доказательство.Ясно, если алгоритмЗВЗвыдает (C,D), тогда затемCn-2tDn-tиCD. Мы показываем, что для каждогоiCи для каждогоjDвершиныiиjне являются соседними вG.

Предположим, что iCиjDи что (i,j) – ребро вG. Так какjD, мы имеемjB. По определению множестваB, мы имеемjN(еслиiCиjN, тогдаjB). Кроме того,iC. Таким образом, иi, иjне входят в паросочетание. Следовательно, ребро (i,j) может быть добавлено к паросочетанию для создания наибольшего паросочетания, и, следовательно, паросочетание не является максимальным.

Предложение 3.4.ПустьG- граф сnвершинами, содержащий независимое множество мощностьюn-t. Тогда процедураЗВЗвыдает-звезду вG.

Доказательство.Сначала покажем, что если входной графGсодержит независимое множество мощностиn-t, тогда множестваCиD, определенные на шагах 2.а и 2.b. алгоритмаЗВЗявляются достаточно большими. Следовательно, алгоритм выдает (C,D). В предложении 3.3 утверждается, что (C,D) формирует звезду вG. Далее покажем, чтоCn-2t. ПустьI[n] – независимое множество мощностиn-tвGи пусть =[n]-I. Далее необходимо конкретизировать значенияN,TиCв алгоритмеЗВЗ.

Пусть F=I-C. Далее покажем, чтоF. В то же времяt. Следовательно,CI-Fn-2t.

Так как F, покажем взаимно однозначное соответствие:F. ПустьiFи так какiC, мы имеет либоiN, либоiT.

Случай 1:iN. Тогда, пусть(i) - вершина, сочетаемая сiв множествеМ. Ясно, что(i), в противном случае мы имели бы ребро (i,(i)), где иiи(i) принадлежит независимому множеству.

Случай 2: iT. По определению множестваT, вершинаiимеет две соседние вершиныjиkтакие, что (j,k)M. Произвольно множество(i)=j. Понятно, что иj, иkпринадлежат .

Покажем, что - взаимно однозначная функция. Рассматривая две различные вершиныl,mF, мы различаем три случая.

Случай 1: l,mN. В этом случае,(l)(m), так какМ- паросочетание.

Случай 2: lNиmT. Так какmT, то существует ребро междуmи вершиной, сочетаемой с(m). Так какlNвершина, сочетаемая с(l) – это вершинаl. Далее, предположим, что(l)=(m). Таким образом, (l,m) – ребро вG. Однако иl, иmпринадлежат множествуI. Что противоречит условию.

Случай 3: l,mT. Предположим, что(l)=(m). Пустьa- вершина, сочетаемая с(m) изМ. Тогда иl, иm– соседние вершины для(m) иa. Однако, в этом случае паросочетаниеМ- не является максимальным, например,M-{((m),a)}{((m),l),(a,m)} – является наибольшим паросочетанием.

В заключение покажем, что Dn-t. Напомним, чтоD=[n]-B. Далее покажем, чтоBM. Так какGсодержит независимое множество мощностиn-t, мы имеемMt. Таким образом,D=n-Bn-Mn-t.

Для того, чтобы понять, что BM, мы покажем, что не более одной концевой точки каждого ребра (a,b)Mнаходится вB. От обратного предположим, что иa, иbимеют соседние вершины в Cи пустьc,dC– соседние вершиныaиb, соответственно. Конечно,cd(в противном случае, вершинаcбыла бы трехглавой, и мы имели быcC). Однако в этом случае паросочетаниеMне является максимальным. Например,M-{(a,b)}{(a,c),(b,d)} является наибольшим паросочетанием.

      1. Схема, корректирующая ошибки

Схема, корректирующая ошибки, работающая в префиксном режиме, обозначаемая в дальнейшем СКОП, позволяет каждому процессору вычислить полиномp() степениd, удовлетворяющийp(j)=ajдля каждого полученного им сообщенияaj. А именно, процессор будет исследовать этот полином после получения сообщений от других процессоров и определять единственным образом интерполируемый полином степени[BCG].

Определение 3.4.Пустьи- целые числа и пусть множествоS[n]Fтакое, что для каждых двух элементов (i,a) и (i,a ) изS, получаемi=i. Будем считать, чтоSявляется (,)-интерполируемым, если существует полиномp() степенитакой, что не болееэлементов (i,a)Sне удовлетворяетp(a)=e. Будем говорить, чтоp() является (,)-интерполируемым полиномоммножестваS.

Определение 3.1.ПустьI– аккумулируемое множество (см. выше). ТогдаIназываетсясобытийно(,)-интерполируемым, если для каждого планировщика, каждой коалиции из не более чемсбоящих процессоров и каждого запуска алгоритма существует целое число 0такое, чтоIбудет событийно содержать (,)-интерполируемое множество мощностью не менее+++1.

При использовании этих обозначений динамический вход процедуры, описываемой ниже, является (d,t)-интерполируемым аккумулируемым множествомI. Требуемый выход этой процедуры является (d,t)-интерполируемым полином множестваI. Определение 3.5 гарантирует, что, по крайней мере,d+t+1значений изIбудут сопряжены с полиномом степениt. По крайней мереt+1 из них соответствуют несбоящим процессорам. Следовательно, (d,t)-интерполируемый полином множестваIопределен значениями несбоящими процессорами.

Процедура СКОПсостоит изt+1 итераций. На итерацииrпроцессор ожидает, пока мощность аккумулируемого множестваIстанет не менееd+t+r+1. Затем, каждый процессор запускает ниже описываемую процедуру, которая определяет, является ли множествоI- (d,r)-интерполируемым и вычисляет соответствующий интерполируемый полином. Если (d,r)-интерполируемый полином найден, тогда оно подается на выход и работа завершается. В противном случае, мы переходим к итерацииr+1 (так какI– является событийно интерполируемым, он ограничен, по крайней мере, еще одним элементом и, таким образом, итерацияr+1 будет завершена).

Далее описывается, как определить, является ли данное множество (d,r)-интерполируемым и как вычислять интерполируемый полином, используя теорию кодирования. Рассмотрим следующий код. СловоW=(i1,a1)...(il,al) является ключевым, тогда и только тогда, когда существует полиномp() степениdтакой, чтоp(ij)=ajдля каждый 1jl. Такой код является обобщенным кодом Рида-Соломона, имеющим эффективную процедуру, корректирующую ошибки. Данная процедура обнаруживает и исправляет не менееrошибок во входном словеW, гдеWd+2r+1 (см., например, [КС]).

Пусть ПКОобозначает следующую процедуру. А именно, пустьS- (d,r)-интерполируемое множество мощностью не менееd+2r+1. Тогда процедураПКОпо входу (d,r,S), выдает (d,r)-интерполируемый полином из множестваS.

Соседние файлы в папке Казарин О.В. Теория и практика защиты программ