(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

Wielkość: px
Rozpocząć pokaz od strony:

Download "(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak"

Transkrypt

1 (3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

2 Wyszukiwanie liniowe (ang. linear search), zwane również sekwencyjnym (ang. sequential search) polega na przeglądaniu kolejnych elementów zbioru Z. Jeśli przeglądany element posiada odpowiednie własności (np. jest liczbą o poszukiwanej wartości), to zwracamy jego pozycję w zbiorze i kończymy. W przeciwnym razie kontynuujemy poszukiwania aż do przejrzenia wszystkich pozostałych elementów zbioru Z. Problem W n-elementowym zbiorze Z wyszukać element posiadający pożądane własności.

3 W przypadku pesymistycznym, gdy poszukiwanego elementu nie ma w zbiorze lub też znajduje się on na samym końcu zbioru, algorytm musi wykonać przynajmniej n obiegów pętli sprawdzającej poszczególne elementy. Wynika z tego, iż pesymistyczna klasa złożoności obliczeniowej jest równa O(n), czyli jest liniowa stąd pochodzi nazwa metody wyszukującej. Często chcemy znaleźć wszystkie wystąpienia w zbiorze poszukiwanej wartości elementu. W takim przypadku algorytm na wejściu powinien otrzymywać dodatkowo pozycję (indeks) elementu, od którego ma rozpocząć wyszukiwanie. Pozycję tę przy kolejnym przeszukiwaniu podajemy zawsze o 1 większą od ostatnio znalezionej. Dzięki temu nowe poszukiwanie rozpocznie się tuż za poprzednio znalezionym elementem.

4 Algorytmy wyszukiwania liniowego/sekwencyjnego Lista kroków: K01: Dla i = p,p+1,...,n-1: wykonuj K02 - przeglądamy kolejne elementy w zbiorze; K02: Jeśli Z[i] = k, to zakończ z wynikiem i - jeśli napotkamy poszukiwany element, zwracamy jego pozycję; K03: Zakończ z wynikiem -1 - jeśli elementu nie ma w tablicy, zwracamy -1; Wejście: n - liczba elementów w tablicy Z, n N Z - tablica zawierająca elementy do przeszukania. Indeksy elementów rozpoczynają się od 0, a kończą na n-1 p - indeks pierwszego elementu Z, od którego rozpoczniemy poszukiwania p C k - poszukiwana wartość, czyli tzw. klucz, wg którego wyszukujemy elementy w Z. Wyjście : Pozycja elementu zbioru Z o kluczu k lub -1 w przypadku nieznalezienia elementu. Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C

5 Program #include <iostream> using namespace std; int Szukaj(int T[], int n, int k, int p) for(int i = p; i < n; i++) if(t[i] == k) return i; return -1; int main() int * Z,n,k,i; cin >> n; Z = new int [n]; for(i = 0; i < n; i++) cin >> Z[i]; cin >> k; cout << endl << Szukaj(Z,n,k,0) << endl << endl; delete [] Z; system("pause"); return 0; Program odczytuje z pierwszego wiersza liczbę n. Z następnych n wierszy odczytywane jest n danych całkowitych. W ostatnim wierszu odczytywana jest liczba k, którą należy wyszukać wśród podanych n liczb. Program wypisuje numer pozycji w odczytanym ciągu liczb, na której znajduje się liczba k lub -1, jeśli liczby nie odnaleziono.

6 #include <iostream> #include <cstdlib> #include <time.h> using namespace std; int main() int Z[100],i,w; bool L[100]; srand((unsigned)time(null)); for(i = 0; i < 100; i++) Z[i] = rand() % 10; w = rand() % 10; for(i = 0; i < 100; i++) L[i] = (Z[i] == w); cout << w << endl << endl; for(i = 0; i < 100; i++) if(l[i]) cout << " ->"; else cout << " "; cout << Z[i]; cout << endl; system("pause"); return 0; Program Program wypełnia 100 elementową tablicę Z całkowitymi liczbami pseudolosowymi z zakresu od 0 do 9. Następnie losuje nową liczbę pseudolosową z tego samego zakresu i znajduje wszystkie jej wystąpienia w Z przy pomocy wyszukiwania liniowego. Na końcu wyświetla wylosowaną liczbę oraz zawartość Z z zaznaczonymi jej wystąpieniami. Do zapamiętywania wystąpień służy druga tablica L o elementach logicznych. Jeśli i- ty element tej tablicy zawiera true, to w i-tym elemencie tablicy Z znajduje się poszukiwany element.

7 Problem W n-elementowym zbiorze Z znaleźć element o maksymalnej (minimalnej) wartości. Zadanie znajdowania elementu maksymalnego lub minimalnego jest typowym zadaniem wyszukiwania, które rozwiązujemy przy pomocy algorytmu wyszukiwania liniowego. Za tymczasowy maksymalny (minimalny) element przyjmujemy pierwszy element zbioru. Następnie element tymczasowy porównujemy z kolejnymi elementami. Jeśli któryś z porównywanych elementów jest większy (mniejszy) od elementu tymczasowego, to za nowy tymczasowy element maksymalny (minimalny) przyjmujemy porównywany element zbioru. Gdy cały zbiór zostanie przeglądnięty, w elemencie tymczasowym otrzymamy element maksymalny (minimalny) w zbiorze. Poniżej podajemy algorytm wyszukiwania max. Wyszukiwanie min wykonuje się identycznie, zmianie ulega tylko warunek porównujący element tymczasowy z elementem zbioru w kroku K03.

8 Algorytm wyszukiwania elementu maksymalnego w zbiorze Wyjście: n - liczba elementów w tablicy Z, n N Z - tablica zawierająca elementy do zliczania. Indeksy elementów rozpoczynają się od 0, a kończą na n-1. Wyjście: Wartość największego elementu zbioru. Zmienne pomocnicze: i przebiega przez kolejne indeksy elementów Z. i C max Z tymczasowy element maksymalny. Lista kroków: K01: max Z Z[0] - za tymczasowy element maksymalny bierzemy pierwszy element; K02: Dla i = 1,2,...,n-1 wykonuj K03 ; - przeglądamy następne elementy zbioru; K03: Jeśli Z[i] > max Z, to max Z Z[i] ; - jeśli natrafimy na większy od max Z, to zapamiętujemy go w max Z ; K04: Zakończ z wynikiem max Z

9 #include <iostream> Program #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 15; int main() int Z[N],i,maxZ,minZ; srand((unsigned)time(null)); for(i = 0; i < N; i++) Z[i] = rand() % 10000; maxz = minz = Z[0]; Program generuje 15 liczb pseudolosowych z zakresu od 0 do Wygenerowane liczby zapisuje w tablicy Z. Następnie wyszukuje liczbę najmniejszą i największą. Jako wynik jest wypisywana zawartość całej tablicy w 15 kolejnych wierszach, a w wierszu 17 liczba najmniejsza i największa. for(i = 1; i < N; i++) if(z[i] > maxz) maxz = Z[i]; if(z[i] < minz) minz = Z[i]; for(i = 0; i < N; i++) cout << setw(5) << Z[i] << endl; cout << endl << setw(5) << minz << setw(5) << maxz << endl << endl; system("pause"); return 0;

10 Czasami zależy nam nie na wartości elementu maksymalnego (minimalnego), lecz na jego pozycji w zbiorze. W tym przypadku musimy, oprócz wartości samego elementu maksymalnego (minimalnego), zapamiętywać jego pozycję, którą na końcu zwracamy jako wynik pracy algorytmu. Algorytm wyszukiwania pozycji elementu maksymalnego w zbiorze Wejście: n - liczba elementów w tablicy Z, n N Z - tablica zawierająca elementy do zliczania. Indeksy elementów rozpoczynają się od 0, a kończą na n - 1. Wyjście: Pozycja (indeks) elementu maksymalnego. W max Z jest wartość elementu maksymalnego. Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C max Z - tymczasowy element maksymalny max p - pozycja tymczasowego elementu maksymalnego

11 Lista kroków: K01: max Z Z[0] - za tymczasowy element maksymalny bierzemy pierwszy element; K02: max p 0 - zapamiętujemy jego pozycję; K03: Dla i = 1,2,...,n-1 wykonuj K04...K06 - przeglądamy następne elementy zbioru; K04: Jeśli Z[i] max Z, to następny obieg pętli K03 - sprawdzamy, czy trafiliśmy na element większy od max Z ; K05: max Z Z[i] - jeśli tak, to zapamiętujemy wartość elementu w max Z ; K06: max p i - oraz jego pozycję w max p ; K07: Zakończ z wynikiem max p - zwracamy zapamiętaną pozycję.

12 Program #include <iostream> #include <iomanip> #include <cstdlib> Program generuje 15 liczb #include <time.h> pseudolosowych z zakresu od 0 do using namespace std; const int N = 15; Wygenerowane liczby zapisuje w int main() tablicy Z. Następnie wyszukuje liczbę najmniejszą i największą. Jako wynik int Z[N],i,maxZ,maxp,minZ,minp; srand((unsigned)time(null)); jest wypisywana zawartość całej tablicy for(i = 0; i < N; i++) Z[i] = rand() % 10000; w 15 kolejnych wierszach, a w wierszu maxz = minz = Z[0]; 17 podana zostaje pozycja elementu maxp = minp = 0; najmniejszego i największego for(i = 0; i < N; i++) if(z[i] < minz) minz = Z[i]; minp = i; if(z[i] > maxz) maxz = Z[i]; maxp = i; for(i = 0; i < N; i++) cout << setw(2) << i << " : " << setw(4) << Z[i] << endl; cout << endl << minp << ":" << maxp << endl << endl; system("pause"); return 0;

13 Problem W n-elementowym zbiorze Z znaleźć element maksymalny i minimalny. Jeśli do wyszukiwania elementu max i min zastosujemy standardowy algorytm, to otrzymamy: Wejście: n - liczba elementów w tablicy Z, n N Z - tablica zawierająca elementy do zliczania. Indeksy elementów rozpoczynają się od 0, a kończą na n - 1. Wyjście: Wartość najmniejszego i największego elementu w tablicy Z. Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C max Z - tymczasowy element maksymalny min Z - tymczasowy element minimalny

14 Numer Operacja Liczba wykonań 1 min Z Z[0] 1 2 max Z Z[0] 1 3 i Jeśli i = n, to idź do 9 n 5 Jeśli Z[i] < min Z, to min Z Z[i] n Jeśli Z[i] > max Z, to max Z Z[i] n i i + 1 n Idź do 4 n Pisz min Z, max Z 1 10 Zakończ 1

15 Zastanówmy się, czy można uzyskać lepszy wynik. Algorytm porównuje każdy element zbioru z min Z oraz z max Z. Tutaj tkwi nieefektywność. Obie operacje nr 5 i 6 są wykonywane po n - 1 razy, co daje w sumie 2n - 2 porównania w całym zbiorze. Wyobraźmy sobie, iż ze zbioru bierzemy parę 2 elementów i porównujemy je ze sobą. Element większy nie może być minimalnym, zatem nie musimy go już porównywać z min Z. Wystarczy porównanie z max Z. To samo dotyczy elementu mniejszego porównujemy go tylko z min Z. Otrzymujemy zysk poprzednio dwa elementy wymagały wykonania 4 porównań (każdy z min Z i max Z ). Teraz mamy: Jedno porównanie dwóch elementów, które rozdzieli je na element mniejszy i element większy. Element mniejszy porównujemy z min Z. Element większy porównujemy z max Z.

16 Daje to 3 porównania zamiast 4. Ponieważ ze zbioru pobieramy po dwa kolejne elementy, to ich liczba musi być parzysta. Jeśli zbiór ma nieparzystą liczbę elementów, to po prostu dublujemy ostatni element i dostaniemy parzystą liczbę elementów. Porównanie pary elementów dzieli zbiór na dwa podzbiory zbiór elementów większych i mniejszych. W podzbiorze elementów większych szukamy elementu maksymalnego, a w podzbiorze elementów mniejszych szukamy minimalnego. Ponieważ ich liczebność jest o połowę mniejsza od liczebności zbioru wejściowego, to wykonamy mniej operacji porównań. Metoda rozwiązywania problemów przez podział na mniejsze części w informatyce nosi nazwę Dziel i Zwyciężaj (ang. Divide and Conquer). Dzięki niej często udaje się zmniejszyć złożoność obliczeniową wielu algorytmów.

17 Algorytm jednoczesnego wyszukiwania max i min w zbiorze Wejście: n - liczba elementów w tablicy Z, n N Z - tablica zawierająca elementy do zliczania. Indeksy elementów rozpoczynają się od 0, a kończą na n - 1. Tablica musi umożliwiać dodanie elementu, jeśli n jest nieparzyste. Wyjście: Element minimalny i maksymalny w tablicy Z. Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C max Z - tymczasowy element maksymalny max p - pozycja tymczasowego elementu maksymalnego.

18 Lista kroków: K01: Jeśli n mod 2 = 1, Z[n] Z[n-1] - jeśli nieparzysta liczba elementów, dublujemy ostatni; K02: min Z największa liczba całkowita - inicjujemy min Z i max Z ; K03: max Z najmniejsza liczba całkowita K04: i 0 K05: Dopóki i < n wykonuj K06...K12 - wybieramy pary kolejnych elementów; K06: Jeśli Z[i] > Z[i+1], to idź do K10 - rozdzielamy je na element mniejszy i większy; K07: Jeśli Z[i] < min Z, to min Z Z[i] - Z[i] - mniejszy, Z[i+1] większy; K08: Jeśli Z[i+1] > max Z, to max Z Z[i+1] K09: Idź do K12 K10: Jeśli Z[i] > max Z, to max Z Z[i] - Z[i] - większy, Z[i+1] mniejszy; K11: Jeśli Z[i+1] < min Z, to min Z Z[i+1] K12: i i przechodzimy do następnej pary elementów; K13: Pisz min Z, max Z - wyprowadzamy wyniki; K14: Zakończ

19 Program #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 15; int main() int Z[N+1],minZ,maxZ,i; srand((unsigned)time(null)); for(i = 0; i < N; i++) Z[i] = rand() % 10000; if(n % 2) Z[N] = Z[N-1]; minz = 10000; maxz = -1; for(i = 0; i < N; i += 2) if(z[i] > Z[i+1]) if(z[i] > maxz) maxz = Z[i]; if(z[i+1] < minz) minz = Z[i+1]; else if(z[i] < minz) minz = Z[i]; if(z[i+1] > maxz) maxz = Z[i+1]; for(i = 0; i < N; i++) cout << setw(4) << Z[i] << endl; cout << endl << minz << " : " << maxz << endl << endl; system("pause"); return 0; Program generuje 15 liczb pseudolosowych z zakresu od 0 do Wygenerowane liczby zapisuje w tablicy Z. Następnie wyszukuje liczbę najmniejszą i największą. Jako wynik jest jest wypisywana zawartość całej tablicy w 15 kolejnych wierszach, a w wierszu 17 podane zostają element minimalny i maksymalny.

20 Problem Posortować rosnąco n-elementowy zbiór Z. Zadanie sortowania polega na takim ułożeniu elementów zbioru Z, aby zachodził pomiędzy nimi porządek zdefiniowany odpowiednią relacją porządkującą. Porządek rosnący oznacza, iż w miarę posuwania się w głąb zbioru, wartości elementów stają się coraz większe nie napotkamy elementu mniejszego od któregokolwiek z elementów go poprzedzających w zbiorze. Relacją porządkującą jest relacja < lub przy dopuszczeniu elementów o równych wartościach jednakże wtedy nie jest określona kolejność elementów równych.

21 Istnieje bardzo wiele różnych algorytmów sortowania (ang. Sorting Algorithms). W tym rozdziale przedstawimy bardzo prosty algorytm, który wykorzystuje liniowe wyszukiwanie (ang. linear search) elementu minimalnego w zbiorze sortowanie przez wybór (ang. Selection Sort). Zasada pracy tego algorytmu jest następująca: Wyszukujemy w zbiorze Z najmniejszy element min Z. Element najmniejszy w zbiorze posortowanym powinien znaleźć się na pierwszej pozycji. Zatem znaleziony element wymieniamy z elementem pierwszym. Dalej postępujemy identycznie ze zbiorem Z pomniejszonym o pierwszy element.. Znajdujemy kolejny element minimalny i wymieniamy go z elementem na pozycji drugiej. Sortowanie tym samym sposobem kontynuujemy dla kolejnych podzbiorów Z. Gdy otrzymamy podzbiór jednoelementowy (czyli gdy wykonamy n - 1 wyborów elementów minimalnych). Kolejno znajdowane elementy minimalne tworzą ciąg niemalejący to wyjaśnia skuteczność tej metody przy sortowaniu zbioru.

22 Algorytm sortowania przez wybór Wejście: n liczba elementów w tablicy Z, n N Z tablica zawierająca elementy do posortowania. Wyjście: Tablica Z z posortowanymi rosnąco elementami Zmienne pomocnicze: i,j przebiegają przez kolejne indeksy elementów Z. i,j C min Z tymczasowy element minimalny min p pozycja tymczasowego elementu minimalnego, min p C

23 Lista kroków: K01: Dla i = 0,1,...,n-2 wykonuj K02...K08 K02: min Z Z[i] - tymczasowy element minimalny; K03: min p i - oraz jego tymczasowa pozycja; K04: Dla j = i+1,i+2,...,n-1 wykonuj K05...K07 - w pozostałych elementach szukamy minimalnego; K05: Jeśli Z[j] min Z, to kolejny obieg pętli K04...K07 K06: min Z Z[j] - znaleźliśmy, uaktualniamy min Z oraz min p; K07: min p j K08: Z[i] Z[min p ] - zamieniamy znaleziony element z i-tym. K09: Zakończ

24 #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 200; int main() int Z[N],minZ,minp,i,j,x; srand((unsigned)time(null)); for(i = 0; i < N; i++) Z[i] = rand() % 1000; // Przed sortowaniem for(i = 0; i < N; i++) cout << setw(4) << Z[i]; cout << endl; // Sortowanie przez wybór for(i = 0; i < N - 1; i++) minz = Z[i]; minp = i; for(j = i + 1; j < N; j++) if(z[j] < minz) minz = Z[j]; minp = j; x = Z[i]; Z[i] = Z[minp]; Z[minp] = x; Program Program wypełnia 200 elementową tablicę liczbami pseudolosowymi od 0 do 999. Następnie wyświetla zawartość tej tablicy przed sortowaniem, sortuje ją opisanym algorytmem sortowania przez wybór i na koniec wyświetla tablicę posortowaną. // Po sortowaniu for(i = 0; i < N; i++) cout << setw(4) << Z[i]; cout << endl; system("pause"); return 0;

25 Problem W n-elementowym zbiorze Z znaleźć wartość występującą najczęściej.

26 Rozwiązanie nr 1 Problem wyszukiwania najczęstszej wartości (ang. searching for the most frequent value), czyli tzw. dominanty zbioru, możemy rozwiązać na kilka różnych sposobów. Pierwszym, najprostszym podejściem jest metoda bezpośrednia naiwna: Przeglądamy kolejne elementy zbioru i zliczamy liczbę wystąpień ich wartości w zbiorze. Można to robić tak zapamiętujemy i-ty element i ustawiamy licznik wystąpień na 0. Następnie przeglądamy cały zbiór i, jeśli trafimy na element o takiej samej wartości, to licznik zwiększamy o 1. Po wykonaniu tej operacji porównujemy zawartość licznika z tymczasową maksymalną liczbą wystąpień (na początku algorytmu jest ona ustawiana na 0). Jeśli stan licznika jest większy, to zapamiętujemy go w tymczasowej maksymalnej liczbie wystąpień oraz zapamiętujemy wyszukiwaną wartość elementu. Gdy przeglądniemy w ten sposób i zliczymy wystąpienia wartości wszystkich elementów w zbiorze Z, to otrzymamy element powtarzający się najczęściej oraz ilość tych powtórzeń. Klasa złożoności obliczeniowej tak zdefiniowanego algorytmu jest równa O(n 2 ). Jeśli elementów jest niewiele (do około 5000) i szybkość działania nie gra istotnej roli, to rozwiązanie naiwne jest do przyjęcia tak właśnie było w przypadku zadania maturalnego.

27 Algorytm znajdowania najczęstszej wartości Wejście: n - liczba elementów w tablicy Z, n N Z - tablica do wyszukania najczęstszego elementu Elementy są liczbami całkowitymi. Indeksy od 0 do n Wyjście: Element występujący najczęściej w Z oraz liczba jego wystąpień. Jeśli jest kilka elementów o takiej samej maksymalnej liczbie wystąpień, to algorytm zwraca pierwszy z nich, który został napotkany w zbiorze. Zmienne pomocnicze: i, j - przebiega przez kolejne indeksy elementów Z. i,j C L - licznik wystąpień wartości elementu, L C W - wartość elementu, której liczbę wystąpień w Z zliczamy. max W - najczęstsza wartość elementów tablicy Z max L - liczba wystąpień wartości najczęstszej. max L C

28 Lista kroków: K01: max L 0 -zerujemy maksymalną liczbę wystąpień; K02: Dla i = 0,1,...,n - 1 wykonuj K03...K09 - przeglądamy kolejne elementy tablicy Z K03: W Z[i] - zapamiętujemy; poszukiwaną wartość elementu; K04: L 0 - zerujemy jej licznik wystąpień; K05: Dla j = 0,1,...,n - 1 wykonuj K06 - zliczamy wystąpienia W; K06: Jeśli Z[j] = W, to L L + 1 K07: Jeśli L max L, to następny obieg pętli K2 - sprawdzamy, czy W jest tymczasowo najczęstsze; K08: max L L - jeśli tak, zapamiętujemy liczbę wystąpień; K09: max W W - oraz wartość W; K10: Pisz max W, max L - wypisujemy wyniki; K11: Zakończ

29 Program #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; int main() const int N = 400; int Z[N],i,j,L,W,maxL,maxW; // Generujemy zawartość Z[] srand((unsigned)time(null)); for(i = 0; i < N; i++) Z[i] = rand() % 100; // Wyszukujemy najczęstszą wartość maxl = 0; for(i = 0; i < N; i++) W = Z[i]; L = 0; for(j = 0; j < N; j++) if(z[j] == W) L++; if(l > maxl) maxl = L; maxw = W; // Wypisujemy tablicę for(i = 0; i < N; i++) if(z[i] == maxw) cout << " >" << setw(2) << Z[i]; else cout << setw(4) << Z[i]; Program umieszcza w tablicy Z 400 liczb pseudolosowych z zakresu od 0 do 99, wyznacza wartość występującą najczęściej, wyświetla zawartość tej tablicy zaznaczając wartości najczęstsze i wypisuje tę wartość oraz liczbę jej wystąpień. // Wypisujemy najczęstszy element // oraz liczbę wystąpień cout << endl << maxw << " : " << maxl << endl << endl; system("pause"); return 0;

30 Rozwiązanie nr 2 Podany powyżej algorytm jest bardzo prymitywny i wykonuje wiele niepotrzebnych działań. Postarajmy się je wyeliminować. 1. Ze zbioru bierzemy KAŻDY element Z[i] i zliczamy wystąpienia jego wartości W w CAŁYM zbiorze Z. W ten sposób najczęstsza wartość max W zostanie zliczona max L 2 razy. Zatem pierwsze ulepszenie będzie polegało na tym, iż pobrany element W zbioru zliczamy tylko wtedy, gdy jest on różny od max W. Wynika z tego, iż na początku pracy algorytmu do max W musimy wpisać wartość różną od Z[0] (dlaczego?). 2. Każdy element Z[i] zliczamy w całym zbiorze. Tymczasem, jeśli wartość i- tego elementu wystąpiła wcześniej w zbiorze, to jest już zliczona. Jeśli nie wystąpiła wcześniej, to nie ma sensu jej tam szukać, nieprawdaż? W obu przypadkach wystarczy, jeśli zliczanie rozpoczniemy od pozycji i + 1 do końca zbioru. Elementy zliczone po prostu zliczymy ponownie, lecz w mniejszym zakresie. Elementy nowe zliczymy poprawnie, od miejsca ich pierwszego wystąpienia. 3. Jeśli w trakcie działania algorytmu w max L mamy chwilową maksymalną liczbę wystąpień pewnej wartości max W, to zliczanie nowych elementów możemy przerwać po osiągnięciu pozycji n - max L. Jeśli nowy element występuje na tej lub dalszej pozycji w zbiorze Z, to liczba wystąpień jego wartości nie będzie już większa od max L, gdyż braknie elementów.

31 Algorytm znajdowania najczęstszej wartości wersja nr 2 Wejście: n - liczba elementów w tablicy Z, n N Z - tablica do wyszukania najczęstszego elementu Elementy są liczbami całkowitymi. Indeksy od 0 do n Wyjście: Element występujący najczęściej w Z oraz liczba jego wystąpień. Jeśli jest kilka elementów o takiej samej maksymalnej liczbie wystąpień, to algorytm zwraca pierwszy z nich, który został napotkany w zbiorze Zmienne pomocnicze: i, j - przebiega przez kolejne indeksy elementów Z. i,j C L - licznik wystąpień wartości elementu, L C W - wartość elementu, której liczbę wystąpień w Z zliczamy. max W - najczęstsza wartość elementów tablicy Z max L - liczba wystąpień wartości najczęstszej. max L C

32 Lista kroków: K01: max L 0 - licznik wystąpień najczęstszej wartości K02: max W Z[0] najczęstsza wartość - musi być różna od Z[0]! ; K03: i 0 - rozpoczynamy zliczanie wartości elementów ; K04: Dopóki i < n - max L, wykonuj K05...K13 - zliczamy do n-max L ; K05: W Z[i] - zapamiętujemy wartość bieżącego elementu; K06: Jeśli W = max W, to idź do K13 - jeśli jest równa max W, to pomijamy element Z[i]; K07: L 1 - Z[i] raz zliczony; K08: Dla j = i+1,i+2,...,n-1 wykonuj K09 - zliczanie rozpoczynamy od następnych elementów; K09: Jeśli Z[j] = W, to L L + 1 K10: Jeśli L max L, to idź do K13 - zliczyliśmy więcej niż max L? ; K11: max L L - jeśli tak, zapamiętujemy L w max L ; K12: max W W ; oraz W w max W K13: i i przechodzimy do kolejnego elementu Z[i] ; K14: Pisz max W,max L - wyprowadzamy wyniki; K15: Zakończ

33 Program #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; int main() const int N = 400; int Z[N],i,j,L,W,maxL,maxW; // Generujemy zawartość Z[] srand((unsigned)time(null)); for(i = 0; i < N; i++) Z[i] = rand() % 100; // Wyszukujemy najczęstszą wartość maxl = 0; maxw = Z[0] - 1; for(i = 0; i < N - maxl; i++) W = Z[i]; if(maxw!= W) L = 1; for(j = i + 1; j < N; j++) if(z[j] == W) L++; if(l > maxl) maxl = L; maxw = W; Program umieszcza w tablicy Z 400 liczb pseudolosowych z zakresu od 0 do 99, wyznacza wartość występującą najczęściej, wyświetla zawartość tej tablicy zaznaczając wartości najczęstsze i wypisuje tę wartość oraz liczbę jej wystąpień. // Wypisujemy tablicę for(i = 0; i < N; i++) if(z[i] == maxw) cout << " >" << setw(2) << Z[i]; else cout << setw(4) << Z[i]; // Wypisujemy najczęstszy element // oraz liczbę wystąpień cout << endl << maxw << " : " << maxl << endl << endl; system("pause"); return 0;

34 Rozwiązanie nr 3 Jeśli elementy zbioru tworzą spójny przedział wartości i przedział ten nie jest specjalnie duży, to do wyszukania wartości najczęstszej można zastosować następującą metodę. Tworzymy tablicę L, której elementy będą pełniły rolę liczników wystąpień wartości elementów z tablicy Z. Zakres indeksów w L możemy znaleźć wyszukując w tablicy Z wartość minimalną i maksymalną (można też z góry przydzielić odpowiednią liczbę liczników, gdy znamy zakres wartości elementów w przeszukiwanej tablicy Z). Zerujemy wszystkie liczniki w L i przeglądamy tablicę Z zwiększając o 1 liczniki w L, które odpowiadają wartościom przeglądanych elementów. W efekcie po zakończeniu przeglądania tablicy Z w L będziemy mieli informację o liczbie wystąpień każdej z wartości. Wyznaczamy w L element maksymalny. Wynikiem jest indeks, który określa wartość występującą najczęściej w Z oraz zawartość elementu L o tym indeksie, która określa ile razy dana wartość wystąpiła w Z. Tak określony algorytm wyszukiwania najczęstszego elementu posiada liniową klasę złożoności obliczeniowej O(m + n), gdzie m jest liczbą wartości elementów przeszukiwanego zbioru, a n jest liczbą jego elementów.

35 Algorytm znajdowania najczęstszej wartości wersja nr 3 Wejście: n - liczba elementów w tablicy Z, n N Z - tablica do wyszukania najczęstszego elementu Elementy są liczbami całkowitymi. Indeksy od 0 do n min Z - minimalna wartość w Z. max Z - maksymalna wartość w Z. Wyjście: Element występujący najczęściej w Z oraz liczba jego wystąpień. Jeśli jest kilka elementów o takiej samej maksymalnej liczbie wystąpień, to algorytm w tej wersji zwraca najmniejszy z nich (jeśli pozostałe elementy są istotne, to można je odczytać z tablicy L porównując liczbę wystąpień z maksymalną). Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C L - tablica liczników wystąpień wartości elementów z Z. max L - tymczasowy element maksymalny w L max p - pozycja tymczasowego elementu maksymalnego w L

36 Lista kroków: K01: Utwórz L o rozmiarze max Z - min Z + 1 -przygotowujemy liczniki wartości; K02: Wyzeruj L -liczniki ustawiamy na 0; K03: Dla i = 0,1,...,n-1 wykonuj K04 -zliczamy wystąpienia wartości elementów; K04: Zwiększ o 1 L[Z[i] - min Z ] -w odpowiednich licznikach ; K05: max L L[0] -szukamy max w L; K06: max p 0 K07: Dla i = 1,2,...,max Z -min Z wykonuj K08...K10 K08: Jeśli L[i] max L, to następny obieg pętli K07 K09: max L L[i] -zapamiętujemy wartość maksymalną; K10: max p i -oraz jej pozycję; K11: Pisz max p + min Z, max L -wyprowadzamy najczęstszy element oraz liczbę jego wystąpień; K12: Zakończ

37 Program #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 80; int main() int Z[N], * L,i,nL,maxZ,minZ,maxL,maxp; srand((unsigned)time(null)); // Przygotowujemy tablicę Z[] for(i = 0; i < N; i++) Z[i] = -9 + (rand() % 19); // Wyświetlamy tablicę Z[] for(i = 0; i < N; i++) cout << setw(4) << Z[i]; // Wyszukujemy w Z[] min i max if(z[0] > Z[1]) minz = Z[1]; maxz = Z[0]; else minz = Z[0]; maxz = Z[1]; for(i = 2; i < N; i += 2) if(z[i] > Z[i+1]) if(z[i] > maxz) maxz = Z[i]; if(z[i+1] < minz) minz = Z[i+1] ; Program umieszcza w tablicy Z 80 liczb pseudolosowych z zakresu od -9 do 9, wyświetla zawartość tej tablicy i wyznacza w niej wartość występującą najczęściej. Program wypisuje tę wartość oraz liczbę jej wystąpień w tablicy Z.

38 else if(z[i] < minz) minz = Z[i]; if(z[i+1] > maxz) maxz = Z[i+1]; // Przygotowujemy liczniki nl = maxz - minz + 1; L = new int[nl]; for(i = 0; i < nl; i++) L[i] = 0; // Zliczamy wystąpienia wartości z Z[] for(i = 0; i < N; i++) L[Z[i] - minz]++; // Szukamy najczęstszej wartości w L[] maxl = L[0]; maxp = 0; for(i = 0; i < nl; i++) if(l[i] > maxl) maxl = L[i]; maxp = i; // Wyświetlamy wyniki cout << endl << (maxp + minz) << " : " << maxl << endl << endl; delete [] L; system("pause"); return 0;

39 Rozwiązanie nr 4 Zbiór Z możemy posortować rosnąco. Wtedy elementy o równych wartościach znajdą się obok siebie. Teraz wystarczy przeglądnąć zbiór Z od początku do końca, zliczać powtarzające się wartości i zapamiętać tę wartość, która powtarza się najczęściej. Klasa złożoności obliczeniowej algorytmu w tej wersji zależy od zastosowanego algorytmu sortującego zbiór Z. Samo przeglądnięcie zbioru i wyłonienie najczęstszej wartości ma liniową klasę złożoności obliczeniowej O(n). Zaletą tego algorytmu jest to, iż elementy tablicy Z nie muszą być koniecznie liczbami całkowitymi. Mogą to być obiekty dowolnego typu.

40 Algorytm znajdowania najczęstszej wartości wersja nr 4 Wejście: n - liczba elementów w tablicy Z, n N Z - tablica do wyszukania najczęstszego elementu Elementy są liczbami całkowitymi. Indeksy od 0 do n. Tablica powinna być posortowana rosnąco. Na końcu tablicy element Z[n] powinien być umieszczony wartownik o wartości innej niż wartość ostatniego elementu Z[n-1]. Wyjście: Element występujący najczęściej w Z oraz liczba jego wystąpień. Jeśli jest kilka elementów o takiej samej maksymalnej liczbie wystąpień, to algorytm w tej wersji zwraca najmniejszy z nich. Zmienne pomocnicze: i - przebiega przez kolejne indeksy elementów Z. i C max L - liczba wystąpień najczęstszego elementu w Z, max L C max W - wartość najczęstszego elementu w Z L - licznik równych elementów, L C

41 Lista kroków: K02: max L 0 - inicjujemy liczbę wystąpień na 0; K03: L 1 - w L zliczamy pierwszy element; K04: Dla i = 1,2,...,n wykonuj K05...K10 - przeglądamy kolejne elementy aż do wartownika; K05: Jeśli Z[i] = Z[i - 1], to idź do K10 - dla równych elementów zwiększamy L o 1; K06: Jeśli L max L, to idź do K09 - elementy nie są równe, sprawdzamy licznik L; K07: max L L - jeśli L > max L, to zapamiętujemy L; K08: max W Z[i - 1] - oraz wartość elementu ; K09: L 0 - dla nowego elementu licznik L wystartuje od 1; K10: L L zliczamy elementy równe ; K11: Pisz max W, max L - wypisujemy wyniki ; K12: Zakończ

42 #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 200; int main() int Z[N + 1],maxL,maxW,minZ,minp,L,i,j,x; srand((unsigned)time(null)); // Inicjujemy tablicę Z[] for(i = 0; i < N; i++) Z[i] = rand() % 10; // Sortujemy tablicę Z[] for(i = 0; i < N - 1; i++) minz = Z[i]; minp = i; for(j = i + 1; j < N; j++) if(z[j] < minz) minz = Z[j]; minp = j; x = Z[i]; Z[i] = Z[minp]; Z[minp] = x; // Wyświetlamy tablicę Z[] for(i = 0; i < N; i++) cout << setw(2) << Z[i]; cout << endl; // Dodajemy wartownika Z[N] = Z[N - 1] - 1; Program Program umieszcza w tablicy Z 200 liczb pseudolosowych z zakresu od 0 do 9, sortuje tablicę algorytmem sortowania przez wybór, wyświetla ją oraz wyznacza najczęstszą wartość. Program wyświetla tę wartość oraz liczbę jej wystąpień.

43 // Szukamy najczęstszej wartości maxl = 0; L = 1; for(i = 1; i <= N; i++) if(z[i]!= Z[i - 1]) if(l > maxl) maxl = L; maxw = Z[i - 1]; L = 0; L++; // Wyświetlamy wyniki cout << maxw << " : " << maxl << endl << endl; system("pause"); return 0;

Anna Sobocińska Sylwia Piwońska

Anna Sobocińska Sylwia Piwońska Anna Sobocińska Sylwia Piwońska Problem Wyszukiwanie liniowe W n-elementowym zbiorze Z wyszukać element posiadający pożądane własności. Wyszukiwanie liniowe (ang. linear search), zwane również sekwencyjnym

Bardziej szczegółowo

Liczby całkowite i rzeczywiste

Liczby całkowite i rzeczywiste Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy

Bardziej szczegółowo

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE Bartosz Łakomy i Dariusz Dobiesz SPIS TREŚCI: Liczby parzyste i nieparzyste Liczby podzielne lub niepodzielne przez zadane podzielniki NWD algorytm

Bardziej szczegółowo

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach

Bardziej szczegółowo

Sortowanie przez wstawianie Insertion Sort

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,

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy 1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com

Bardziej szczegółowo

Algorytm selekcji Hoare a. Łukasz Miemus

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

Bardziej szczegółowo

Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy Problem Transponować macierz A m n na A T n m. Operacja transponowania macierzy polega na zamianie wierszy w kolumny i

Bardziej szczegółowo

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). [12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne). Tworzenie projektów informatycznych opiera się w dużej mierze na formułowaniu i implementacji algorytmów,

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 6 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji

Bardziej szczegółowo

r. Tablice podstawowe operacje na tablicach

r. Tablice podstawowe operacje na tablicach 27.03.2014r. Tablice podstawowe operacje na tablicach Tablica - definicja Tablica (ang. array) lub wektor (ang. vector) jest złożoną strukturą danych (ang. compound data structure) zbudowaną z ciągu elementów

Bardziej szczegółowo

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

PDF stworzony przez wersję demonstracyjną pdffactory Pro  Program 15 Program 15 Program zawierający następujące funkcje: funkcję wczytującą elementy do tablicy liczb całkowitych podanej jako parametr (długość tablicy również ma być podana jako parametr); funkcję wypisującą

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

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.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

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

Bardziej szczegółowo

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II Wykład Ⅴ O podstawowych operacjach na tablicach Mateusz Ziółkowski, MBiU II Czym są tablice? Tablica (ang. array) to zespół równorzędnych zmiennych, posiadających wspólną nazwę. Jego poszczególne elementy

Bardziej szczegółowo

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. 8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć

Bardziej szczegółowo

Problem W przedziale całkowitym <a,b> wyszukaj wszystkie liczby parzyste.

Problem W przedziale całkowitym <a,b> wyszukaj wszystkie liczby parzyste. Problem W przedziale całkowitym wyszukaj wszystkie liczby parzyste. Liczby parzyste W wielu algorytmach musimy wygenerować liczby parzyste z zadanego przedziału liczb całkowitych. Tego typu

Bardziej szczegółowo

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe Algorytmy sortujące sortowanie kubełkowe, sortowanie grzebieniowe Sortowanie kubełkowe (bucket sort) Jest to jeden z najbardziej popularnych algorytmów sortowania. Został wynaleziony w 1956 r. przez E.J.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 5 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Zadanie o kotach z poprzedniego wykładu # include < iostream > using namespace std ; int main (){ int rozmiar_ rodzinki,

Bardziej szczegółowo

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu

Bardziej szczegółowo

Program 14. #include <iostream> #include <ctime> using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort Sortowanie bąbelkowe - wersja nr 1 Bubble Sort Algorytm Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Można go potraktować jako ulepszenie opisanego w poprzednim rozdziale

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi: Program 20 Napisać następujące funkcje: funkcję pobierającą (z klawiatury) zawartość tablicy liczb całkowitych podanej jako parametr, o długości podanej jako parametr; funkcję wypisującą zawartość tablicy

Bardziej szczegółowo

Luty 2001 Algorytmy (4) 2000/2001

Luty 2001 Algorytmy (4) 2000/2001 Mając dany zbiór elementów, chcemy znaleźć w nim element największy (maksimum), bądź najmniejszy (minimum). We wszystkich naturalnych metodach znajdywania najmniejszego i największego elementu obecne jest

Bardziej szczegółowo

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 )

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,

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

