Advertisement
Guest User

Untitled

a guest
May 24th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.08 KB | None | 0 0
  1. clear
  2. clc
  3.  
  4. r=1;                 %licznik wykonania algorytmu
  5. T=0;
  6. for n=5:5:100                    %20 powtórzeń algorytmu
  7.     for l_probek=1:1:30              %liczba przebiegów                
  8.         for i=1:1:n  
  9.             for j=1:1:n
  10.                 if i~=j
  11.                     W(i,j)=ceil(rand(1)*30)+20; %% losuje liczby do macieży wag od 30 do 50
  12.                 end
  13.             end
  14.         end
  15. s=1;                
  16. t=n;                
  17. dist=[];                %% Tabela z najkrótszymi drogami
  18. final=[];               %% Tabela logiczna
  19. pred=[];            %% Tabela poprzedników
  20.  
  21. for v=1:n              
  22.     dist(v)=inf;                %% odległość poszczególnych węzłów od "start"  
  23.     final(v)=false;             %% ustalenie czy cecha jest tymczasowa (false) czy stala (true)    
  24.     pred(v)=-1;                 %% poprzedniki    
  25. end
  26.  dist(s)=0;                     %% odległość ze źródła
  27.  final(s)=true;                 %% cecha stała dla źródła                
  28.  recent=s;                      %% s jako wierzchołek, którego cecha została ostatnio ustalona
  29.  tic;                           %% rozpoczęcie działania timera
  30. while ~final(t)                 %% Pętla jeśli dla wierzchołka końcowego nie jest ustalona cecha stała
  31.     for v=1:n
  32.         if (W(recent,v)<inf) && (~final(v))     %% Waga krawędzi pomiędzy wierzchołkami recent a v jest mniejsza niż nieskonczoność i v nie jest stałe
  33.             newlabel=dist(recent)+W(recent,v);  %% to zmienna wynosi odległość od s do recent + waga tej krawędzi
  34.             if newlabel<dist(v)                 %% jeśli zmienna jest mniejsza od odlegóści od s do v  to:
  35.                 dist(v)=newlabel;               %% zmienna wynosi najkrótszą drogę z s do v
  36.                 pred(v)=recent;                 %% v jakos wierzchołek o ostatnio ustalonej cesze
  37.             end
  38.         end
  39.     end
  40.     temp=inf;                         %% cecha tymczasowa
  41.     for u=1:n
  42.         if (~final(u) && dist(u)<temp)  %% jeśli u nie jest stałe i najkrótsza droga od s do u jest mniejsza od temp
  43.             y=u;      
  44.             temp=dist(u);       %% cecha zmienna jako najktótsza droga z s do u
  45.         end
  46.     end
  47.  
  48.     if temp<inf                 %% jeśli cecha zminna jest mniejsza od nieskonczoności
  49.         final(y)=true;          %% to y jako stała
  50.         recent=y;               %% y jakos wierzchołek o ostatniu ustalonej cesze
  51.     else
  52.         final(t)=true;          %% jeśli nie to wierzchołek t jest stała
  53.     end
  54. end
  55. T=T+toc;            %koniec pomiaru czasu
  56.  
  57.     end
  58.     tim(r)=T/30;            %20 sum czasów wykonania algorytmu
  59.   r=r+1;            %inkrementacja licznika
  60. end
  61. z=tim(1);
  62. poprawka=z/25;
  63.                         %formowanie wykresu
  64. n=[5:5:100];                            %wartości osi X                
  65. plot(n,tim,'blue' )                 %wykres czasu wykonywania algorytmu Dijkstry
  66. hold on                      
  67. plot(n,n.^2.*poprawka,'black')  %wykres teoretycznej złożoności obliczeniowej algorytmu Dijkstry
  68. xlabel(' Liczba węzłów ');
  69. ylabel(' Czas działania [s] ');
  70. legend('Rzeczywisty czas działania','Teoretyczny czas działania');
  71. tekst=['Algorytm Dijkstry'];
  72. title(tekst);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement