Advertisement
Tobiasz931

Polyphase Coniungo

Nov 7th, 2013
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.70 KB | None | 0 0
  1. //duży plik = taśma do której miała ilość większa liczba fib. serii; mały plik = taśma z mniejszą liczbą fib (ofc duży plik może być mniejszy od małego, np. 6 i 8 serii, ale tam gdzie 6 teoretycznie jest 13)
  2. //pamiętamy małą i dużą liczbe fib (to są kolejne liczby fib i reprezentują teoretyczną ilość serii w taśmach małej i dużej)
  3. while(mała liczba fib > 0){
  4.     czytaj porcje z dużego i małego pliku;
  5.     jeśli bufory nie zostały wypełnione całkowicie, to trzeba ustawić flagę, że koniec taśmy i w którym miejscu w buforze się kończy;
  6.     for(kolejne rekordy aż do osiągnięcia mniejszej liczby fib (np. 8, gdy jest łącznie 14-21 serii do posortowania)){
  7.         while(nie koniec serii wpisywanej do taśmy - celu){
  8.             if(osiągneliśmy już koniec dużego pliku || poprzednia wartość dużego > sprawdzana wartość dużego){
  9.                 if(osiągneliśmy już koniec małego pliku || poprzednia wartość małego > sprawdzana wartość małego){
  10.                     koniecSerii=true;
  11.                     zerowanie poprzednich wartości (ja ustawiam na -1, bo ujemne nie mogą wystąpić, więc napewno będą mniejsze od sprawdzanych)
  12.                 }else{
  13.                     źródłem wartości do wrzucenia do taśmy - celu jest mała tasma.
  14.                     zapisujemy że poprzednia wartość małego jest sprawdzaną wartością
  15.                 }
  16.             }else if(osiągneliśmy już koniec małego pliku || poprzednia wartość małego > sprawdzana wartość małego){
  17.                     źródłem wartości do wrzucenia do taśmy - celu jest duża tasma.
  18.                     zapisujemy że poprzednia wartość dużego jest sprawdzaną wartością
  19.             }else{
  20.                 jeśli sprawdzana wartość małego jest mniejsza to mały jest źródłem, else duży
  21.                 zapisujemy poprzednią wartość małego, lub dużego jako aktualnie wybraną
  22.             }
  23.             if(!koniecSerii){
  24.                 przypisujemy wybraną wartość taśmy - źródła (mała/duża) do taśmy - celu
  25.                 if(osiągneliśmy koniec bufora tasmy źródła){
  26.                     wczytujemy nową porcje i sprawdzamy jak wyżej, czy tasma się nie skończyła
  27.                 }
  28.                 if(bufor celu się skończył){
  29.                     zapisujemy bufor do tasmy celu
  30.                     ZAPAMIĘTUJEMY OSTATNIĄ WARTOŚĆ
  31.                     ZAZNACZAMY ŻE TRZEBA BĘDZIE JĄ PORÓWNAĆ Z WYBIERANĄ
  32.                 }
  33.             }
  34.         }
  35.         zerowanie poprzednich wartości małego i dużego, koniecSerii=false;
  36.     }
  37.     jeśli w buforze celu coś zostało to trzeba tą część (nie całość) zapisać do taśmy celu
  38.     zerowanie syfu
  39.     //KONIEC 1 kroku
  40.     taśma celu staje się taśmą dużą
  41.     taśma duża staje się taśmą małą //nie zerujemy miejsca od którego będziemy w niej czytać, czytamy po prostu dalej, bo nie usuwamy już zmerdżowanych serii, tylko omijamy je czytając z pliku.
  42.     taśma mała staje się taśmą celem
  43.     cofamy liczby fib o krok
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement