Определение сложности структурs системы

Тема в разделе "WASM.A&O", создана пользователем pluton, 3 апр 2008.

  1. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    привет!
    есть алгоритм для определения сложности любого ориентированного графа. файл (на странице 2):
    http://rapidshare.com/files/104563470/complex.rar.html или http://ifolder.ru/6004216
    помогите написать программу по этому алгоритму, а то я уже запутался, какие единицы и куда таскать. нужно на языке в scilab, но можно и на си.
    вот что я сделал - шаг 1 и часть шага 2 (тут и проблемы):
    Код (Text):
    1. function [lvs] = getlvs(g);
    2.   gs = size(g,'c');
    3. nl = 1; // cur_lvl
    4.   lvs = zeros(gs, gs); // lvls
    5.  
    6.   while(1);
    7.     a = 1;
    8.     for i = 1:gs;
    9.       if (sum(g(:, i)) == 0);
    10.           lvs(nl, a) = i;
    11.       end;
    12.       a = a + 1;
    13.     end;
    14.     for k=1:gs;
    15.     for i=1:gs;
    16.       if(lvs(nl,k)==0); break; end;
    17.       if (g(lvs(nl,k),i)~=0);
    18.         g(:,i)=0;
    19.       end;
    20.     end;
    21.     end;
    22.   if (lvs(nl,gs)~=0); break; end;
    23.   nl=nl+1;
    24.   end;
    25.  
    26.   for i=gs:-1:2;
    27.   for j=1:gs;
    28.   if (lvs(i, j)~=0 & lvs(i-1,j)~=0);
    29.   lvs(i,j)=0;
    30.   end;
    31.   end;
    32.   end;
    33.   for i=gs:-1:1;
    34.   f=1;
    35.   while (f~=0);
    36.   f=0;
    37.   for j=gs:-1:2;
    38.   if(lvs(i,j)~=0 & lvs(i,j-1)==0);
    39.   lvs(i,j-1)=lvs(i,j);
    40.   lvs(i,j)=0;
    41.   f=1;
    42.   end;
    43.   end;
    44.   end;
    45.   end;
    46. endfunction;
    47.  
    48. clc;
    49.  
    50. g = [
    51. 0 0 1 1 0 0 0 0
    52. 0 0 1 0 0 1 0 0
    53. 0 0 0 1 1 1 0 0
    54. 0 0 0 0 1 0 1 0
    55. 0 0 0 0 0 0 1 1
    56. 0 0 0 0 0 0 1 1
    57. 0 0 0 0 0 0 0 0
    58. 0 0 0 0 0 0 0 0
    59. ]
    60.  
    61. cpg = g; // g_cp
    62. gs = size(g, 'c'); // g_sz
    63. lvs = getlvs(g)
    64.  
    65. g = cpg;
    66. lsz=size(lvs,'c');
    67.  
    68. //for i=1:gs;
    69. i=2;
    70. cvs=[];
    71.   for j=1:gs;
    72.     if (lvs(i,j)==0); break; end;
    73.     //printf('%d %d %d\n', i, j, lvs(i, j));
    74.     cvs=cat(2,cvs,lvs(i,j));
    75.   end;
    76. //  cvs
    77.   evs=[];
    78.   for j=1:size(cvs,'c');
    79.     for k=1:size(cvs,'c');
    80.       if(g(cvs(j),cvs(k))~=0);
    81.         evs=cat(1,evs,[cvs(j) cvs(k)]);
    82.       end;
    83.     end;
    84.   end;
    85.   evs
    86.  
    87. //  for j=size(evs,'r'):-1:1;
    88.   j=2;
    89.     for (k=gs:-1:evs(j,2));
    90.       g(:,k+1)=g(:,k);
    91.       g(k+1,:)=g(k,:);
    92.     end;
    93.     gs=gs+1;
    94. //    g(:,evs(j,2)+1)=4;
    95.     g(:,evs(j,2))=0;
    96. //    g(evs(j,2)+1,:)=4;
    97.     g(evs(j,2),:)=0;
    98.     g(evs(j,1),evs(j,2))=0;
    99.     g(evs(j,2),evs(j,2)+1)=1;
    100.     g(evs(j,1),evs(j,2)+1)=1;
    101. //  end;
    102.  
    103. g
    104.     lvs=getlvs(g)
    105.     printf('--------------------\n');
    106. //end;
    спасибо!
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    end;
    end;
    end;
    Впечитляет!
     
  3. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    pluton
    В каком формате этот файл? Скачал, но не знаю, чем читать.
     
  4. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    OpenDocument Text. открывается OpenOffice.org
    вот залил в формате .doc:
    http://rapidshare.com/files/104577571/complex2.rar.html
    http://ifolder.ru/6005029
     
  5. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    pluton

    Посмотрел.. Граф 3 не соответствует графу 4, термин "висячая вершина" употребляется явно неправильно (имеется в виду root vertex?).. Лень работать корректором, если честно.
     
  6. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    в смысле? там есть одна ошибка - стрелка в другую сторону должна быть (на рис.3 - из 2 в 3)
    почему? висячая - вершина, в которую не входит ни один путь

    зы. этот документ делал не я, поэтому там есть куча ошибок
     
  7. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    pluton
    Вообще-то висячая вершина - это вершина со степенью 1. А вершина со степенью 0 называется изолированной ;)