Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej.
|
|
- Dagmara Gajewska
- 5 lat temu
- Przeglądów:
Transkrypt
1 Wykład 5_3 Sortowanie zewnętrzne - c.d. 3. Algorytm sortowania za pomocą łączenia polifazowego 4. Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych 5. Podsumowanie Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej. Założenia:. Pamięć wewnętrzna ma ograniczone rozmiary 2. Pamięć zewnętrzna ma rozmiary nieograniczone 3. Czas dostępu do danych w pamięci wewnętrznej jest niezależny od położenia danych (np. dostęp indeksowany w tablicach) 4. Czas dostępu do danej w pamięci wewnętrznej jest dużo mniejszy od czasu dostępu do danej w pamięci zewnętrznej, stąd jest pomijany w szacowaniu wydajności algorytmów zewnętrznych 5. Bezpośrednio po zapisie lub odczycie danej w pamięci zewnętrznej dostęp do niej jest niesekwencyjny - zarówno do odczytu i zapisu 6. Czas dostępu do danych w pamięci zewnętrznej jest zależny od położeniazaleca się sekwencyjne czytanie i zapis danych, gdyż koszt dostępu niesekwencyjnego jest dużo wyższy od sekwencyjnego
2 .Algorytm sortowania za pomocą łączenia polifazowego Przykład : Sortowanie polifazowe z trzema plikami Serie w plikach Idealne serie Numer poziomu Liczba f f2 f3 f f 2 scalania - l serii f =, 2 l+ l f = 0, f f 2 =, f f f + = + dla l > 0 l l l 2 l Jeśli f = f l, to mamy wzory rekurencyjne definiujące ciąg Fibonacciego rzędu : f = f + f dla i oraz =, f = 0 f i+ i i 0 Wniosek: Początkowe liczby serii na dwóch plikach muszą być dwoma kolejnymi elementami ciągu Fibonacciego rzędu, natomiast trzeci plik służy do łączenia serii na kolejnym poziomie. 2
3 Przykład 2: Sortowanie polifazowe z sześcioma plikami Serie idealne Serie w plikach Numer poziomu Liczba f f 2 f 3 f 4 f 5 f f2 f3 f4 f5 f6 scalania - l serii f l+ = 5 4 f l f = f + f = f + f l+ l l l 3 5 f = f + f = f + f + f l+ l l l l f = f + f = f + f + f + f l+ l l l l 2 l 3 3 f = f + f = f + f + f + f + f l+ l l l l 2 l 3 l 4 Stąd, jeśli 2 f = f i i f = f + f + f + f + f i + i i i i i f 4 = f i = 0 dla i p dla i 4 Są to wzory rekurencyjne definiujące liczby Fibonacciego rzędu p=4 p p p p f = f + f + + f i+ i i i p p f = p p f = 0 dla 0 i p i... dla i p oraz Wniosek: Początkowe liczby serii dla idealnego sortowania polifazowego z n plikami są sumami n-, n-2,..., kolejnych liczb Fibonacciego rzędu n-2. Oznacza to, że liczba serii jest sumą n- takich sum Fibonacciego. 3
4 l n Tabela 6.. Liczby serii dające się idealnie rozdzielić - zgodne z liczbami Fibonacciego rzędów: (3 pliki), 2(4 pliki), 3(5 plików), 4(6 plików), 5(7 plików), 6(8 plików). Uwaga: W rzeczywistych plikach początkowo liczba serii nie zawsze jest idealną sumą. Wówczas należy zasymulować istnienie hipotetycznych pustych serii w ten sposób, aby suma serii rzeczywistych i hipotetycznych była sumą idealną. Podczas rozdzielania początkowego serii należy odpowiednio równomiernie rozdzielać serie fikcyjne oraz rzeczywiste na n - plików. Liczba serii fikcyjnych jest zdefiniowana następująco: d i = f l l- i - f i dla i =,..,n- (numer pliku) Liczbę fikcyjnych serii należy wyznaczać w momencie ustalania kolejnego poziomu rozdzielania serii 4
5 Przykład 3: Zawartość pliku złożonego z 25 elementów - 2 serii Po podziale 2 serii na 5 plików uzyskano 0 serii, idealnie rozłożonych na i 2 poziomie, natomiast na poziome 3 uzupełnionych seriami fikcyjnymi Poziom : a = (,,,,, 0), d = (,,,,, 0) d = (0, 0, 0, 0, 0, 0) Plik seria indeksy 0 d[] = d[] = 0 wartości - Plik 2 seria indeksy d[2] = d[2] = 0 wartości Plik 3 seria indeksy 0 d[3] = d[3] = 0 wartości 4 Plik 4 seria indeksy 0 d[4] = d[4] = 0 wartości -4 8 Plik5 seria indeksy 0 2 d[5] = d[5] = 0 wartości Poziom 2: a = (2, 2, 2, 2,, 0), d = (,,,, 0, 0) d = (0, 0, 0, 0, 0, 0) Plik 2 serie indeksy d[] = d[] = 0 wartości Plik 2 2 serie indeksy 4 5 d[2] = d[2] = 0 wartości -5-2 Plik 3 2 serie indeksy d[3] = d[3] = 0 wartości -5 Plik 4 2 serie indeksy 2 3 d[4] = d[4] = 0 wartości -6-2 Poziom 3: a = (4, 4, 4, 3, 2, 0), d = (2, 2, 2,,, 0) d = (, 2, 2,,, 0) Plik 3 serie indeksy 6 7 d[] = 2 d[] = wartości -8 5 Plik 2 2 serie indeksy 6 7 d[2] = 2 d[2] = d[2] = 2 wartości 2 5 Podsumowanie (3 poziom) : a = (4, 4, 4, 3, 2, 0), d = (, 2, 2,,, 0) Plik 3 serie wartości Plik 2 2 serie wartości Plik 3 2 serie wartości 4-5 Plik 4 2 serie wartości Plik 5 seria wartości
6 2.Łączenie 0 serii rozłożonych na 5 plikach - od trzeciego poziomu rozłożenia 2.. łączenie plików, 4, 5 na pliku 6-tym; a= (4,4,4,3,2,0), poziom 3 d= (,2,2,,,0), z=a[5]=2, k=0 d= (0,,,0,0,), z=, k=0 d=(0,0,0,0,0,), z=, k=3 - trzy pliki (k) po jednej serii (z) Plik 3 serie indeksy wartości Plik 4 2 serie indeksy wartości Plik 5 seria indeksy 0 2 koniec wartości Plik 6 indeksy wartości łączenie plików, 2, 3, 4 na pliku 5-tym; a= (2,2,2,2,,0), poziom 2 d= (,0,0,0,0,0), z=a[5]=, k=0 d= (,0,0,0,0,0), z=, k=0 d= (0,0,0,0,0,0), z=, k=4 - cztery pliki (k) po jednej serii (z) Plik 2 seria indeksy wartości Plik 2 2 serie indeksy wartości Plik 3 2 serie indeksy 0 wartości 4-5 Plik 4 seria indeksy 2 3 koniec wartości -6-2 Plik 5 indeksy wartości
7 2.3. łączenie plików 5, 6,, 2, 3 na pliku 4-tym; a = (,,,,, 0), poziom d = (0, 0, 0, 0, 0, 0), z=a[5]=, k=5 - pięć plików (k) po jednej serii (z) Plik 5 seria indeksy wartości Plik 6 seria indeksy wartości Plik seria indeksy 6 7 wartości -8 5 Plik 2 seria indeksy wartości Plik 3 seria indeksy wartości -5 Plik 4 - seria - a = (, 0, 0, 0, 0, 0), d=(0,0,0,0,0,0), poziom Uwaga: Plik, na którym następuje łączenie serii, jest ostatnim plikiem, natomiast staje się plikiem pierwszym w kolejnym kroku łączenia. 7
8 Algorytm sortowania polifazowego - poziom konceptualny () Dopóki nie wyczerpiesz pliku źródłowego lub rozłożysz serie na n- plikach wyjściowych zgodnie z wymaganiami -go poziomu, wykonuj, co następuje: (.) Wyznacz na -ym poziomie kolejny aktywny plik wyjściowy zgodnie z planowaną liczbą serii idealnych czyli liczb Fibonacciego rzędu n-2 (.2) Weź z pliku źródłowego po serii i umieść na wyznaczonym pliku wyjściowym; (2) Dopóki nie wyczerpiesz pliku źródłowego, wykonuj, co następuje: (2.) Wyznacz na wybranym poziomie aktywny plik wyjściowy zgodnie z planowaną liczbą serii idealnych czyli liczb Fibonacciego rzędu n-2. Jeśli osiągnięto idealną liczbę serii w tym pliku, przejdź do kroku (2.3) (2.2) Umieść na wyznaczonym pliku wyjściowym kolejną serię. Jeśli należy ona do serii umieszczonej jako ostatnia w pliku, umieść w nim następną serię i przejdź do kroku (2.) lub zwiększ liczbę fikcyjnych serii tego pliku, jeżeli został wyczerpany plik źródłowy i przejdź do kroku (3). (2.3) Wybierz wyższy poziom rozkładania serii zgodnie z ciągiem Fibonacciego rzędu n-2, wyznacz idealną oraz fikcyjną liczbę serii dla każdego z n- plików wyjściowych; (3) Ustaw n - plików wejściowych; (4) Dopóki nie połączysz elementów z wszystkich serii w jedną serię, czyli nie osiągniesz poziomu 0, wykonuj: (4.) Ustaw n - ty plik wyjściowy i wyznacz najmniejszą liczbę serii na danym poziomie {idealna liczba serii w pliku n-}; (4.2) Dopóki nie wyczerpiesz wyznaczonej idealnej liczby serii, które należy połączyć na danym poziomie, wykonuj: (4.2.) wyznacz aktywne pliki wejściowe nie posiadające serii fikcyjnych; (4.2.2) jeśli istnieją serie fikcyjne dla wszystkich plików wejściowych, to połącz po serii z każdego pliku w jedną serię fikcyjną na pliku wyjściowym, w przeciwnym przypadku wykonaj: (4.2.3) połącz po serii fikcyjnej z każdego z nieaktywnych plików wejściowych, jeśli istnieją, oraz dopóki nie wyczerpiesz jednej serii rzeczywistej na każdym z aktywnych plików wejściowych, wykonuj: (4.2.2.) weź po jednej serii o tym samym numerze z każdego aktywnego pliku wejściowego; ( ) połącz te serie w jedną i umieść ją w pliku wyjściowym; ( ) eliminuj pliki z wyczerpaną serią lub wyczerpane; (4.2.4) zmniejsz liczbę serii idealnych łączonych na danym poziomie; (4.3) Zamień pliki, plik wyjściowy staje się plikiem wejściowym o numerze; (4.4) Zmniejsz poziom oraz wyznacz serie idealne oraz fikcyjne 8
9 Algorytm sortowania polifazowego - poziom projektowy n - liczba plikow; k - liczba aktywnych plikow wejściowych; z - liczba serii łączonych na danym poziomie; poziom - liczba poziomów i-numery na mapie plików wejściowych; j-numery plików wyjściowych plik - file of obiekt; f0: plik - plik źródłowy; bufor: obiekt - bufor pliku pliki=array[nrpliku] of plik; f: pliki- tablica plików wejściowych i wyjściowych t, ta: array[nrpliku] of nrpliku-mapy numerów plikow wejściowych i wyjściowych a, d: array[nrpliku] of integer, gdzie: a[j] - idealna liczba serii na pliku j d[j] - liczba fikcyjnych serii na pliku j ostatni: array[nrpliku] of integer, ostatni[j]-klucz ostatniego elementu pliku j { kopiuj serie początkowe} () dopóki not Eof(f0) or (j < n -), wykonuj co następuje: (.) wybierz_plik; kopiuj_serię; (.2) ostatni[j]= f0.klucz; {kopiuj resztę serii początkowych:} (2) dopóki not Eof(f0) wykonuj, co następuje: (2.) wybierz_plik; (2.2) jeśli ostatni[j] f0.klucz, to: {skończ jedną serię i rozpocznij nową} (2.2.) kopiuj_serię; (2.2.2) jeśli Eof(f0), to d[j]=d[j]+,w przeciwnym wypadku kopiuj_serię; (2.3) w przeciwnym wypadku kopiuj_serię; (3) i ; dopóki i<=n- wykonuj, co następuje: Reset(f[t[i]]); i i+; {łącz serie z plików o numerach t[]..t[n-] na t[n]} (4) dopóki poziom > 0 wykonuj, co następuje: (4.) z a[n-]; {liczba łączonych serii}; d[n] 0; Rewrite(f[t[n]]); (4.2) dopóki z > 0 wykonuj, co następuje: {łącz po serii} {określ liczbę aktywnych plików wejściowych i połącz serie fikcyjne} (4.2.) k 0; i ; powtarzaj n - razy, co następuje: (4.2..) jeśli d[i] > 0, to d[i] d[i]-, (4.2..2) w przeciwnym wypadku: k k + ; ta[k] t[i]; (4.2.2) jeśli k = 0, to d[n] d[n]+; (4.2.3) w przeciwnym wypadku połącz jedną serię rzeczywistą z każdym z plików ta[]..ta[k]; (4.2.4) z z -; (4.3) Reset(f[t[n]]); {ustaw plik wyjściowy do kolejnego łączenia} (4.4) zamień kolejne pliki w mapie t; oblicz a oraz d dla następnego poziomu; {ustaw plik wyjściowy na kolejnym poziomie, połączone dane znajdują się na t[]} (4.5)Rewrite(f[tn]]); poziom poziom -; 9
10 {sortowanie polifazowe z n plikami - główne procedury} const n= 6; {liczba plików} nazwa= 'seriapl'; type obiekt= record klucz: integer; nrpliku=..n; plik= file of obiekt; pliki= array[nrpliku] of plik; serie_plikow= array[nrpliku] of longint; mapa_plikow= array[nrpliku] of nrpliku; bufory= array[nrpliku] of obiekt; procedure Wydruk(var f: plik; n: integer); {...} procedure Pokaz_plik(nazwa: string); {...} procedure Plikowe_sortowanie_polifazowe(nazwa: string); procedure Podziel_serie(var a, d: serie_plikow; var f: pliki; var f0: plik; var poziom: integer); procedure Wybierz_plik( var a, d: serie_plikow; var poziom: integer; var j: nrpliku); var i: nrpliku; z: longint; if d[j] < d[j+] then inc(j) else if d[j]=0 then inc(poziom); z:= a[]; for i:= to n- do d[i]:= z+a[i+]-a[i]; a[i]:= z+a[i+]; j:= ; dec(d[j]); {koniec procedury Wybierz_plik} 0
11 procedure Kopiuj_serie(var f0, f: plik; var buf: obiekt; var pisz: boolean; var ostatni: obiekt); var buf: obiekt; koniec_serii: boolean; procedure Kopiuj(var f0, f: plik; var koniec_serii, pisz: boolean; var buf2: obiekt); if not Eof(f0) and (FilePos(f0)=0) then Read(f0, buf); Write(f, buf); end else Write(f, buf2); buf:= buf2; if Eof(f0) then koniec_serii:= True; pisz:= false; end else Read(f0, buf2); koniec_serii:= buf.klucz > buf2.klucz; pisz:= true; {koniec procedury Kopiuj} repeat Kopiuj(f0, f, koniec_serii, pisz, buf); until koniec_serii; ostatni:= buf {koniec procedury Kopiuj_serie} procedure Podziel_serie_poczatkowe(var a, d: serie_plikow; var f0: plik; var f: pliki; var poziom: integer; var j: nrpliku; var pisz: boolean; var ostatni: bufory; var buf: obiekt); var i: nrpliku; {początkowa liczba serii idealnych i fikcyjnych} for i:= to n- do a[i]:= ; d[i]:= ; poziom:= ; j:= ; a[n]:= 0; d[n]:= 0; repeat Wybierz_plik(a, d, poziom, j); Kopiuj_serie(f0, f[j], buf, pisz, ostatni[j]); until (Eof(f0) and not pisz) or (j=n-); {koniec procedury Podziel_serie_poczatkowe}
12 procedure Uzupelnij_serie_poczatkowe(var a, d:serie_plikow; var f0: plik; var f: pliki; var poziom: integer; var j: nrpliku; var pisz: boolean; var ostatni: bufory; var buf: obiekt); while not Eof(f0) or pisz do Wybierz_plik(a, d, poziom, j); if ostatni[j].klucz <= buf.klucz then {dalszy ciąg starej serii} Kopiuj_serie(f0, f[j], buf, pisz, ostatni[j]); {oraz nowa seria} if (Eof(f0) and not pisz) then inc(d[j]) else Kopiuj_serie(f0, f[j], buf, pisz, ostatni[j]); end {nowa seria} else Kopiuj_serie(f0, f[j], buf, pisz, ostatni[j]); {koniec procedury Uzupelnij_serie_poczatkowe} var j: nrpliku; {wybrany plik} ostatni: bufory;{ostatnio zapisane elementy w bieżących seriach plików czyli ostatni[j]=klucz ostatniego obiektu w pliku j} buf: obiekt; {pomocniczy bufor pliku} pisz: boolean; {zmienna określająca wyczerpanie serii} Podziel_serie_poczatkowe(a, d, f0, f, poziom, j, pisz, ostatni, buf); Uzupelnij_serie_poczatkowe(a, d, f0, f, poziom, j, pisz, ostatni, buf); {koniec procedury Podziel_serie} 2
13 procedure Polifazowe_laczenie_serii(var a, d: serie_plikow; var poziom: integer; var f: pliki; var t: mapa_plikow); procedure Lacz_po_jednej_serii(var dane, dane: bufory; var k: integer; var ta, t: mapa_plikow; var f: pliki); var min, x: integer; i, mx: nrpliku; koniec_pliku, koniec_serii: boolean; buf, buf0: obiekt; {pomocnicze bufory plików} repeat i:= ; mx:= ; min:= dane[ta[]].klucz; while i < k do inc(i) x:= dane[ta[i]].klucz; if x < min then min:= x; mx:= i; {ta[mx] zawiera obiekt najmniejszy (znajduje się on w elemencie tablicy dane[ta[mx]]), umieść go na t[n]} koniec_pliku:= Eof(f[ta[mx]]); koniec_serii:= False; buf:= dane[ta[mx]]; Write(f[t[n]], buf); if not koniec_pliku then Read(f[ta[mx]], dane[ta[mx]]); koniec_serii:= buf.klucz > dane[ta[mx]].klucz; if koniec_serii then {pomiń ten plik - zapamiętaj w dane element z nowej serii} dane[ta[mx]]:= dane[ta[mx]]; {oraz zlikwiduj luki w tab. ta oraz zmniejsz liczbę plikow k} ta[mx]:= ta[k]; dec(k); if koniec_pliku then {pomiń ten plik f[ta[mx]] - zlikwiduj luki w tab. ta oraz zmniejsz liczbę plikow k} ta[mx]:= ta[k]; dec(k); until k=0; {koniec procedury Lacz_po_jednej_serii} 3
14 procedure Lacz_serie_na_aktywnym_pliku(var dane, dane: bufory; var t: mapa_plikow; var f: pliki; var d: serie_plikow; var z: longint); var i: nrpliku; k: integer; {k - liczba plikow zawierających łączone serie} ta: mapa_plikow; repeat k:= 0; for i:= to n- do if d[i] > 0 then dec(d[i]) else inc(k); ta[k]:= t[i]; {mapa plików umożliwiająca łączenie rzeczywistych serii z plików bez serii fikcyjnych (d[i]=0)} if k=0 then inc(d[n]) else Lacz_po_jednej_serii(dane, dane, k, ta, t, f); dec(z); {³¹cz serie fikcyjne} {wyznacz aktywne pliki wejściowe} {łącz po serii fikcyjnej z każdego pliku} {lub łącz jedną rzeczywistą serią z t[]..t[k]} until z= 0; Reset(f[t[n]]); {i podaj pierwszy element do łączenia} if not Eof(f[t[n]]) then Read(f[t[n]], dane[t[n]]); {koniec procedury Lacz_serie_na_altywnym_pliku} procedure Uporzadkuj_liczby_serii_i_numery_plikow( var a, d: serie_plikow; var t: mapa_plikow); var i, tn: nrpliku; dn, z: longint; {zamień kolejno pliki przesuwając je o w gore oraz oblicz liczby nowych serii idealnych w tablicy a oraz fikcyjnych w tablicy d} tn:= t[n]; dn:= d[n]; z:= a[n-]; for i:= n downto 2 do t[i]:= t[i-]; d[i]:= d[i-]; a[i]:= a[i-]-z; t[]:= tn; d[]:= dn; a[]:= z; {połączone serie są teraz na t[]} {koniec procedury Uporzadkuj_liczby_serii_i_numery_plikow} 4
15 {początek procedury Polifazowe_laczenie_serri} var i: nrpliku; z: longint; dane, dane: bufory; {tablice buforów łączonych plików} {³¹cz z t[]..t[n-] na t[n]. Dane do łączenie w tablicach dane i dane-czyli pierwsze elementy z kolejnych plików} for i:= to n- do Reset(f[i]); for i:= to n do t[i]:= i; Assign(f[t[n]],char(48+n)+'serpl'); {wybierz plik początkowy} for i:= to n- do {wczytaj pierwsze elementy serii z n- plikow} if not Eof(f[t[i]]) then Read(f[t[i]], dane[i]); dane:= dane; repeat z:= a[n-]; {liczba serii do połączenia} d[n]:= 0; Rewrite(f[t[n]]); {plik wyjściowy} {łącz serie z plikow wg f[ta[i]] na aktywnym pliku f[tn]]} Lacz_serie_na_aktywnym_pliku(dane,dane, t, f, d, z); {przygotuj nowe dane do kolejnego łączenia serii} Uporzadkuj_liczby_serii_i_numery_plikow(a, d, t); dane:= dane; {odtwórz pierwsze elementy serii na kolejnym poziomie } dec(poziom); until poziom=0; {koniec procedury Polifazowe_laczenie_serii} {początek procedury Plikowe_laczenie_polifazowe} var i: nrpliku; poziom: integer; a, d: serie_plikow; {a[j]=idealna liczba serii w pliku j} {d[i]=liczba fikcyjnych serii w pliku j} t: mapa_plikow; {mapa numerów plików pomocniczych} f: pliki; {tablica zmiennych plikowych} f0: plik; {f0 jest plikiem wejściowym z liczbami pseudolosowymi} Assign(f0, nazwa); Reset(f0); {ustaw plik źródłowy do czytania} for i:= to n- do {ustaw pliki pomocnicze do pisania} Assign(f[i], char(48+i)+'serpl'); Rewrite(f[i]); Podziel_serie(a, d, f, f0, poziom);{rozłóż serie początkowe na plikach roboczych} Polifazowe_laczenie_serii(a, d, poziom, f, t); {połącz serie polifazowo} {usuń pliki pomocnicze i zamień plik f[t[]] na plik posortowany} for i:= to n do Close(f[t[i]]); Close(f0); Erase(f0); Rename (f[t[]], nazwa); {koniec procedury Plikowe_sortowanie _polifazowe} 5
16 5. Podsumowanie. Zakłada się, że w ciągu losowo rozłożonych kluczy spodziewana długość serii równa się Liczba k przebiegów w sortowaniu zewnętrznym za pomocą łączenia naturalnego jest równa k = log 2 r, gdzie r jest liczbą serii, natomiast 2 oznacza liczbę plików. Całkowita liczba przesunięć elementów wynosi w najgorszym przypadku r log 2 (r), 3. W sortowaniu zewnętrznym za pomocą wielokierunkowego łączenia wyważonego korzystającego z N=2p plików, z r serii rozłożonych równomiernie na p plikach uzyskuje się r/p k serii po k przebiegach, stąd liczba przebiegów k potrzebna do posortowania n elementów rozłożonych na p plikach jest równa: k = log p (n). Całkowita liczba przesunięć elementów w najgorszym przypadku wynosi n log p (n) 3. Sortowanie polifazowe przy użyciu N plików działa zawsze jako łączenie N- kierunkowe, a nie jako N/2 kierunkowe. Liczba spodziewanych k przebiegów wynosi w przybliżeniu log N (n), gdzie n jest liczbą elementów do posortowania, N zaś stopniem operacji łączenia. Daje to zmniejszenie liczby przebiegów w stosunku do wielokierunkowego łączenia wyważonego przy tej samej liczbie plików. 4. W ciągu losowo rozłożonych kluczy spodziewana długość serii równa się 2, natomiast po przejściu przez kopiec o rozmiarze m, wynosi 2m na podstawie analizy probabilistycznej. Stąd współczynnik usprawnienia wynosi m. Wniosek: Efektywne rozwiązanie sortowania dużych plików można rozwiązać przez: przygotowanie serii początkowych metodą rozdzielania serii przez kopcowanie (współczynnik zmniejszenia liczby serii w pliku jest równy rozmiarowi kopca czyli maksymalnej liczbie elementów tablicy reprezentującej kopiec); zastosowanie sortowania polifazowego. Np. plik zawierający serii początkowych (około 08 GB) po przejściu przez stóg o rozmiarze (liczba 2-bajtowych elementów stogu w segmencie pamięci równym bajtów) będzie zawierał serii i w wyniku sortowania polifazowego może być posortowany w 20 częściowych przebiegach (tabela 6.) 6
17 Wyniki pomiarów wykonanych za pomocą programu srt_plk2.exe w G:\LABOR\ZKRUK\WYK6. Plik nieposortowany Rodzaj Liczba elementów algorytmu rozdzielanie serii przez kopcowanie łączenie naturalne * * * wielokierunkowe łączenie wyważone łączenie polifazowe Plik posortowany Rodzaj Liczba elementów algorytmu rozdzielanie serii przez kopcowanie łączenie naturalne * * * wielokierunkowe łączenie wyważone łączenie polifazowe Plik nieposortowany z rozdzieloną liczbą serii przez kopcowanie Rodzaj Liczba elementów algorytmu liczba serii idealna liczba serii rzeczywista rozdzielanie serii przez kopcowanie łączenie naturalne * * * wielokierunkowe łączenie wyważone łączenie polifazowe
Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych
Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych Założenia: 1. Pamięć wewnętrzna ma ograniczone rozmiary 2. Pamięć zewnętrzna ma rozmiary nieograniczone
2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4
Wykład: Sortowanie III Drzewa Turniejowe 1:9,8 2:8,7 3:9,4 4:7,3 5:8 6:9,2 7:4 8: 3 9:7 12:9 13:2 Insert(x,S) 1) tworzymy dwa nowe liście na ostatnim poziomie, 2) do jednego wstawiamy x a do drugiego wartość
Wstęp do programowania. Pliki. Piotr Chrząstowski-Wachtel
Wstęp do programowania Pliki Piotr Chrząstowski-Wachtel Pamięci zewnętrzne Pamięć wewnętrzna (RAM) jest jednorodna. Dostęp do każdej komórki jest szybki i kosztuje tyle samo W przypadku pamięci zewnętrznych
Wstęp do programowania. Różne różności
Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste
Informatyka 1. Przetwarzanie tekstów
Informatyka 1 Wykład IX Przetwarzanie tekstów Robert Muszyński ZPCiR ICT PWr Zagadnienia: reprezentacja napisów znakowych, zmienne napisowe w Sun Pascalu, zgodność typów, operowanie na napisach: testowanie
Algorytmy i struktury danych
Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie
PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.
PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj
Sortowanie zewnętrzne
Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Sortowanie zewnętrzne 1 Wstęp Bardzo często
Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu
Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji
DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0
Uwaga: DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0 1. Zostały pominięte diagramy: CYFRA, CYFRA SZESNASTKOWA, ZNAK i LITERA. Nie została uwzględniona możliwość posługiwania się komentarzami. 2. Brakuje
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Nr 4 Algorytmy sortowania zewnętrznego 1 Wstęp Bardzo często przy rozwiązywaniu praktycznych
Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.
Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy
Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
OPERACJE NA PLIKACH. Podstawowe pojęcia:
OPERACJE NA PLIKACH Podstawowe pojęcia: plik fizyczny, zbiór informacji w pamięci zewnętrznej wykorzystywany do trwałego przechowywania danych lub jako przedłużenie pamięci operacyjnej w przypadku przetwarzania
Programowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
Algorytmy i struktury danych
Algorytmy i struktury danych Zaawansowane algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Sortowanie za pomocą malejących przyrostów metoda Shella Metoda jest rozwinięciem metody sortowania
Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy
Informatyka wprowadze do algorytmów (II) dr hab. inż. Mikołaj Morzy plan wykładu cechy algorytmów sposoby zapisu algorytmów klasyfikacja algorytmów przykłady algorytmów sumowa przeszukiwa ciągu liczb sortowa
Algorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe
Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;
Wszystkie zmienne typu plikowego, z wyjątkiem Output i Input muszą być zadeklarowane w sekcji deklaracji programu, który z nich korzysta.
Programowanie strukturalne - pliki 1 LEKCJA 29. TYPY STRUKTURALNE - PLIKI Wprowadzenie Zmienne proste, tablice i rekordy są wykorzystywane w programie do przechowywania danych podczas wykonywania programu;
INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};
INSTRUKCJA PUSTA Nie składa się z żadnych znaków i symboli, niczego nie robi Przykłady: for i := 1 to 10 do {tu nic nie ma}; while a>0 do {tu nic nie ma}; if a = 0 then {tu nic nie ma}; INSTRUKCJA CASE
Analiza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:
Instrukcje podsumowanie Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne: - grupująca end - warunkowa if
2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.
CZEŚĆ A. Przykłady, cd. 1.Obliczanie wartości pierwiastka kwadratowego - algorytm Newtona-Raphsona http://pl.wikipedia.org/wiki/metoda_newtona (pierwszy przykład na stronach Wiki) Dane: Liczba a (a>0)
Przykładowe B+ drzewo
Przykładowe B+ drzewo 3 8 1 3 7 8 12 Jak obliczyć rząd indeksu p Dane: rozmiar klucza V, rozmiar wskaźnika do bloku P, rozmiar bloku B, liczba rekordów w indeksowanym pliku danych r i liczba bloków pliku
Algorytm selekcji Hoare a. Łukasz Miemus
Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego
Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe
I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom
Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych
Ćwiczenie 2 Wczytywanie i zapisywanie do plików tekstowych 1. Wczytywanie z plików tekstowych. Wczytywanie z pliku tekstowego wymaga: a) skojarzenia zmiennej plikowej z plikiem procedura assignfile b)
Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:
Sortowanie Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: podać strukturę danych dla elementów dynamicznego skończonego multi-zbioru S, względem którego są wykonywane następujące
Pascal - wprowadzenie
Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego
Język programowania PASCAL
Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO
Wykład 5_1 Sortowanie zewnętrzne
Wykład 5_1 Sortowanie zewnętrzne 1. Algorytm sortowania za pomocą łączenia naturalnego 2. Algorytm sortowania za pomocą wielokierunkowego łączenia wyważonego Autor: Zofia Kruczkiewicz, s325 C3, 1 USM,
Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:
Pliki Dotychczas operowaliśmy danymi, które zapamiętywane były w pamięci operacyjnej komputera (RAM). Program Turbo Pascal umożliwia zapisywanie i odczyt danych, co zapewnia możliwość wielokrotnego ich
Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki
Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Co to jest algorytm? Zapis algorytmów Algorytmy
procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak
Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Abstrakcja programowania współbieżnego Instrukcje atomowe i ich przeplot Istota synchronizacji Kryteria poprawności programów współbieżnych
prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325
PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj
Informatyka A. Algorytmy
Informatyka A Algorytmy Spis algorytmów 1 Algorytm Euklidesa....................................... 2 2 Rozszerzony algorytm Euklidesa................................ 2 3 Wyszukiwanie min w tablicy..................................
Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].
Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s
Sortowanie przez wstawianie Insertion Sort
Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne,
Podstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott
Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.
1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania
1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca
Programowanie w Turbo Pascal
Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji
Algorytmy i Struktury Danych, 2. ćwiczenia
Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów
Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Podstawy programowania
Podstawy programowania Część ósma Tablice znaków i przetwarzanie napisów Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura
Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne
A. Permutacja losowa Matematyka dyskretna - wykład - część 2 9. Podstawowe algorytmy kombinatoryczne Załóżmy, że mamy tablice p złożoną z n liczb (ponumerowanych od 0 do n 1). Aby wygenerować losową permutację
Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:
Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym
Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to
Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to wprowadzili J. Hartmanis i R. Stearns. Najczęściej przez zasób rozumie się czas oraz pamięć dlatego
Sortowanie bąbelkowe
1/98 Sortowanie bąbelkowe (Bubble sort) prosty i nieefektywny algorytm sortowania wielokrotnie przeglądamy listę elementów, porównując dwa sąsiadujące i zamieniając je miejscami, jeśli znajdują się w złym
Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno
Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują
Algorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe
Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)
Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010
Algorytmy równoległe Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka Znajdowanie maksimum w zbiorze n liczb węzły - maksimum liczb głębokość = 3 praca = 4++ = 7 (operacji) n - liczność
Sortowanie przez scalanie
Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie
Wykład 4. Tablice. Pliki
Informatyka I Wykład 4. Tablice. Pliki Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Tablice Tablica uporządkowany zbiór elementów określonego typu Każdy element tablicy posiada
Wstęp do programowania
Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej
Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)
Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Instrukcje Język Basic został stworzony w 1964 roku przez J.G. Kemeny ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). Nazwa Basic jest
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Zasady Programowania Strukturalnego
Zasady Programowania Strukturalnego Rafał Jakubowski Zespół Teoretycznej Biofizyki Molekularnej rjakubowski@fizyka.umk.pl www.fizyka.umk.pl/~rjakubowski Tel: 33 46 Konsultacje w sem. letnim 11/12: środa,
TEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie
Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel
Wstęp do programowania Procedury i funkcje Piotr Chrząstowski-Wachtel Po co procedury i funkcje? Gdyby jakis tyran zabronił korzystać z procedur lub funkcji, to informatyka by upadła! Procedury i funkcje
Wykład 5. Sortowanie w czasie liniowologarytmicznym
Wykład 5 Sortowanie w czasie liniowologarytmicznym 1 Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n 2 Zestawienie
Strategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Wykład 3. Metoda dziel i zwyciężaj
Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie
Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych
Wykład 6_ Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych Abstrakcyjny typ danych Klient korzystający z abstrakcyjnego typu danych: o ma do dyspozycji jedynie
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.
Iteracje Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony. Iteracja inaczej zwana jest pętlą i oznacza wielokrotne wykonywanie instrukcji. Iteracje
Planowanie eksperymentu 2 (k p) w 2 r blokach. Stanisław Jaworski, Wojciech Zieliński
Planowanie eksperymentu 2 (k p) w 2 r blokach Stanisław Jaworski, Wojciech Zieliński 1. Wstęp W praktyce często możemy spotkać się z sytuacją, kiedy nie jest możliwe wykonanie pełnego eksperymentu czynnikowego
Wskaźniki. Programowanie Proceduralne 1
Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres
Matematyczne Podstawy Informatyki
Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Algorytm 1. Termin algorytm jest używany w informatyce
Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski
Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny
Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK
wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK 1 2 3 Pamięć zewnętrzna Pamięć zewnętrzna organizacja plikowa. Pamięć operacyjna organizacja blokowa. 4 Bufory bazy danych. STRUKTURA PROSTA
Sortowanie. Bartman Jacek Algorytmy i struktury
Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39
Sortowanie danych. Jolanta Bachan. Podstawy programowania
Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000
Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1
Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1 Etapy rozwiązywania problemu PROBLEM wybór metody rozwiązania ALGORYTM 1.
Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice
Podstawy programowania Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice 1 Podstawy programowania Iteracja 2 III. Iteracja Iteracja o nieznanej liczbie powtórzeń while warunek do instrukcja_do_wykonania;
Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Jeszcze o algorytmach
Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy
Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer
Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny
Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,
Oznaczenia: Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, to interesuje nas złożoność obliczeniowa
Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1
Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych; Begin
2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych
2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:
Metodyka i Technika Programowania 1
Metodyka i Technika Programowania 1 Pytania zaliczeniowe z wykładu mgr inż. Leszek Ciopiński Wykład I 1. Wprowadzenie 1.1. Programowanie imperatywne polega na: 1.2. Czy w programowaniu imperatywnym programista
wagi cyfry 7 5 8 2 pozycje 3 2 1 0
Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień
Laboratoria nr 1. Sortowanie
Laboratoria nr 1 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) 4. Sortowanie przez zliczanie (CS) 5. Sortowanie kubełkowe (BS) 6. Sortowanie
Instrukcje cykliczne (pętle) WHILE...END WHILE
Instrukcje cykliczne (pętle) Pętle pozwalają na powtarzanie fragmentu kodu programu. PĘTLE LOGICZNE WHILE...END WHILE While (warunek)...... End While Pętla będzie się wykonywała dopóki warunek jest spełniony.
Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!
Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym
Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.
Nazwa implementacji: Gra w życie Autor: Piotr Fiorek Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach. Zaprojektuj prostą grę, której celem
EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I
Arkusz zawiera informacje prawnie chronione do momentu rozpoczęcia egzaminu. Układ graficzny CKE 2013 KOD UZUPEŁNIA ZDAJĄCY PESEL miejsce na naklejkę EGZAMIN MATURALNY Z INFORMATYKI POZIOM ROZSZERZONY
Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2
Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2 Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania
Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)
Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : 15 1 grudnia 005.) 1. Program w C 1 zawiera deklaracje 1 void P1 ( int a, int b) { int i ; 3 for ( i =0;i
Kontrola przebiegu programu
Kontrola przebiegu programu Wykład 9 Instrukcje sterujące: pętle rozgałęzienia skoki PRZYPOMINAJKA Zadanie : Zaprojektuj rekurencyjny przepis na wyznaczenie największej takiej liczby m, że 2 m jest podzielnikiem
typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word
Pascal - powtórka Alfabet, Nazwy W odróŝnieniu do C w Pascal nie odróŝnia małych i duŝych liter. Zapisy ALA i ala oznaczają tę samą nazwę. Podobnie np. słowo kluczowe for moŝe być zapisane: FOR. W Pascalu
Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.
Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa