4.9. Матрица причинно-следственных отношений

Задача построения матрицы причинно-след­ст­вен­­ных связей возникает при исследовании се­те­вых диаграмм и в этом смысле стоит несколько осо­б­няком в ряду рас­смат­ри­ва­емого в настоящем параграфе алгебры матриц. Тем не менее всле­д­­с­т­виетого, что данный логический ал­го­ритм, суть которого описана в этом пункте, оперирует с мат­рич­ны­ми объектами, мы посчитали це­ле­со­об­раз­ным рас­смот­реть его именно здесь.

Пусть задана матрица Mразмеромn´n, в ко­­торой каж­дый элементmij = true, если ин­ди­ви­ду­умiявляется не­по­сред­ственной причиной ("ро­ди­те­­лем") индивидуумаj,в про­­ти­в­номслу­чае mij = false. Тогда, если существует по­сле­до­ва­тель­ность чиселk, l, ...,pтакая, что в матрицеMвсеmik,mkl, ...,mpjэквивалентныtrue, т.е. если ин­ди­ви­ду­умiяв­­ляется косвенной причиной ("пра­ро­ди­те­лем") ин­ди­ви­ду­у­маj, то элементы пре­об­ра­зо­ван­ной мат­ри­цыM-mij = true.

Данный алгоритм реализован в процедуре ances.

Формальные параметры про­цедуры.Входные:m[1:n, 1:n] (типboolean) - исходная мат­рицаM; n(типin­te­­ger) - порядок матрицыM.Вы­ходные:m [1:n, 1:n] (тип bo­o­­lean) -пре­образованная матрицаM.

procedure ances (n:integer;

var m : array [1..n,1..n] of boolean);

var i, j, k : integer;

begin

for i:=1 to n do

for j:=1 to n do

if m[j,i] then

for k:=1 to n do

if m[i,k] then m[j,k]:=true

end {ances};

Процедураances является переводом с языкаALGOLна языкPASCALстереотипного пе­ре­из­да­ния [Аге­ев и др., 1976] ординарно пе­ре­ра­бо­тан­но­го ал­горитма Р.Б. Флойда (1962). Тестирование про­цедуры проводилось на IBM PC/AT-286 для тех же исходных матриц, что и в работе Х.Ц.Тачера (1963), в которой он под­твер­дил эф­фек­тив­ность алгоритма Р.Б. Флойда (1962). Нами при тес­ти­ро­ва­нии были получены ре­зуль­таты, совпадающие с ре­зуль­та­та­ми работы [Thacher, 1963]:

1) при n = 5

;

2) при n = 9

Правильность этих результатов, как указано в ра­боте [Thacher, 1963], была убедительно под­твер­ж­де­на при ис­сле­до­ва­нии сетевых диаграмм.

1 Матем.сб., 1937, N2, с.169-171.

1 Процедура Simult яв­ля­ется результатом существенной переработки ал­­­го­ритма, впервые опубликованного в работе [Roek,1962], с целью со­кра­щения его за­пи­си и оп­ти­ми­за­ции по рас­хо­ду­е­мой памяти и времени вы­­пол­не­ния.

1Процедура Cram является пе­ре­ра­бот­кой алгоритма [Caffrey, 1961] с целью его упро­ще­ния и модификации.

54

Соседние файлы в папке GLAVA1_1