Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа1.doc
Скачиваний:
3
Добавлен:
20.04.2019
Размер:
110.08 Кб
Скачать

Свойства минимальных остовов

Максимальный остов также можно искать алгоритмом Прима (например, заменив все веса рёбер на противоположные: алгоритм не требует неотрицательности весов рёбер).

Минимальный остов единственен, если веса всех рёбер различны. В противном случае, может существовать несколько минимальных остовов (какой именно будет выбран алгоритмом Прима, зависит от порядка просмотра рёбер/вершин с одинаковыми весами/указателями)

Минимальный остов также является остовом, минимальным по произведению всех рёбер (предполагается, что все веса положительны). В самом деле, если мы заменим веса всех рёбер на их логарифмы, то легко заметить, что в работе алгоритма ничего не изменится, и будут найдены те же самые рёбра.

Минимальный остов является остовом с минимальным весом самого тяжёлого ребра. Яснее всего это утверждение понятно, если рассмотреть работу алгоритма Крускала.

Критерий минимальности остова: остов является минимальным тогда и только тогда, когда для любого ребра, не принадлежащего остову, цикл, образуемый этим ребром при добавлении к остову, не содержит рёбер тяжелее этого ребра. В самом деле, если для какого-то ребра оказалось, что оно легче некоторых рёбер образуемого цикла, то можно получить остов с меньшим весом (добавив это ребро в остов, и удалив самое тяжелое ребро из цикла). Если же это условие не выполнилось ни для одного ребра, то все эти рёбра не улучшают вес остова при их добавлении.

Анализ эффективности

Общий анализ сложности параллельного алгоритма Прима для нахождения минимального охватывающего дерева дает идеальные показатели эффективности параллельных вычислений:

При выполнении вычислений на отдельной итерации параллельного алгоритма Прима каждый процессор определяет номер ближайшей вершины из своего блока до охватывающего дерева. Этот поиск производиться самым безхитростным образом, то есть просматриваются все пары вершин (x,y) c x принадлежащему каркасу, а у остальному графу. Если в каркасе "k" вершин то до промотреть (n-k) ребер. Причем это делается для n/p вершинах Как результат, с учетом общего количества итераций n время выполнения вычислительных операций параллельного алгоритма Прима может быть оценено при помощи соотношения.

Текст программы.

Program prim;

uses Crt;

var

a:array[1..100,1..100] of integer;

t,min,x,y,u,i,j,k,l,m,n,cost:longint;

b,c:array[1..100] of integer;

begin

clrscr;

writeln;

writeln(‘ Raschet Minimalynogo Puti ( Algoritm Prima ):');

write('Vvedite Razmer Massiva: ');

readln(n);

for i:=1 to n do

for j:=1 to n do a[i,j]:=32000;

writeln('Vvedite Kolichestvo Vvodimih Elementov: ');

readln(m);

for i:=1 to m do

begin

Writeln('Vvedite Aderess(x,y) i Harakteristiku #',i,':');

readln(k,l,cost);

a[k,l]:=cost;

a[l,k]:=cost;

end;

k:=0;

u:=1;

c[1]:=1;

b[u]:=1;

while u<n do

begin

min:=32000;

for i:=1 to u do

if b[i]>0 then

begin

t:=b[i];

for j:=1 to n do

if (a[t,j]<min) and (c[j]=0) then begin min:=a[t,j]; y:=t; x:=j; end;

end;

inc(u);

b[u]:=x;

c[x]:=1;

k:=k+a[y,x];

a[y,x]:=32000;

a[x,y]:=32000;

end;

Writeln('Rezultat: ',k);

readkey;

end.