Advertisement
canezzy

matlabcinaZaB0du

Apr 6th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.07 KB | None | 0 0
  1. %malo veci test primer
  2. A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14;
  3.     0.01,0.02,0.03,0.01,0.05,0.005,0.03, 0.004, 0.03, 0.06, 0.04, 0.03, 0.01, 0.065];
  4.  
  5. %mali test primer, za debug ako hoces da vidis sta se desava
  6. %A = [1,2,3,4; 0.1, 0.2, 0.3, 0.1];
  7.  
  8. %vektor indeksa, 0 na mestima koje nisi vec posetio, 1 na mestima koje
  9. %jesi, njih preskace kad trazi minimum
  10. pomocniVektor = zeros(1, length(A(1,:)));
  11.  
  12. %sve dok je suma verovatnoca manja od 1 (mozes da dodas toleranciju al ja
  13. %nisam imao dobar test case da bih testirao)
  14. %Za toleranciju odradi nesto kao while(abs(1 - sum(A(2,:))) > 0.05) ili ovo
  15. %sranje na kvadrat umesto abs ( radi brze tako jer mu je skupo ovo abs
  16. %govno)
  17. while(sum(A(2,:)) < 1)
  18.     %inicijalizacija indeksa i minimuma
  19.     %minmin je najmanji, min je drugi najmanji posle njega, iminmin i imin
  20.     %su indeksi tih govana
  21.     minmin = Inf;
  22.     min = Inf;
  23.     iminmin = 0;
  24.     imin = 0;
  25.     %prolazi forom kroz svaki i proverava da li treba da ga umetne u neku
  26.     %od minmin i min promenljivih
  27.     for i = 1:length(A(2,:))
  28.         %prvo proveri da si vec posetio taj u nekoj prethodnoj iteraciji,
  29.         %ako jesi, samo predje na sledeci broj, a ako nisi, onda analizira
  30.         %sta ce s njim
  31.         if (pomocniVektor(i) == 0)
  32.             %imas 3 slucaja
  33.             %prvi je da ti je taj koji gledas veci od oba trenutna
  34.             %minimuma, i onda samo preskace
  35.             if (A(2,i) > min)
  36.                 continue;
  37.                
  38.             %ako je manji od oba minimuma, on postaje najmanji broj, a
  39.             %prethodni najmanji, ovaj minmin, sad prelazi u min, i
  40.             %updatujes indekse
  41.             elseif (A(2,i) < minmin)
  42.                 min = minmin;
  43.                 imin = iminmin;
  44.                 minmin = A(2,i);
  45.                 iminmin = i;
  46.             %i poslednji slucaj ti je ako se broj koji gledas nalazi
  47.             %izmedju ova dva broja, onda samo treba da ga smestis u min, a
  48.             %minmin ostaje isti. i update indeks.
  49.             else
  50.                 min = A(2,i);
  51.                 imin = i;
  52.             end
  53.         end
  54.     end
  55.     %kad nadje minimume, onda treba da updatuje vektor posecenih, na
  56.     %njihove indekse stavi 1
  57.     pomocniVektor(iminmin) = 1;
  58.     pomocniVektor(imin) = 1;
  59.     %ovo je malo fucked up, al skontaces
  60.     %treba da se doda nov par ovih brojeva (onaj kome je verovatnoca zbir
  61.     %minimalnih. moras da zapamtis koliko si ih imao pre, i dodas na
  62.     %sledece mesto taj novi. stavio sam da kao ovaj kljuc dodaje samo
  63.     %sledeci broj, a verovatnoca je zbir one dve. i na kraju doda jos jedan
  64.     %clan u onaj pomocni vektor indeksa da bi mogao da pratis da l si njega
  65.     %posle posecivao, i stavis da je nula jer jos uvek nisi.
  66.     duzina = length(A(2,:));
  67.     A(1, duzina + 1)= duzina + 1;
  68.     A(2, duzina + 1) = min+minmin;
  69.     pomocniVektor(duzina + 1) = 0;
  70. end
  71.  
  72.  
  73. %i na kraju ti isprinta da vidis sta se sve izdesavalo
  74. A
  75. pomocniVektor
  76.  
  77. sum(A(2,:))
  78.  
  79. %Valjda ces da skontas, mozda je malo uz kurac otkucano, al pitaj sta god
  80. %treba
  81. %I ne znam da l je sintaksa okej za octave
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement