Pojęcia podstawowe. Złożonośd czasowa algorytmów. Rekurencja

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

Download "Pojęcia podstawowe. Złożonośd czasowa algorytmów. Rekurencja"

Transkrypt

1 Pojęcia podstawowe. Złożonośd czasowa algorytmów. Rekurencja Algorytmy i struktury danych Wykład 1. Rok akademicki: 2010/2011 Ramowy plan wykładów Pojęcie podstawowe. Poprawnośd i złożonośd algorytmów Rekurencja Algorytmy tablicowe Zbiory Tablice asocjacyjne Struktury listowe Drzewa Grafy 2 1

2 Literatura Cormen T., Leiserson C., Rivest R., Stein C., Wprowadzenie do algorytmów, Wydawnictwo Naukowo-Techniczne, 2004 Lafore R., Java. Algorytmy i struktury danych, Helion, 2004 Koffman E., Wolfgang P., Struktury danych i techniki obiektowe na przykładzie Javy 5.0, Helion, 2006 Wirth N., Algorytmy + struktury danych = programy, dowolne wydanie Sysło M., Algorytmy, Wydawnictwo Szkolne i Pedagogiczne, Warszawa, Informacje organizacyjne Wymiar godzinowy: Terminy zajęd: sroda, 13.05, s. 441 Budynek BG Egzamin: pisemny (nie ma zwolnieo z egzaminu) Materiały do wykładu: 4 2

3 Algorytm sposób postępowania umożliwiający rozwiązanie zadania określonego typu podany w postaci zestawu kolejnych czynności do wykonania wykonawcą algorytmu może byd człowiek lub urządzenie (np. komputer) 5 Struktura danych Zestaw powiązanych ze sobą danych wraz z mechanizmami określającymi sposób tworzenia, likwidowania i wykorzystania zdefiniowanego zestawu jako całości oraz poszczególnych jego elementów. 6 3

4 Program komputerowy zrozumiały dla komputera sposób zapisu algorytmu i opisu struktur danych zapisywany przy użyciu języków programowania. 7 Ewolucja metod programowania (1) Programowanie w języku maszynowym Programista posługuje się pojęciami charakterystycznymi dla systemu komputerowego, a nie dla dziedziny zastosowao (operuje rozkazami wchodzącymi w skład listy rozkazów procesora) Rozkazy składające się na program programista zapisu w postaci binarnych kodów Programista operuje bezpośrednio na komórkach pamięci operacyjnej. Odpowiedzialny jest za określenie sposobu binarnej reprezentacji informacji. 8 4

5 Ewolucja metod programowania (2) Programowanie w języku symbolicznym (asemblerze) Programista posługuje się rozkazami pochodzącymi z listy rozkazów procesora (ale są one zapisywane w postaci instrukcji, a nie w postaci binarnych kodów). Języki symboliczne wprowadziły zmiany w sposobie notacji programu, ale nie spowodowały zasadniczych zmian w zestawie pojęd wykorzystywanych do opisu algorytmów. Pojawiła się możliwośd przypisywania nazw komórkom pamięci (definiowanie zmiennych) 9 Ewolucja metod programowania (3) Programowanie w językach wysokiego poziomu I generacji Pojawiła się możliwośd stosowania instrukcji: podstawienia (przypisania), warunkowej, pętli (iteracji), skoku. Przy opisie algorytmy następuje rezygnacja ze stosowania rozkazów z listy rozkazów procesora i pojawia się możliwośd stosowania pojęd o znacznie większym stopniu ogólności. Wprowadzenie mechanizmu deklarowania zmiennych Ułatwione zostało operowanie na wartościach tekstowych Pojawiła się możliwośd korzystania ze złożonych typów danych (tablice, pliki) 10 5

6 Ewolucja metod programowania (4) Programowanie proceduralne Możliwośd definiowania podprogramów. Zdefiniowanie nowego podprogramu pozwala na rozszerzenie zbioru instrukcji dostępnych w stosowanym języku programowania. Mechanizm parametrów zwiększył uniwersalnośd definiowanych instrukcji. Pojawiła się możliwośd definiowania danych lokalnych (dostępnych tylko w podprogramie) oraz danych globalnych (dostępnych w całym programie) 11 Ewolucja metod programowania (5) Programowanie strukturalne Zwiększenie liczby instrukcji sterujących (np.: różne postaci pętli, instrukcji warunkowych, wyboru, podstawienia) dzięki czemu można było wyeliminowad instrukcję skoku bezwarunkowego Podział programu na dwie części: opis struktur danych i opis algorytmu Zwiększenie liczby dostępnych typów danych (tablice, rekordy, zbiory, pliki), Możliwośd stosowania dynamicznych struktur danych (stos, kolejka, listy, drzewa), Możliwośd definiowania własnych struktur danych. 12 6

7 Ewolucja metod programowania (6) Programowanie obiektowe Równoległe definiowanie algorytmów i struktur danych i ich połączenie w jedną całośd (klasę): reprezentuje w programie fragment rzeczywistości (jego cechy, jego zachowania), pozwala programiście posługiwad się pojęciami charakterystycznymi dla dziedziny problemu (oderwad się od pojęd związanych ze sprzętem komputerowym), pozwala ukryd szczegóły implementacji klasa abstrakcyjny typ danych (ABSTRAHOWANIE - operacja myślowa polegająca na uwzględnianiu tylko wybranych cech sytuacji (przedmiotu, osoby), z pominięciem cech uznanych za nieistotne) 13 Wymagania wobec algorytmów poprawnośd algorytm generuje prawidłowe rezultaty (nie zawiera błędów), wydajnośd realizacja algorytmu wymaga użycia akceptowalnej ilości zasobów: czasu, pamięci. 14 7

8 Pojęcie błędu niezgodnośd z obowiązującymi regułami pisania, liczenia, wymowy itp.; odstępstwo od normy; pomyłka postępek, działanie, które przynosi komuś złe skutki; niewłaściwe posunięcie, przedsięwzięcie mylne, fałszywe mniemanie o czymś (przestarz.) Źródło: Słownik języka polskiego PWN 15 Błędy w programowaniu błędy logiczne na etapie projektowania algorytmu (środki zaradcze: stosowanie sprawdzonych algorytmów, formalne dowodzenie poprawności algorytmu, testowanie programu) błędy wykonania programu ujawniające się w trakcie realizacji algorytmu zapisanego w postaci programu (ujawniające się w postaci wyjątków) błędy syntaktyczne polegające na niezgodności tekstu programu z gramatyką języka programowania (wykrywane przez kompilator) 16 8

9 Złożonośd obliczeniowa Złożonośd obliczeniowa algorytmu ilośd zasobów systemu komputerowego niezbędnych do jego realizacji. Zasoby systemu komputerowego niezbędne do realizacji algorytmu: czas pracy procesora (złożonośd czasowa algorytmu), pamięd operacyjna (złożonośd pamięciowa algorytmu). Złożonośd obliczeniowa jest uzależniona od wielkości zadania. 17 Sortowania przez wybieranie (1) import java.io.*; public class SortowaniePrzezWybieranie { static void sortuj(int [] liczby) { int k, pomoc; for (int i = 0; i < liczby.length - 1; i++) { k = i; for (int j = i; j < liczby.length; j++) if (liczby[k] > liczby[j]) k = j; pomoc = liczby[i]; liczby[i] = liczby[k]; liczby[k] = pomoc; 18 9

10 Sortowania przez wybieranie (2) static int czytajliczbe() throws IOException { BufferedReader klaw = new BufferedReader (new InputStreamReader (System.in)); return Integer.parseInt(klaw.readLine()); static void drukujwektor(int [] tab) { for (int i = 0; i < tab.length; i++) System.out.print(tab[i] + " "); System.out.print("\n"); 19 Sortowania przez wybieranie (3) public static void main(string [] args) throws IOException { System.out.print("Liczba elementow w wektorze: "); int n = czytajliczbe(); int [] wektor = new int[n]; for (int i = 0; i < wektor.length; i++) wektor[i] = (int) (100 * Math.random()); long czas1, czas2; czas1 = System.currentTimeMillis(); // czas w milisekundach, jaki upłynął od // 1 stycznia 1970 roku, godz. 0:00 sortuj(wektor); czas2 = System.currentTimeMillis(); System.out.println("Czas realizacji obliczen: " + (czas2 - czas1)); 20 10

11 Sortowania przez wybieranie (4) Rezultat działania programu: Liczba elementow w wektorze: Czas realizacji obliczen: Czas realizacji algorytmu (1) 22 11

12 Czas realizacji algorytmu (2) Czas (milisekundy) y = 0, n 2 0,0094 n + 286,41 23 Oszacowanie czasu realizacji algorytmu (1) 24 12

13 Oszacowanie czasu realizacji algorytmu (2) Analiza powyższych danych pozwala stwierdzid, że czas obliczeo uzależniony jest przede wszystkim od składnika: 0, n 2 Składnik ten nazywany jest składnikiem dominującym. Po pominięciu stałych współczynników można stwierdzid, że zależnośd pomiędzy czasem wykonania a wielkością zadania ma charakter funkcji kwadratowej. Kwadratowy charakter zależności uwidacznia się w coraz większym stopniu wraz ze wzrostem wielkości zadania. 25 Cechy empirycznego określania złożoności Zalety: otrzymane czasy obliczeo są proste w interpretacji Wady: koniecznośd wielokrotnego uruchamiania programu (dla złożonych algorytmów może to byd bardzo czasochłonne), uzyskane wyniki dotyczą zastosowanego w obliczeniach zestawu danych (trudno jest określid czas realizacji dla przypadku najlepszego, najgorszego oraz przeciętnego ), wyniki dotyczą zwykle stosunkowo niewielkich zbiorów danych nie wiadomo, czy dla zbiorów o większym rozmiarze charakter zależności się nie zmieni, czas jest uzależniony od szybkości i architektury komputera, języka programowanie, techniki translacji, systemu operacyjnego trudna porównywalnośd wyników z uwagi na wielozadaniowy charakter systemów operacyjnych trudno jest określid, jaka częśd czasu była rzeczywiście przeznaczona na realizację analizowanego programu

14 Bezpośrednia analiza algorytmów Analiza dotyczy: charakteru zależności (np. zależnośd liniowa lub kwadratowa), a nie jej dokładnej postaci (wzór funkcji) uwzględniany jest element dominujący, pomijane są współczynniki stałe górnego i dolnego ograniczenia czasu realizacji algorytmu (a nie czasu realizacji algorytmu) górne ograniczenie czas realizacji algorytmu jest nie większy niż... (ale może byd krótszy) przypadek pesymistyczny, dolne ograniczenie czas realizacji algorytmu jest nie mniejszy niż... (ale może byd dłuższy) przypadek optymistyczny, zachowania się algorytmu dla zbiorów danych o dużej wielkości (czyli dla wszystkich n większych od pewnej wartości n 0 ) 27 Górne ograniczenie czasu realizacji algorytmu (1) f(n) czas realizacji algorytmu (zależny od n) f(n) zależy od wielu czynników i podanie dokładnego charakteru zależności jest trudne łatwiej jest zdefiniowad ograniczenie górne dla f(n). c g(n) f(n) n 28 14

15 Górne ograniczenie czasu realizacji algorytmu (2) Czas realizacji algorytmu jest rzędu co najwyżej g(n), jeśli istnieją stała rzeczywista c > 0 i stała naturalna n 0 takie, że nierównośd f(n) c g(n) zachodzi dla każdego n n 0. Zbiór wszystkich funkcji f(n) spełniających powyższe ograniczenie określany jest jako O(g(n)). O(g(n)) = {f(n): istnieją dodatnie stałe c oraz n 0 takie, że 0 f(n) c g(n) dla wszystkich n n 0 29 Górne ograniczenie czasu realizacji algorytmu (3) Stwierdzenie: czas realizacji algorytmu wynosi O(g(n)) lub czas realizacji algorytmu jest rzędu co najwyżej g(n) lub algorytm jest klasy O(g(n)) oznacza: że istnieje taka stała c, że dla n n 0 czas realizacji algorytmu wynosi co najwyżej c g(n)

16 Dolne ograniczenie czasu realizacji algorytmu (4) Czas realizacji algorytmu jest rzędu co najmniej g(n), jeśli istnieją stała rzeczywista c > 0 i stała naturalna n 0 takie, że nierównośd f(n) c g(n) zachodzi dla każdego n n 0. Zbiór wszystkich funkcji spełniających to ograniczenie określany jest jako Ω(g(n)) Ω(g(n)) = {f(n): istnieją dodatnie stałe c i n 0 takie, że 0 cg(n) f(n) dla wszystkich n n 0 f(n) c g(n) n 31 Dolne i górne ograniczenie czasu realizacji algorytmu (1) Czas realizacji algorytmu jest dokładnie rzędu g(n) jeśli istnieją stała rzeczywista c 1 > 0, c 2 > 0 i stała naturalna n 0 takie, że nierównośd c 1 g(n) f(n) c 2 g(n) zachodzi dla każdego n n 0. c 2 g(n) f(n) c 1 g(n) n 32 16

17 Dolne i górne ograniczenie czasu realizacji algorytmu (2) Zbiór wszystkich funkcji spełniających to ograniczenie określany jest jako Θ(g(n)) Θ(g(n)) = {f(n); istnieją dodatnie stałe c 1, c 2 i n 0 takie, że 0 c 1 g(n) f(n) c 2 g(n) dla wszystkich n n 0 33 Średnia złożonośd obliczeniowa Średnia złożonośd czasowa uwzględnia prawdopodobieostwa pojawienia się każdego możliwego zestawu danych wejściowych Z i (n) i-ty możliwy zestaw danych n-elementowy p i prawdopodobieostwo wystąpienia i-tego zestawu T i (n) złożonośd czasowa algorytmu dla i-tego zestawu danych Średnia złożonośd czasowa algorytmu dana jest formułą: T śr n i p T i i n 34 17

18 Złożonośd obliczenia sortowania przez wybieranie (1) static void sortuj(int [] liczby) { int k, pomoc; for (int i = 0; i < liczby.length - 1; i++) { //koszt K1 k = i; for (int j = i; j < liczby.length; j++) //koszt K2 if (liczby[k] > liczby[j]) k = j; //koszt K3 pomoc = liczby[i]; liczby[i] = liczby[k]; liczby[k] = pomoc; 35 Złożonośd obliczenia sortowania przez wybieranie (2) for (int i = 0; i < n - 1; i++) { K1 for (int j = i; j < n; j++) { K2 K

19 Złożonośd obliczenia sortowania przez wybieranie (3) for (int i = 0; i < n - 1; i++) { K1 (n 1) * K2 K3 37 Złożonośd obliczenia sortowania przez wybieranie (4) (n 1) * K1 + (n 1) [n * K2 + (n-1) * K * K2] + (n 1) * K3 = = n * K1 K1 + *½ * (2 + n) * (n 1) * K2] + n * K3 K3 = = n * K1 K1 + n * K2 K2 + ½ * n 2 * K2 ½ * n * K2 + n * K3 K3 = = ½ * K2 * n 2 + (K1 + ½ * K2 + K3) * n (K1 + K2 + K3) = O(n 2 ) 38 19

20 Rodzaje złożoności (1) Złożoność logarytmiczna log n W każdym kroku algorytmu zadanie o rozmiarze n jest sprowadzane do zadania o rozmiarze n / 2 Przykład: algorytm wyszukiwania binarnego jest klasy O(log n) Przykładowa realizacja wyszukiwania binarnego: Mamy odszukad wartośd 11 w ciągu liczb: 1, 2, 7, 9, 9, 11, 12, 15, 22, 34, 52, 67, 87, 90, 99 1, 2, 7, 9, 9, 11, 12 9, 11, Rodzaje złożoności (2) Złożoność liniowa n gdy dla każdego elementu pochodzącego z n elementowego zbioru danych wykonywana jest stała liczba operacji Przykłady: wyszukiwanie sekwencyjne sumowanie liczb w wektorze wyznaczanie minimum, maksimum 40 20

21 Rodzaje złożoności (3) złożoność liniowo logarytmiczna n log n gdy w każdym kroku zadanie o rozmiarze n jest sprowadzane do dwóch zadao o rozmiarze n/2, a uzyskane wyniki są ponownie scalane Przykład: sortowanie przez łączenie jest klasy O(n log n) sortowanie szybkie jest klasy O(n 2 ), ale przeciętny czas realizacji algorytmu jest rzędu n log n 41 Rodzaje złożoności (4) złożoność kwadratowa n 2 gdy dla każdej pary elementów realizowana jest pewna, stała liczba operacji (zwykle algorytmy takie są zapisywane za pomocą dwóch zagnieżdżonych pętli for) Przykłady: proste metody sortowania (przez wstawianie, wybieranie, bąbelkowe) są klasy O(n 2 ), również średni czas realizacji tych metod jest rzędu O(n 2 ) 42 21

22 Rodzaje złożoności (5) złożoność wielomianowa stopnia wyższego niż dwa (n 3, n 4,...) Przykład: mnożenie macierzy w sposób tradycyjny jest algorytmem klasy O(n 3 ) 43 Rodzaje złożoności (6) Złożoność wykładnicza postaci 2 n gdy realizowanych jest n kroków, a liczba operacji w każdym z nich wzrasta w sposób geometryczny Przykład: wieże Hanoi 44 22

23 Rodzaje złożoności (7) Złożoność wykładnicza typu n! gdy pewna, stała liczba operacji realizowana jest dla każdej permutacji n elementów Przykład: Tworzenie magicznych kwadratów z n elementów (pierwiastek z n musi byd wartością całkowitą) Algorytm postępowania: tworzymy kolejną permutację, wpisujemy do kwadratu i sprawdzamy, czy spełnia konieczne warunki. 45 Rodzaje złożoności (8) 46 23

24 Rekurencja Rekurencyjny sposób zapisu kodu programu - z poziomu podprogramu wywoływany jest ten sam podprogram. 47 Przykład (1) public class Rekurencja01 { static void f() { System.out.println("Poczatek"); f(); System.out.println("Koniec"); public static void main(string [] args) { f(); 48 24

25 Przykład (2) main() { f() Początek f(x) Koniec Początek f(x) Koniec Początek f(x) Koniec Początek f(x) Koniec i.t.d. 49 Przykład (3) Efekt uruchomienia programu: Poczatek Poczatek Poczatek... Poczatek Exception in thread "main" java.lang.stackoverflowerror 50 25

26 Warunek stopu Wywołania rekurencyjne muszą się zakooczyd (w podprogramie musi zostad zdefiniowany warunek zatrzymania się algorytmu /warunek stopu/). 51 Przykład (1) public class Rekurencja02 { static int licznik = 0; static void f() { licznik++; System.out.println("Poczatek"); if (licznik <=5) f(); System.out.println("Koniec"); public static void main(string [] args) { f(); 52 26

27 Przykład (2) main() { f() licznik = 1 Początek f(x) Koniec licznik = 2 Początek f(x) Koniec licznik = 3 Początek f(x) Koniec licznik = 4 Początek f(x) Koniec licznik = 5 Początek f(x) Koniec licznik = 6 Początek Koniec 53 Przykład (3) Efekt uruchomienia programu: Poczatek Poczatek Poczatek Poczatek Poczatek Poczatek Koniec Koniec Koniec Koniec Koniec Koniec 54 27

28 Rekurencyjne obliczanie silni (1) public class Rekurencja03 { static int silnia(int n) { int pomoc; System.out.println("Wywolanie: silnia(" + n + ")"); if ((n == 0) (n == 1)) pomoc = 1; else pomoc = n * silnia(n-1); System.out.println("Zwrocenie wyniku: " + n + "! = " + pomoc); return pomoc; public static void main(string [] args) { System.out.println("4! = " + silnia(4)); 55 Rekurencyjne obliczanie silni (2) 56 28

29 Rekurencja może byd kosztowna... public class Rekurencja04 { static int licznik = 0; static int fib(int n) //obliczanie n-tej liczby Fibonacciego { licznik++; if (n == 0) return 0; else if (n == 1) return 1; else return fib(n-1) + fib(n-2); public static void main(string [] args) { System.out.println("5-ta liczba Fibonacciego to: " + fib(5)); System.out.println("Liczba wywolan funkcji:" + licznik); 57 Efekt działania: 5-ta liczba Fibonacciego to: 5 Liczba wywolan funkcji:

30 Sposób wyznaczania liczb Fibonacciego Jeśli istnieje oczywiste rozwiązanie iteracyjne, to należy je wybrad. 59 Sterowanie kolejnością wykonywania działao (1) public class Rekurencja05 { static void sekwencja(int n) { System.out.print(n + " "); if (n > 0) sekwencja(n-1); public static void main(string [] args) { sekwencja(5); System.out.println(); Efekt działania programu:

31 Sterowanie kolejnością wykonywania działao (2) public class Rekurencja06 { static void sekwencja(int n) { if (n > 0) sekwencja(n-1); System.out.print(n + " "); public static void main(string [] args) { sekwencja(5); System.out.println(); Efekt działania programu Wieże Hanoi public class Rekurencja08 { static void przesun(int ile, char wiezazrodlowa, char wiezadocelowa, char wiezapomocnicza) { if (ile == 1) System.out.println(wiezaZrodlowa + " => " + wiezadocelowa); else { przesun(ile-1,wiezazrodlowa,wiezapomocnicza, wiezadocelowa); System.out.println(wiezaZrodlowa + " => " + wiezadocelowa); przesun(ile-1,wiezapomocnicza,wiezadocelowa, wiezazrodlowa); 62 31

32 Złożonośd algorytmu: Wieże Hanoi (1) Analizowana jest liczba przesunięd potrzebna do rozwiązania zadania z n krążkami (liczbę przesunięd oznaczymy przez P(n)) gdy n = 1 to P(1) = 1 gdy n > 1 to P(n) = 2 * P(n 1) Złożonośd algorytmu: Wieże Hanoi (2) Poziom 0 P(n) Liczba przesunięć 1 P(n-1) 1 P(n-1) 1 2 P(n-2) 1 P(n-2) P(n-2) 1 P(n-2) 2 3 P(n-3) 1 P(n-3) P(n-3) 1 P(n-3) P(n-3) 1 P(n-3) P(n-3) 1 P(n-3)

33 Złożonośd algorytmu: Wieże Hanoi (3) P(n) = P1 + P2 + P Pn = 2 n 1 W powyższym wzorze zastosowany został wzór na sumę n pierwszych elementów ciągu geometrycznego (o elementach b 1, b 2,..., bn i ilorazie q) S n = b 1 * (q n 1) / (q 1) 65 Inwersja elementów w wektorze (1) public class Rekurencja07 { static void wyswietlwektor(int [] w) { for(int i = 0; i < w.length; i++) System.out.print(w[i] + " "); System.out.println(); 66 33

34 Inwersja elementów w wektorze (2) static void inwersja(int poczatek, int koniec, int [] w) { if (poczatek < koniec) { int pomoc = w[poczatek]; w[poczatek] = w[koniec]; w[koniec] = pomoc; inwersja(poczatek+1,koniec-1,w); 67 Inwersja elementów w wektorze (3) public static void main(string [] args) { int [] tab = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11; wyswietlwektor(tab); inwersja(0,tab.length-1,tab); wyswietlwektor(tab); Efekt działania programu:

35 Sortowanie szybkie (1) Hoare, 1960 void quicksort(int tab[], int first, int last) wybierz jedną z wartości znajdujących się w wektorze (w poniższym algorytmie wybierana jest wartośd znajdująca się na pozycji o numerze first) dokonaj przemieszczenia elementów w wektorze, tak aby uzyskad: elementy < x x elementy >= x za pomocą tej samej procedury uporządkuj częśd wektora znajdującą się na lewo od wartości x oraz częśd znajdującą się na prawo od wartości x. średnia złożonośd obliczeniowa: O(n * log(n)) pesymistyczna złożonośd obliczeniowa O(n 2 ) 69 Sortowanie szybkie (2) public class QuickSort { public static void swap (int tab[], int x, int y) { int temp = tab[x]; tab[x] = tab[y]; tab[y] = temp; 70 35

36 Sortowanie szybkie (3) public static int partition(int tab[], int first, int last) { int pivot = tab[first]; int up = first; int down = last; do { while ((up < last) && (pivot >= tab[up])) up++; while (pivot < tab[down]) down--; if (up < down) swap(tab,up,down); while (up < down); swap(tab,first,down); return down; 71 Sortowanie szybkie (4) public static void quicksort(int tab[], int first, int last) { if (first >= last) return; int pivot = partition(tab, first, last); quicksort(tab, first, pivot-1); quicksort(tab, pivot+1, last); 72 36

37 Sortowanie szybkie (5) public static void main(string argv[]) { int n = 10; int tab[] = new int[n]; for (int i=0 ; i < n; i++) tab[i] = (int) (100 * Math.random()); quicksort(tab, 0, n-1); for (int i=0 ; i < n; i++) System.out.print(tab[i] + " "); System.out.println(); 73 Sortowanie przez łączenie Mergesort (1) sort(int poczatek, int koniec, int [] w), podziel wektory na dwie połowy, posortuj każdą z nich (za pomocą tej samej metody, o ile ich długośd > 1), połącz posortowane części w całośd, złożonośd obliczeniowa: O(n * log(n))

38 Sortowanie przez łączenie Mergesort (2) public class MergeSort { static void wyswietlwektor(int [] w) { for(int i = 0; i < w.length; i++) System.out.print(w[i] + " "); System.out.println(); 75 Sortowanie przez łączenie Mergesort (3) static void sort(int poczatek, int koniec, int [] w) { if (poczatek >= koniec) return; int srodek = (poczatek + koniec) / 2; sort(poczatek, srodek, w); sort(srodek+1, koniec, w); scal(poczatek, srodek, koniec, w); 76 38

39 Sortowanie przez łączenie Mergesort (3) static void scal(int poczatek, int srodek, int koniec, int [] w) { int pocz1 = poczatek; int kon1 = srodek; int pocz2 = srodek + 1; int kon2 = koniec; while ((pocz1 <= kon1) && (pocz2 <= kon2)) { if (w[pocz1] < w[pocz2]) pocz1++; else { int pomoc = w[pocz2]; for (int i = pocz2-1; i >= pocz1; i--) w[i+1] = w[i]; w[pocz1] = pomoc; pocz1++; kon1++; pocz2++; 77 Sortowanie przez łączenie Mergesort (4) public static void main(string [] args) { int [] tab = {1, 5, 3, 7, 7, 9, 2, 3, 2, 2, 3; wyswietlwektor(tab); sort(0,tab.length-1,tab); wyswietlwektor(tab); Wynik działania programu

Wybrane algorytmy tablicowe

Wybrane algorytmy tablicowe Wybrane algorytmy tablicowe Algorytmy i struktury danych Wykład 2. Rok akademicki: 2009/2010 Sortowanie przez wybieranie for (int i = 0; i < liczby.length - 1; i++) k = i; for (int j = i; j < liczby.length;

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

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala

Bardziej szczegółowo

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki. 1. Podaj definicję informatyki. 2. W jaki sposób można definiować informatykę? 3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki. 4. Co to jest algorytm? 5. Podaj neumanowską architekturę

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

Matematyczne Podstawy Informatyki

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

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych. Algorytmy i Struktury Danych. Organizacja wykładu. Problem Sortowania. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury

Bardziej szczegółowo

Wykład 2. Poprawność algorytmów

Wykład 2. Poprawność algorytmów Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 3 2 Złożoność obliczeniowa algorytmów Notacja wielkie 0 Notacja Ω i Θ Algorytm Hornera Przykłady rzędów

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

Projektowanie algorytmów rekurencyjnych

Projektowanie algorytmów rekurencyjnych C9 Projektowanie algorytmów rekurencyjnych wiczenie 1. Przeanalizowa działanie poniszego algorytmu dla parametru wejciowego n = 4 (rysunek 9.1): n i i

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

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

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

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

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

Złożoność algorytmów. Wstęp do Informatyki

Złożoność algorytmów. Wstęp do Informatyki Złożoność algorytmów Złożoność pamięciowa - liczba i rozmiar struktur danych wykorzystywanych w algorytmie Złożoność czasowa - liczba operacji elementarnych wykonywanych w trakcie przebiegu algorytmu Złożoność

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA WYDZIAŁ INŻYNIERII ELEKTRYCZNEJ i KOMPUTEROWEJ Katedra Automatyki i Technik Informacyjnych Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Złożoność obliczeniowa, poprawność programów Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XII Jesień 2013 1 / 20 Złożoność obliczeniowa Problem Ile czasu

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę

Zaliczenie. Egzamin. lub. Wykład. Zaliczenie. Ćwiczenie. 3 zadania. Projekty. Ocena. Na ocenę Zaliczenie Egzamin Ocena lub Zerówka Wykład z Zaliczenie Ocena Ćwiczenie Projekty 3 zadania Na ocenę Sylabus O http://wmii.uwm.edu.pl/~jakula/sylabus_23 17N1-ALISTD_PL.pdf JAK? CO? ILE? Polecane Cormen

Bardziej szczegółowo

1. Analiza algorytmów przypomnienie

1. Analiza algorytmów przypomnienie 1. Analiza algorytmów przypomnienie T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Wprowadzenie do algorytmów, rozdziały 1-4 Wydawnictwa naukowo-techniczne (2004) Jak mierzyć efektywność algorytmu?

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

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Pierwsze kroki Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Co znaczy

Bardziej szczegółowo

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Technologie cyfrowe Artur Kalinowski Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.pl Semestr letni 2014/2015 Zadanie algorytmiczne: wyszukiwanie dane wejściowe:

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Podstawowe informacje Prowadzący: Jan Tuziemski Email: jan.tuziemski@pg.edu.pl Konsultacje: pokój 412 GB (do ustalenia 412 GB) Podstawowe informacje literatura K. Goczyła Struktury

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

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:

Bardziej szczegółowo

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I Sylabus modułu: Informatyka A (03-MO1S-12-InfoA) 1. Informacje ogólne koordynator modułu

Bardziej szczegółowo

Zasady analizy algorytmów

Zasady analizy algorytmów Zasady analizy algorytmów A więc dziś w programie: - Kilka ważnych definicji i opisów formalnych - Złożoność: czasowa i pamięciowa - Kategorie problemów - Jakieś przykłady Problem: Zadanie możliwe do rozwiązania

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Sortowanie - wybrane algorytmy

Sortowanie - wybrane algorytmy Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe

Bardziej szczegółowo

Technologie informacyjne Wykład VII-IX

Technologie informacyjne Wykład VII-IX Technologie informacyjne -IX A. Matuszak 19 marca 2013 A. Matuszak Technologie informacyjne -IX Rekurencja A. Matuszak (2) Technologie informacyjne -IX Gotowanie jajek na miękko weż czysty garnek włóż

Bardziej szczegółowo

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

Bardziej szczegółowo

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Grażyna Koba MIGRA 2019 Spis treści (propozycja na 2*32 = 64 godziny lekcyjne) Moduł A. Wokół komputera i sieci komputerowych

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa). Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Metodyka i Technika Programowania 1

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

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 3a: Złożoność obliczeniowa algorytmów http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Złożoność obliczeniowa i asymptotyczna

Bardziej szczegółowo

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne 2 Algorytmy Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Java EE produkcja oprogramowania

Java EE produkcja oprogramowania Java EE produkcja oprogramowania PPJ PODSTAWY PROGRAMOWANIA W JAVIE PODSTAWY JĘZYKA JAVA 1 Warszawa, 2016Z 2 Ogólna charakterystyka języka Java 3 Java 1/2 Język programowania Java został opracowany przez

Bardziej szczegółowo

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I

Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia I stopnia (licencjackie), rok I Sylabus modułu: Informatyka (03-MO1N-12-Info) 1. Informacje ogólne koordynator modułu

Bardziej szczegółowo

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17 Załącznik nr 4 do Uchwały Senatu nr 430/01/2015 SYLABUS DOTYCZY CYKLU KSZTAŁCENIA 2015 2019 Realizacja w roku akademickim 2016/17 1.1. Podstawowe informacje o przedmiocie/module Nazwa przedmiotu/ modułu

Bardziej szczegółowo

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

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

Bardziej szczegółowo

Podyplomowe Studium Programowania i Systemów Baz Danych

Podyplomowe Studium Programowania i Systemów Baz Danych Podyplomowe Studium Programowania i Systemów Baz Danych Algorytmy, struktury danych i techniki programowania 15 godz. wykładu / 15 godz. laboratorium dr inż. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

KARTA KURSU. Wstęp do programowania

KARTA KURSU. Wstęp do programowania KARTA KURSU Nazwa Nazwa w j. ang. Wstęp do programowania Introduction to Programming Kod Punktacja ECTS* 6 Koordynator dr inż. Magdalena Andrzejewska Zespół dydaktyczny: dr inż. Magdalena Andrzejewska

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe 15 stycznia 2019 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 P Jaka wartość zostanie zwrócona

Bardziej szczegółowo

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln) Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia II stopnia, rok 1 Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln) 1. Informacje ogólne

Bardziej szczegółowo

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013 Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Matematyka, studia II stopnia, rok 1 Sylabus modułu: Matematyczne podstawy informatyki (03-MO2S-12-MPIn) 1. Informacje ogólne koordynator

Bardziej szczegółowo

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy

Bardziej szczegółowo

Technologie informacyjne - wykład 12 -

Technologie informacyjne - wykład 12 - Zakład Fizyki Budowli i Komputerowych Metod Projektowania Instytut Budownictwa Wydział Budownictwa Lądowego i Wodnego Politechnika Wrocławska Technologie informacyjne - wykład 12 - Prowadzący: Dmochowski

Bardziej szczegółowo

Informatyka 1. Złożoność obliczeniowa

Informatyka 1. Złożoność obliczeniowa Informatyka 1 Wykład XI Złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada 80 20, ocena efektywności

Bardziej szczegółowo

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

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

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

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott Struktury danych i złozoność obliczeniowa Prof. dr hab. inż. Jan Magott Formy zajęć: Wykład 1 godz., Ćwiczenia 1 godz., Projekt 2 godz.. Adres strony z materiałami do wykładu: http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Bardziej szczegółowo

INFORMATYKA SORTOWANIE DANYCH.

INFORMATYKA SORTOWANIE DANYCH. INFORMATYKA SORTOWANIE DANYCH http://www.infoceram.agh.edu.pl SORTOWANIE Jest to proces ustawiania zbioru obiektów w określonym porządku. Sortowanie stosowane jest w celu ułatwienia późniejszego wyszukania

Bardziej szczegółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. Przygotowała: Agnieszka Reiter Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

Bardziej szczegółowo

Język programowania PASCAL

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

Bardziej szczegółowo

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT] Programowanie w Javie Lista nr 1 1. Jak uruchomić pierwszy program w Javie? Przykład przy wykorzystaniu NetBeans: File->New Project Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Bardziej szczegółowo

Sortowanie przez wstawianie

Sortowanie przez wstawianie Sortowanie przez wstawianie Wykład 1 26 lutego 2019 (Wykład 1) Sortowanie przez wstawianie 26 lutego 2019 1 / 25 Outline 1 Literatura 2 Algorytm 3 Problem sortowania Pseudokod 4 Sortowanie przez wstawianie

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

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

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

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

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

Bardziej szczegółowo

Podyplomowe Studium Informatyki

Podyplomowe Studium Informatyki Podyplomowe Studium Informatyki Wstęp do informatyki 30 godz. wykładu dr inż. Paweł Syty, 413GB, sylas@mif.pg.gda.pl, http://sylas.info Literatura D. Harel, Rzecz o istocie informatyki. Algorytmika, WNT

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

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

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować

Bardziej szczegółowo

Szczegółowy program kursów szkoły programowania Halpress

Szczegółowy program kursów szkoły programowania Halpress Szczegółowy program kursów szkoły programowania Halpress Lekcja A - Bezpłatna lekcja pokazowa w LCB Leszno "Godzina kodowania - Hour of Code (11-16 lat) Kurs (B) - Indywidualne przygotowanie do matury

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

5. Podstawowe algorytmy i ich cechy.

5. Podstawowe algorytmy i ich cechy. 23 5. Podstawowe algorytmy i ich cechy. 5.1. Wyszukiwanie liniowe i binarne 5.1.1. Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich,

Bardziej szczegółowo

Algorytm. a programowanie -

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

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy. 12. Rekurencja. Funkcja rekurencyjna funkcja, która wywołuje samą siebie. Naturalne postępowanie: np. zbierając rozsypane pionki do gry podnosi się zwykle pierwszy, a potem zbiera się resztę w ten sam

Bardziej szczegółowo

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

Przeglad podstawowych pojęć (3) Podstawy informatyki (3) dr inż. Sebastian Pluta. Instytut Informatyki Teoretycznej i Stosowanej

Przeglad podstawowych pojęć (3) Podstawy informatyki (3) dr inż. Sebastian Pluta. Instytut Informatyki Teoretycznej i Stosowanej Przeglad podstawowych pojęć (1) Podstawy informatyki (3) dr inż. Sebastian Pluta pluta@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Program komputerowy to sekwencja instrukcji wykonywanych

Bardziej szczegółowo

Algorytm i złożoność obliczeniowa algorytmu

Algorytm i złożoność obliczeniowa algorytmu Algorytm i złożoność obliczeniowa algorytmu Algorytm - przepis postępowania, którego wykonanie prowadzi do rozwiązania określonego problemu określa czynności, jakie należy wykonać wyszczególnia wszystkie

Bardziej szczegółowo

KARTA MODUŁU KSZTAŁCENIA

KARTA MODUŁU KSZTAŁCENIA KARTA MODUŁU KSZTAŁCENIA I. Informacje ogólne 1 Nazwa modułu kształcenia Algorytmy i struktury danych 2 Nazwa jednostki prowadzącej moduł Instytut Informatyki, Zakład Informatyki Stosowanej 3 Kod modułu

Bardziej szczegółowo

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji Podstawy programowania Laboratorium Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji Instrukcja warunkowa if Format instrukcji warunkowej Przykład 1. if (warunek) instrukcja albo zestaw

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Podstawy programowania. Podstawy C# Przykłady algorytmów

Podstawy programowania. Podstawy C# Przykłady algorytmów Podstawy programowania Podstawy C# Przykłady algorytmów Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania

Bardziej szczegółowo

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Więcej o sprawności algorytmów Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Załóżmy, że możemy wykonać dane zadanie przy użyciu dwóch algorytmów: jednego o złożoności czasowej

Bardziej szczegółowo

Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Niestacjonarne (stacjonarne / niestacjonarne)

Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Niestacjonarne (stacjonarne / niestacjonarne) Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. KARTA MODUŁU / KARTA PRZEDMIOTU Kod modułu Nazwa modułu Informatyka 2 Nazwa modułu w języku angielskim Computer science 2 Obowiązuje

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

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

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2) Podstawy programowania (język C) funkcje rekurencyjne Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Funkcje rekurencyjne (1) W języku C funkcja moŝe wywoływać samą siebie.

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

Bardziej szczegółowo