Programowanie Proceduralne

Programowanie Proceduralne Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Programowanie Proceduralne Wykład 1 1 / 59 Cel wykładów z programowania

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

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

Bardziej szczegółowo

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)! 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

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

- - Ocena wykonaniu zad3. Brak zad3

- - Ocena wykonaniu zad3. Brak zad3 Indeks Zad1 Zad2 Zad3 Zad4 Zad Ocena 20986 218129 ocena 4 Zadanie składa się z Cw3_2_a oraz Cw3_2_b Brak opcjonalnego wywołania operacji na tablicy. Brak pętli Ocena 2 Brak zad3 Ocena wykonaniu zad3 po

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy

Bardziej szczegółowo

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Podstawowe algorytmy przetwarzania tablic (wypełnianie, porównywanie elementów,

Bardziej szczegółowo

Metodyki i Techniki Programowania 2

Metodyki i Techniki Programowania 2 Metodyki i Techniki Programowania 2 zajęcia nr 5 algorytmy cz.1: sortowanie Elektronika i Telekomunikacja, semestr III rok akademicki 2009/2010 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Sortowanie

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

Bardziej szczegółowo

Kontrola przebiegu programu

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

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Sortowanie przez scalanie

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

Bardziej szczegółowo

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

Podstawy Informatyki. Sprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych

Bardziej szczegółowo

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 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 ()

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Czym jest całka? Całkowanie numeryczne

Czym jest całka? Całkowanie numeryczne Całkowanie numeryczne jest to zagadnienie z metod elementów skończonych (MES). Korzystając z całkowania numerycznego możemy obliczyć wartość dowolnej całki jednowymiarowej oznaczonej. Wynik jest zawsze

Bardziej szczegółowo

Algorytmy przeszukiwania wzorca

Algorytmy przeszukiwania wzorca Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Algorytmy przeszukiwania wzorca 1 Wstęp Algorytmy

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

Laboratorium nr 7 Sortowanie

Laboratorium nr 7 Sortowanie Laboratorium nr 7 Sortowanie 1. Sortowanie bąbelkowe (BbS) 2. Sortowanie przez wstawianie (IS) 3. Sortowanie przez wybieranie (SS) Materiały Wyróżniamy następujące metody sortowania: 1. Przez prostą zamianę

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

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ą

Bardziej szczegółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119 Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek

Bardziej szczegółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q: Wykład 4 Wyszukiwania w tablicach posortowanych 1. Wyszukiwanie sekwencyjne w tablicy posortowanej 2. Wyszukiwanie binarne bez powtórzeń 3. Wyszukiwanie binarne z powtórzeniami 1 2 3 4 5 6 7 8 9 10 11

Bardziej szczegółowo

Algorytmy, reprezentacja algorytmów.

Algorytmy, reprezentacja algorytmów. Algorytmy, reprezentacja algorytmów. Wprowadzenie do algorytmów Najważniejszym pojęciem algorytmiki jest algorytm (ang. algorithm). Nazwa pochodzi od nazwiska perskiego astronoma, astrologa, matematyka

Bardziej szczegółowo

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 3 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Instrukcja wielokrotnego wyboru Instrukcja wielokrotnego wyboru switch umożliwia podejmowanie decyzji na podstawie wartości

Bardziej szczegółowo

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

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ń

Bardziej szczegółowo

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic: Tablice TEORIA Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Dzięki stosowaniu tablic, zamiast nazywania każdej z np. stu zmiennych osobno możemy zabudować tablicę 100-elementową,

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Wprowadzenie do algorytmiki

Wprowadzenie do algorytmiki Wprowadzenie do algorytmiki Pojecie algorytmu Powszechnie przyjmuje się, że algorytm jest opisem krok po kroku rozwiązania postawionego problemu lub sposób osiągnięcia jakiegoś celu. Wywodzi się z matematyki

Bardziej szczegółowo

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi. Program 3 Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy póki nam sie nie znudzi. #include using namespace std; int main() int odp,a,m; bool pierwsze_podanie =

Bardziej szczegółowo

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 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.

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

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

Bardziej szczegółowo

Jeszcze o algorytmach

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

Bardziej szczegółowo

Wstęp do informatyki- wykład 7

Wstęp do informatyki- wykład 7 1 Wstęp do informatyki- wykład 7 Operatory przypisania, złożone operatory przypisania, Pętla while i do..while Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.

Bardziej szczegółowo

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy 1 Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.

Bardziej szczegółowo

Tablice jednowymiarowe

Tablice jednowymiarowe Tablice jednowymiarowe Gdy mamy do czynienia z zestawem zmiennych, to można z nich zrobić tablicę. Tablica jest ciągiem elementów tego samego typu, który zajmuje ciągły obszar pamięci. Korzyść z zastosowania

Bardziej szczegółowo

PROBLEM. Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych.

PROBLEM. Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych. PROBLEM Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych. Postawiony problem posiada bardzo duże znaczenie w wielu dziedzinach informatyki szczególnie w kryptografii. Na dzień dzisiejszy nie

Bardziej szczegółowo

Algorytmy sortujące 1

Algorytmy sortujące 1 Algorytmy sortujące 1 Sortowanie Jeden z najczęściej występujących, rozwiązywanych i stosowanych problemów. Ułożyć elementy listy (przyjmujemy: tablicy) w rosnącym porządku Sortowanie może być oparte na

Bardziej szczegółowo

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania WOJEWÓDZKI KONKURS INFORMATYCZNY PRZEPROWADZANY W DOTYCHCZASOWYCH GIMNAZJACH W ROKU SZK. 2018/2019 Etap wojewódzki Pytanie 1 O rozmiarze obrazów w grafice rastrowej decyduje całkowita liczba pikseli (wielkość

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA WYŻSZA SZKOŁA IFORMATYKI STOSOWAEJ I ZARZĄDZAIA Złożoność algorytmów Złożoność pamięciowa algorytmu wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie. Złożoność czasowa algorytmu

Bardziej szczegółowo

Sortowanie zewnętrzne

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

Bardziej szczegółowo

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for. Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9

Bardziej szczegółowo

Inicjacja tablicy jednowymiarowej

Inicjacja tablicy jednowymiarowej TABLICE C++ Inicjacja tablicy jednowymiarowej typ_komórek_tablicy nazwa_tablicy [ ilość elementów tablicy ] ; np.: int tablica[1000]; czyli tablica, która może przechowywać tysiąc elementów typu całkowitego,

Bardziej szczegółowo

Algorytmy sortujące. Sortowanie bąbelkowe

Algorytmy sortujące. Sortowanie bąbelkowe Algorytmy sortujące Sortowanie bąbelkowe Sortowanie bąbelkowe - wstęp Algorytm sortowania bąbelkowego jest jednym z najstarszych algorytmów sortujących. Zasada działania opiera się na cyklicznym porównywaniu

Bardziej szczegółowo

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Bardziej szczegółowo

Informatyka A. Algorytmy

Informatyka A. Algorytmy Informatyka A Algorytmy Spis algorytmów 1 Algorytm Euklidesa....................................... 2 2 Rozszerzony algorytm Euklidesa................................ 2 3 Wyszukiwanie min w tablicy..................................

Bardziej szczegółowo

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Wskaźniki. 1.1 Główne zastosowania wskaźników 1 Wskaźniki Wskaźnik (ang. pointer) jest obiektem (zmienną) przechowującym adres pamięci. Definiowanie wskaźników: typ *nazwa wskaznika; np.: int *wsk na x;, double *xxx;, char *znak;. Aby można było pracować

Bardziej szczegółowo

Programowanie obiektowe W3

Programowanie obiektowe W3 Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice

Bardziej szczegółowo

Sortowanie Shella Shell Sort

Sortowanie Shella Shell Sort Sortowanie Shella Shell Sort W latach 50-tych ubiegłego wieku informatyk Donald Shell zauważył, iż algorytm sortowania przez wstawianie pracuje bardzo efektywnie w przypadku gdy zbiór jest w dużym stopniu

Bardziej szczegółowo

Instrukcje sterujące

Instrukcje sterujące Podstawy programowania w C++ Bibliografia: Instrukcje sterujące Nauka programowania dla początkujących; A. Struzińska-Walczak / K. Walczak CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Opracował:

Bardziej szczegółowo

Algorytmy zrandomizowane

Algorytmy zrandomizowane Algorytmy zrandomizowane http://zajecia.jakubw.pl/nai ALGORYTMY ZRANDOMIZOWANE Algorytmy, których działanie uzależnione jest od czynników losowych. Algorytmy typu Monte Carlo: dają (po pewnym czasie) wynik

Bardziej szczegółowo