ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

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

Download "ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:"

Transkrypt

1 ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy zastosować w danych okolicznościach? 3) Czy istnieje lepszy algorytm od rozważanego? Czy jest on optymalny? Konstruując algorytm należy zwracać uwagę na : - poprawność semantyczną - prostotę - czas działania - ilość zajmowanej pamięci - optymalność - okoliczności w jakich należy go używać, a w jakich nie Złożoność obliczeniową algorytmu definiuje się jako ilość zasobów komputerowych, potrzebnych do jego wykonania. Wyróżniamy złożoność pamięciową i czasową. Będziemy się zajmować głównie złożonością czasową!!! Miara złożoności musi być uniwersalna czyli oderwana od szczegółów natury "sprzętowej" tj. - Jaki komputer jest używany? - Jaka jest częstotliwość zegara taktującego procesor? - Czy program będzie jedynym wykonywanym na komputerze? Jeśli nie to jaki jest jego priorytet? - Jakiego kompilatora używamy? - Czy w kompilatorze włączono opcje optymalizacji kodu?... etc Parametrem najczęściej decydującym o czasie wykonania algorytmu jest rozmiar danych, z którymi ma on do czynienia.

2 Parametr ten może mieć różne znaczenie: - dla funkcji sortującej tablicę, czy funkcji wyszukiwania linowego lub binarnego parametrem będzie rozmiar tablicy n - dla dodawania, mnożenia macierzy, parametrem również będzie rozmiar tablicy n - dla funkcji liczącej n! będzie to wielkość danej wejściowej n - dla ciągu Fibonacciego rozmiarem danych wejściowych może być również liczba symboli użytych do zakodowania liczny n (dla reprezentacji binarnej lg n +1 ) - jeśli na wejściu algorytmu będzie graf to możemy podawać liczbę wierzchołków i liczbę krawędzi jako rozmiar danych wejściowych (2 liczby) - dla niektórych zagadnien (problemow) mimo zastosowana tego samego algorytmu możemy mieć inny rozmiar danych W algorytmie zawsze można wyróżnić tzw. operacje dominujące lub operacje podstawowe (najbardziej czasochłonne) - takie, że łączna ich liczba jest proporcjonalna do liczby wszystkich operacji jednostkowych w dowolnej realizacji algorytmu. Dla sortowania operacją tą będzie zwykle porównanie dwóch elementów, lub także przestawienie elementów ciągu. Nie jest jednoznacznie określone, które operacje należy traktować jako dominujące, mogą to być porównania, ale również dodawanie lub mnożenie. Podstawowa analiza złożoności czasowej algorytmu określa, ile razy operacja dominująca jest wykonywana dla kazdej wartości rozmiaru danych wejściowych. W niektórych przypadkach liczba ta zależy nie tylko od rozmiaru danych wejściowych, ale również od wartości wejściowych (np. przeszukiwanie linowe).

3 W innych przypadkach (np. dodawanie tablic), operacja dominująca jest wykonywana zawsze tę samą liczbe razy dla każdej realizacji problemu o rozmiarze n. W takich przypadkach T(n) definiujemy jako liczbę wykonań operacji dominującej przez algorytm dla realizacji o rozmiarze danych n. T(n) jest wówczas nazywane złożonością czasową w każdym wypadku. W niektórych przypadkach dla pełnej analizy algorytmu należy wybrac dwie różne operacje dominujące. Jednostką złożoności czasowej jest czas wykonania jednej operacji dominującej. W ogólności wyróżniamy: - złożoność pesymistyczną - zdefiniowaną jako ilość zasobów komputerowych, potrzebnych przy "najgorszych" danych wejściowych rozmiaru n - złożoność oczekiwaną - definiowaną jako ilość zasobów komputerowych, potrzebnych przy "typowych" danych wejściowych rozmiaru n W definicjach wykorzystujemy następujące wielkości: D n - zbiór zestawów danych wejściowych rozmiaru n t(d) - liczba operacji dominujących dla zestawu danych wejściowych d X n - zmienna losowa równa t(d) dla d D n P nk - rozkład prawdopodobieństwa zmiennej losowej X n, tzn prawdopodobieństwo, że dla danych rozmiaru n algorytm wykona k operacji dominujących ( k 0 ) Zwykle przyjmujemy, że każdy zestaw danych rozmiaru n może się pojawić z jednakowym prawdopodobieństwem.

4 Pesymistyczna złożoność czasowa to funkcja : W(n) = sup t(d) : d D n czyli kres górny t(d) Możliwe jest również określenie optymistycznej złożoności czasowej B(n) = inf t(d) : d D n, ale jest ona rzadko używana. Oczekiwana złożoność czasowa (złożoność w średnim przypadku) to funkcja: A(n) = k 0 ( k*p nk ) czyli wartość oczekiwana E( X n ) Oczywiście jeśli istnieje T(n) to W(n) = A(n) = T(n) Aby stwierdzić, na ile W(n) i A(n) są reprezentatywne dla wszystkich danych wejściowych wprowadza się dodatkowo: - miarę wrażliwości pesymistycznej Δ(n) = sup t(d 1 ) - t(d 2 ) : d 1, d 2 D n - miarę wrażliwości oczekiwanej ( odchylenie standardowe ) σ(n) = dev( X n ) = var( X n ) = k 0 ( k - E( X n ) ) 2 * P nk Im większe wartości Δ(n) i σ(n) tym algorytm jest bardziej wrażliwy na dane wejściowe i tym bardziej jego zachowanie może odbiegać od tego opisanego funkcjami W(n), A(n). Przykład: Przeszukiwanie liniowe zbioru (ciągu) Problem: kluczy? czy klucz x znajduje się w tablicy S, zawierajacej n

5 Dane wejściowe: całkowita liczba dodatnia n, tablica kluczy S indeksowana od 1 do n oraz klucz x. Wynik: location lokalizacja klucza x w tablicy S (0, jeżeli x nie występuje w S) void linsearch(int n, const keytype S[], keytype x, index& location) location = 1; while (location <= n && S[location]!= x) location++; if(location > n) location = 0; Rozmiar danych wejściowych: n Operacja dominująca: S[location]!= x Pesymistyczna złożoność czasowa: W(n) = n+1 Pesymistyczna wrażliwość czasowa: Δ(n) = n Oczekiwana złożoność czasowa: A(n) =? Zakładamy, że P nk = 1/n dla k=1,2,3,...,n => A(n) = n k = 1 (k* P nk ) = 1/n * k = 1/n * n*(n+1)/2 = (n+1)/2 Oczekiwana wrażliwość czasowa? Var( X n ) = n k = 1 ( k - (n+1)/2 ) 2 *1/n = = 1/n * ( n*(n+1)*(2n+2)/6-2(n+1)/2 *n*(n+1)/2 +n*( (n+1)/2 ) 2 ) = (n+1)*(2n+1)/6 - (n+1) 2 /4 = (n+1)* (4n+2-3n-3)/12 = (n 2-1)/12 n 2 /12

6 zatem σ(n) 0.29*n Ponieważ W(n), A(n) oraz Δ(n), σ(n) są liniowe w n, więc algorytm ma dużą wrażliwość liczby operacji dominujących na dane wejściowe. Faktyczna/praktyczna złożoność czasowa algorytmu (czas działania, T(n) ) zwykle różni się od wyliczonej teoretycznie współczynnikiem proporcjonalności zależnym od konkretnej realizacji algorytmu. Istotną informacją zawarta w W(n), A(n) jest rząd wielkości, czyli zachowanie asymptotyczne, gdy n ->. Przykład (wyznaczanie złożoności praktycznej): 0! = 1 N! = n! = n* (n-1)! gdy n 1 unsigned long int silnia(int x) if (x==0) return 1; else return x*silnia(x-1); Przyjmujemy, że operacją dominującą jest instrukcja porównania z czasem t c. Zatem: T(0) = t c T(n) = t c +T(n-1) dla n 1 Należy uzyskać nie-rekurencyjną funkcję T(n)

7 T(n) = t c + T(n-1) T(n-1) = t c + T(n-2) T(n-2) = t c + T(n-3) T(1) = t c + T(0) T(0) = t c L = P => T(n) + T(n-1) T(0) = (n+1)* t c + T(n-1) T(0) => T(n) = (n+1)* t c W praktyce nieistotna jest taka dokładność dla złożoności praktycznej T(n) i różnice między np. T(n) = (n+1)* t c i np. T(n) = (n+3)* t c można zaniedbać. Będziemy zatem szukać złożoności teoretycznej, tj. funkcji matematycznej występującej w T(n), która odgrywa w niej najważniejszą rolę, wpływając najsilniej na czas wykonania programu. Złożoność teoretyczną, inaczej klasę algorytmu O( T(n) ) definiujemy: O(T(n)) = g:t:n->r + ( M R + )( n 0 N )( n n 0 ) [ g(n) M*T(n) ] ( klasą O dowolnej funkcji T:N->R + jest taka funkcja g, że istnieje M oraz n 0 takie, że dla każdego n n 0 zachodzi g(n) M*T(n) ) np. T(n) = 3n+1 => O(T(n)) = O(n) T(n) = n 2 -n+1 => O(T(n)) = O( n 2 ) T(n) = 2 n +n 2 +4 => O(T(n)) = O( 2 n )

8 Klasa O (będąca zbiorem funkcji ) jest wielkością asymptotyczną, pozwalającą wyrazić w postaci arytmetycznej wielkości z góry nie znane w postaci analitycznej. Własności funkcji O : c*o( f(n) ) = O( f(n) ) O( f(n) ) + O( f(n) ) = O( f(n) ) O(O( f(n) ) ) = O( f(n) ) O( f(n) ) * O( g(n) ) = O( f(n)*g(n) ) O( f(n) * g(n) ) = f(n)*o( g(n) ) Najczęściej spotykane złożoności czasowe algorytmów: 1) log(n) - występuje, np. dla algorytmów, w których zadanie rozmiaru n zostaje sprowadzone do zadania rozmiaru n/2 + pewna stała liczba działań ( np. przeszukiwanie binarne uporządkowanego ciągu) 2) n - występuje, np. dla algorytmów, w których jest wykonywana pewna stała liczba działań dla każdego z n elementów danych wejściowych (np. algorytm Hornera wyznaczania wartości wielomianu) 3) n*log(n) - występuje, np. dla algorytmów, w których zadanie rozmiaru n zostaje sprowadzone do dwóch podzadań rozmiaru n/2 + pewna liczba działań liniowa w n (np. niektóre metody sortowania - quicksort ) 4) n 2 - występuje, np. dla algorytmów w których jest wykonywana pewna stała liczba działań dla każdej pary elementów danych wejściowych (podwójna instrukcja iteracyjna, np. operacje na tablicach)

9 5) 2 n - występuje, np. dla algorytmów, w których jest wykonywana stała liczba działań dla każdego podzbioru danych wejściowych 6) n! - występuje, np. dla algorytmów, w których jest wykonywana stała liczba działań dla każdej permutacji danych wejściowych

10 Czas działania algorytmu/ programu o danym rozmiarze danych n silnie zależy od złożoności algorytmu: Tc = 1 μs Należy zawsze pamiętać o asymptotycznym charakterze klasy algorytmu O. Przykład: Mamy dwa algorytmy: W1 klasy O(logN) (złożoność praktyczna 100*log 2 N) W2 klasy O(N) (złożoność praktyczna 10*N) Dla N=2, dla W1, T(N)=100 > dla W2, T(N)=20 Dla N=1024, dla W1, T(N)=1000 < dla W2, T(N)=10240 Zatem dla wystarczająco dużego N algorytm W1 jest bardziej efektywny niż W2. Jeszcze jeden przykład wyznaczania złożoności czasowej algorytmu (zerowanie tablicy poniżej przekątnej wraz z nią):

11 int tab[n][n]; void zerowanie( ) int i,j; i=0; // ta while (i< n) // tc j=0; // ta while (j<=i) // tc j (tc+2ta) tab[i,j]=0; // ta j=j+1; // ta i=i+1; // ta gdzie ta - czas wykonania instrukcji przypisania tc - czas wykonania instrukcji porównania Pamiętając, że instrukcja while powtarza n razy instrukcje zawarte pomiędzy nawiasami, a warunek jest sprawdzany n+1 razy można zapisać:

12 T(N) = tc + ta + N i=1 ( 2*ta + 2*tc + i j=1 (tc + 2*ta) ) i po usunięciu wewnętrznej sumy dostajemy: T(N) = tc + ta + N i=1 ( 2*ta + 2*tc + i*(tc + 2*ta) ) = tc + ta + 2*N*(ta + tc) + N*(N+1)*(tc+2*ta)/2 ) i po uproszczeniu T(N) = ta (1+3*N+N 2 ) + tc*(1+2.5*tc+ N 2 /2 ) program jest klasy O(n 2 ) Powyższe przykłady miały jedną wspólną cechę: czas wykonania programu nie zależał od wartości danych, a jedynie od ich rozmiarów. Przykład (fragment programu) const n=10; int t[n]; void sumowanie( ) int i,k; int suma=0; i=0; // ta = 0 while (i<n) // tc = 1 j=0; // ta = 0 while (j<=t[i]) // tc = 1 suma=suma+2; // ta = 0 j=j+1; // ta = 0 i=i+1; // ta = 0 Problemem jest fakt, że nie znamy zawartości tablicy t[n]. T(n) = tc + N i=1 ( tc + t[i] j=1 ( tc ) )

13 T(n) = tc + N*tc + N i=1 (t[i]*tc ) T(n) = tc + N*tc + N*t[i]*tc T(n) = tc*( 1 + N + N*t[i] ) T(n) max( N, N*t[i] ) Możemy zatem jedynie powiedzieć, że czas wykonania jest proporcjonalny do większej z liczb N i N*t[i], ale nie jesteśmy w stanie określić dokładnej wartości. Problemem jest nieznajomość zawartości tablicy, która jest potrzebna do otrzymania ostatecznego wyniku. Jedyne co można zrobić to przeprowadzić analizę statystyczną zadania. Niekiedy możemy znacząco uprościć obliczenia zakładając: - zwracamy uwagę tylko na najbardziej czasochłonne operacje (najczęściej instrukcje porównania). - wybieramy wiersz programu znajdujący się w najgłębiej położonej instrukcji iteracyjnej (pętle w pętlach...) i obliczamy ile razy jest on wykonywany. Z wyniku dedukujemy złożoność teoretyczną. i=0; while (i<n) j=0; while (j<=n) suma=suma+2; j=j+1; i=i+1;

14 Wybierając instrukcję suma:=suma+2 obliczamy w prosty sposób, że wykona się ona N(N+1) razy. Zatem fragment programu ma złożoność teoretyczną O(n 2 ). Analiza równań rekurencyjnych W rozwiązaniach równań rekurencyjnych stosuje się zwykle dwie metody: - rozwinięcie równania do sumy - znalezienia funkcji tworzącej Rozwinięcie do sumy Przykłady wyznaczania praktycznej złożoności czasowej T(n) : 1) T(1) = 0 T(n) = T( n/2 ) + c dla n > 1 Zależność tą otrzymujemy jako równanie złożoności, gdy problem rozmiaru n sprowadza się do pod-problemu rozmiaru o połowę mniejszego. Podstawiamy n=2 k. T(n) = T( 2 k ) = T( 2 k-1 ) + c = T( 2 k-2 ) + c + c = T( 2 0 ) + k*c = k*c = c*logn O(T(n)) = logn 2) T(1) = 0 T(n) = T( n/2 ) + T( n/2 ) + c dla n > 1

15 Zależność tą otrzymujemy jako równanie złożoności, gdy problem rozmiaru n sprowadza się do dwóch pod-problemów rozmiaru n/2 + stała liczba działań. Podstawiamy n=2 k. T(n) = T( 2 k ) = 2*T( 2 k - 1 ) + c = 2*( 2*T( 2 k - 2 ) + c ) + c = 2 2 *T( 2 k - 2 )+2 1 *c *c = 2 k *T(2 0 ) + c*( 2 k k ) = 0 + c*(2 k - 1) / (2-1) = c * (n-1) O(T(n)) = n 3) T(1) = 0 T(n) = T( n/2 ) + T( n/2 ) + c*n dla n > 1 Zależność tą otrzymujemy jako równanie złożoności, gdy problem rozmiaru n sprowadza się do dwóch pod-problemów rozmiaru n/2 + liniowa liczba działań. Podstawiamy n=2 k. T(n) =T(2 k ) = 2*T( 2 k - 1 ) + c* 2 k = 2*( 2*T( 2 k - 2 ) + c*2 k - 1 ) + c*2 k = 2 2 *T( 2 k - 2 ) + c*2 k + c*2 k = 2 k *T(2 0 ) + k*c* 2 k = = 0 + c*n*logn = c*n*logn O(T(n)) = n*logn

16 Zmiana dziedziny równania rekurencyjnego Niektóre równania charakteryzują się nieprzyjemnym wyglądem i nie dają się rozwiązać wcześniejszymi wzorami. Czasem skutkuje zmiana dziedziny. Przykładowo: a n = (3*a n-1 ) 2 a 0 = 1 Podstawiamy b n = log 2 a n, b n-1 = log 2 a n-1 i logarytmujemy obie strony równania b n = log 2 a n = log 2 (3*a n-1 ) 2 b 0 = log 2 1 = 0 Dostajemy wersję rozwiązania. b n = 2* log *b n-1 która nadaje się już do Funkcje tworzące Czasem trudno wyznaczyć rozwiązanie T(n) bezpośrednio z równania rekurencyjnego (brak zwięzłego wzoru). Poszukujemy wówczas funkcji tworzącej, definiowanej jako: F(z) = n 0 T(n)* z n Metodę tę stosuje się do znajdowania wartości oczekiwanej i wariancji zmiennej losowej X n. Funkcja tworząca dla rozkładu prawdopodobieństwa P nk zmiennej losowej X n ma postać: P n (z) = k 0 P nk * z k i wtedy k 0 P nk = 1 Wartość oczekiwaną i wariancję można wyznaczyć jako funkcję pochodnych funkcji P n (z) dla z = 1 :

17 E( X n ) = P n (1) (*) var( X n ) = P n (1) + P n (1) - P n (1) 2 (**) Ponieważ: P n (z) = k 1 k*p nk * z k - 1 P n (z) = k 2 k*(k-1)*p nk * z k - 2 Stąd: P n (1) = k 1 k*p nk (*) P n (1) = k 2 k*(k-1)*p nk Zatem: Var( X n ) = k 0 ( k - P n (1) ) 2 * P nk = k 0 k 2 * P nk - 2*P n (1)*( k 0 k*p nk ) + P n (1) 2 *( k 0 P nk ) = k 0 k*(k-1)*p nk + k 0 k*p nk - 2*P n (1) 2 + P n (1) 2 = P n (1) + P n (1) - P n (1) 2 Wielkości E( X n ) i var( X n ), a także złożoność oczekiwaną i wrażliwość algorytmu, można wyznaczyć nie znając rozkładu P nk, a tylko funkcję tworzącą. Funkcja Ackermanna Przykład pokazuje jak niegroźna z wyglądu funkcja rekurencyjna może być bardzo kosztowna w użyciu.

18 int A(int n, int p) if (n==0) return 1; if ((p==0) && (n>=1)) if (n==1) return 2; else return n+2; if ((p>=1) && (n>=1)) return A( A(n-1,p), p-1 ); Dlaczego pojawia się komunikat Stack, overflow (przepełnienie stosu)? Komunikat sugeruje, że podczas wykonania programu nastąpiła znaczna ilość wywołań funkcji Ackermanna. Z analizy funkcji A uzyskujemy: n 1, A(n,1) = A(A(n-1,1),0) = A(n-1,1) + 2 co daje n 1, A(n,1) = 2n Analogicznie dla 2 otrzymamy: n 1, A(n,2) = A(A(n-1,2),1) = 2A(n-1,2) co pozwala napisać n 1, A(n,2) = 2 n

19 W przypadku funkcji Ackermanna trudno jest nawet nazwać jej klasę. Stwierdzenie, że zachowuje się wykładniczo jest zdecydowanie niepoprawne.

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

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

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, Oznaczenia: Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, to interesuje nas złożoność obliczeniowa

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

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

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

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

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

5. Rozwiązywanie układów równań liniowych

5. Rozwiązywanie układów równań liniowych 5. Rozwiązywanie układów równań liniowych Wprowadzenie (5.1) Układ n równań z n niewiadomymi: a 11 +a 12 x 2 +...+a 1n x n =a 10, a 21 +a 22 x 2 +...+a 2n x n =a 20,..., a n1 +a n2 x 2 +...+a nn x n =a

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

Złożoność Obliczeniowa Algorytmów

Złożoność Obliczeniowa Algorytmów Algorytmów Pożądane cechy dobrego algorytmu Dobry algorytm mający rozwiązywać jakiś problem powinien mieć 2 naturalne cechy: 1 (poprawność) zwracać prawidłowy wynik (dokładniej: zgodność z warunkiem końcowym

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

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

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

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

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

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007 Zak lad Metod Obliczeniowych Chemii UJ 14 marca 2007 Rzad 1 Zamiast wst epu 2 Rzad Notacja dużego O Notacja Ω Notacja Θ 3 S lowniczek Rzad Algorytm W matematyce oraz informatyce to skończony, uporzadkowany

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

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

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

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

Wykład 5. Metoda eliminacji Gaussa

Wykład 5. Metoda eliminacji Gaussa 1 Wykład 5 Metoda eliminacji Gaussa Rozwiązywanie układów równań liniowych Układ równań liniowych może mieć dokładnie jedno rozwiązanie, nieskończenie wiele rozwiązań lub nie mieć rozwiązania. Metody dokładne

Bardziej szczegółowo

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2015 Co można zrobić z układem równań... tak, aby jego rozwiazania się nie zmieniły? Rozważam

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2 Algorytmy i struktury danych Wykład 6 Tablice rozproszone cz. 2 Na poprzednim wykładzie Wiele problemów wymaga dynamicznych zbiorów danych, na których można wykonywać operacje: wstawiania (Insert) szukania

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

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

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

Obliczenia naukowe Wykład nr 8

Obliczenia naukowe Wykład nr 8 Obliczenia naukowe Wykład nr 8 Paweł Zieliński Katedra Informatyki, Wydział Podstawowych Problemów Techniki, Politechnika Wrocławska Literatura Literatura podstawowa [] D. Kincaid, W. Cheney, Analiza numeryczna,

Bardziej szczegółowo

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Piotr Modliński Wydział Geodezji i Kartografii PW 13 stycznia 2012 P. Modliński, GiK PW Rozw.

Bardziej szczegółowo

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 1 Metody numeryczne Dział matematyki Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane

Bardziej szczegółowo

Rozwiązywanie układów równań liniowych

Rozwiązywanie układów równań liniowych Rozwiązywanie układów równań liniowych Marcin Orchel 1 Wstęp Jeśli znamy macierz odwrotną A 1, to możęmy znaleźć rozwiązanie układu Ax = b w wyniku mnożenia x = A 1 b (1) 1.1 Metoda eliminacji Gaussa Pierwszy

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym 1 Wykład 6 Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym ELIMINACJA GAUSSA Z WYBOREM CZĘŚCIOWYM ELEMENTÓW PODSTAWOWYCH 2 Przy pomocy klasycznego algorytmu eliminacji

Bardziej szczegółowo

Efektywność algorytmów

Efektywność algorytmów Efektywność algorytmów Algorytmika Algorytmika to dział informatyki zajmujący się poszukiwaniem, konstruowaniem i badaniem własności algorytmów, w kontekście ich przydatności do rozwiązywania problemów

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

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

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

Liczby pierwsze - wstęp

Liczby pierwsze - wstęp Artykuł pobrano ze strony eioba.pl Liczby pierwsze - wstęp W latach 60 ubiegłego wieku w Afryce znaleziono kości z wyrytymi na nich karbami liczące ponad 5000 lat. Na jednej z nich (kość z Ishango) karby

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Programowanie rekurencyjne: ZALETY: - prostota - naturalność sformułowania WADY: - trudność w oszacowaniu zasobów (czasu i pamięci) potrzebnych do realizacji Czy jest możliwe wykorzystanie

Bardziej szczegółowo

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

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

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

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH Transport, studia niestacjonarne I stopnia, semestr I Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Adam Wosatko Postać układu równań liniowych Układ liniowych równań algebraicznych

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

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

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

1 Macierz odwrotna metoda operacji elementarnych

1 Macierz odwrotna metoda operacji elementarnych W tej części skupimy się na macierzach kwadratowych. Zakładać będziemy, że A M(n, n) dla pewnego n N. Definicja 1. Niech A M(n, n). Wtedy macierzą odwrotną macierzy A (ozn. A 1 ) nazywamy taką macierz

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

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

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p.

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p. Analiza numeryczna Kurs INP002009W Wykłady 6 i 7 Rozwiązywanie układów równań liniowych Karol Tarnowski karol.tarnowski@pwr.wroc.pl A-1 p.223 Plan wykładu Podstawowe pojęcia Własności macierzy Działania

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

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel Wstęp do programowania Dziel i rządź Piotr Chrząstowski-Wachtel Divide et impera Starożytni Rzymianie znali tę zasadę Łatwiej się rządzi, jeśli poddani są podzieleni Nie chodziło im jednak bynajmniej o

Bardziej szczegółowo

Metody numeryczne Wykład 4

Metody numeryczne Wykład 4 Metody numeryczne Wykład 4 Dr inż. Michał Łanczont Instytut Elektrotechniki i Elektrotechnologii E419, tel. 4293, m.lanczont@pollub.pl, http://m.lanczont.pollub.pl Zakres wykładu Metody skończone rozwiązywania

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

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n

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

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

Matematyka dyskretna dla informatyków

Matematyka dyskretna dla informatyków Matematyka dyskretna dla informatyków Część I: Elementy kombinatoryki Jerzy Jaworski Zbigniew Palka Jerzy Szymański Uniwersytet im. Adama Mickiewicza Poznań 2007 4 Zależności rekurencyjne Wiele zależności

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

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4 KARTA PRZEDMIOTU 1. Informacje ogólne Nazwa przedmiotu i kod (wg planu studiów): Nazwa przedmiotu (j. ang.): Kierunek studiów: Specjalność/specjalizacja: Poziom kształcenia: Profil kształcenia: Forma studiów:

Bardziej szczegółowo

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s]. Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s

Bardziej szczegółowo

Układy równań liniowych. Krzysztof Patan

Układy równań liniowych. Krzysztof Patan Układy równań liniowych Krzysztof Patan Motywacje Zagadnienie kluczowe dla przetwarzania numerycznego Wiele innych zadań redukuje się do problemu rozwiązania układu równań liniowych, często o bardzo dużych

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

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński Analiza konstrukcji zawierających wskaźniki Piotr Błaszyński Wskaźniki podejście naiwne: while(ptr!=null){ a[i] = *ptr; i++; ptr++; } po zmianie: N=length(ptr); alias_ptr = ptr; for(j=0 ; j

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

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności

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

Rozdział 1 PROGRAMOWANIE LINIOWE

Rozdział 1 PROGRAMOWANIE LINIOWE Wprowadzenie do badań operacyjnych z komputerem Opisy programów, ćwiczenia komputerowe i zadania. T. Trzaskalik (red.) Rozdział 1 PROGRAMOWANIE LINIOWE 1.2 Ćwiczenia komputerowe Ćwiczenie 1.1 Wykorzystując

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

Matematyka dyskretna. Andrzej Łachwa, UJ, /10 Matematyka dyskretna Andrzej Łachwa, UJ, 2018 andrzej.lachwa@uj.edu.pl 10/10 Podziały i liczby Stirlinga Liczba Stirlinga dla cykli (często nazywana liczbą Stirlinga pierwszego rodzaju) to liczba permutacji

Bardziej szczegółowo

Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa. P. F. Góra

Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa. P. F. Góra Wstęp do metod numerycznych Uwarunkowanie Eliminacja Gaussa P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2012 Uwarunkowanie zadania numerycznego Niech ϕ : R n R m będzie pewna funkcja odpowiednio wiele

Bardziej szczegółowo

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH Transport, studia I stopnia rok akademicki 2012/2013 Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Adam Wosatko Ewa Pabisek Pojęcie

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

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

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

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

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Algorytmy asymetryczne

Algorytmy asymetryczne Algorytmy asymetryczne Klucze występują w parach jeden do szyfrowania, drugi do deszyfrowania (niekiedy klucze mogą pracować zamiennie ) Opublikowanie jednego z kluczy nie zdradza drugiego, nawet gdy można

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

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

Poprawność semantyczna

Poprawność semantyczna Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych

Bardziej szczegółowo

Wykład 10 Grafy, algorytmy grafowe

Wykład 10 Grafy, algorytmy grafowe . Typy złożoności obliczeniowej Wykład Grafy, algorytmy grafowe Typ złożoności oznaczenie n Jedna operacja trwa µs 5 logarytmiczna lgn. s. s.7 s liniowa n. s.5 s. s Logarytmicznoliniowa nlgn. s.8 s.4 s

Bardziej szczegółowo

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu

Bardziej szczegółowo

Macierze. Rozdział Działania na macierzach

Macierze. Rozdział Działania na macierzach Rozdział 5 Macierze Funkcję, która każdej parze liczb naturalnych (i, j) (i 1,..., n; j 1,..., m) przyporządkowuje dokładnie jedną liczbę a ij F, gdzie F R lub F C, nazywamy macierzą (rzeczywistą, gdy

Bardziej szczegółowo

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.) Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : 15 1 grudnia 005.) 1. Program w C 1 zawiera deklaracje 1 void P1 ( int a, int b) { int i ; 3 for ( i =0;i

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane Algorytmy i struktury danych Wykład 4 Tablice nieporządkowane i uporządkowane Tablice uporządkowane Szukanie binarne Szukanie interpolacyjne Tablice uporządkowane Szukanie binarne O(log N) Szukanie interpolacyjne

Bardziej szczegółowo

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3 KARTA PRZEDMIOTU 1. Informacje ogólne Nazwa przedmiotu i kod (wg planu studiów): Nazwa przedmiotu (j. ang.): Kierunek studiów: Specjalność/specjalizacja: Poziom kształcenia: Profil kształcenia: Forma studiów:

Bardziej szczegółowo

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Matematyka dyskretna. Andrzej Łachwa, UJ, /14 Matematyka dyskretna Andrzej Łachwa, UJ, 2016 andrzej.lachwa@uj.edu.pl 6/14 Sumy Oto dwie konwencje zapisu skończonych sum wyrazów: (notacja Sigma, Fourier, 1820) Czasami stosowana jest ogólniejsza notacja,

Bardziej szczegółowo

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Rekurencja - pojęcie 2 Rekurencja - pojęcie Rekurencja (rekursja) wywołanie

Bardziej szczegółowo

Finanse i Rachunkowość studia niestacjonarne/stacjonarne Model Przepływów Międzygałęziowych

Finanse i Rachunkowość studia niestacjonarne/stacjonarne Model Przepływów Międzygałęziowych dr inż. Ryszard Rębowski 1 OPIS ZJAWISKA Finanse i Rachunkowość studia niestacjonarne/stacjonarne Model Przepływów Międzygałęziowych 8 listopada 2015 1 Opis zjawiska Będziemy obserwowali proces tworzenia

Bardziej szczegółowo

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

dodatkowe operacje dla kopca binarnego: typu min oraz typu max: ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu

Bardziej szczegółowo

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010 Algorytmy równoległe Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka Znajdowanie maksimum w zbiorze n liczb węzły - maksimum liczb głębokość = 3 praca = 4++ = 7 (operacji) n - liczność

Bardziej szczegółowo

struktury danych dla operacji słownikowych

struktury danych dla operacji słownikowych struktury danych dla operacji słownikowych tablica nieuporządkowana tablica uporządkowana lista dowiązaniowa drzewo poszukiwań binarnych drzewa zrównoważone z tablice haszowaniem tablice z haszowaniem

Bardziej szczegółowo

Optymalizacja ciągła

Optymalizacja ciągła Optymalizacja ciągła 1. Optymalizacja funkcji jednej zmiennej Wojciech Kotłowski Instytut Informatyki PP http://www.cs.put.poznan.pl/wkotlowski/ 28.02.2019 1 / 54 Plan wykładu Optymalizacja funkcji jednej

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

Metody numeryczne w przykładach

Metody numeryczne w przykładach Metody numeryczne w przykładach Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK, Toruń Regionalne Koło Matematyczne 8 kwietnia 2010 r. Bartosz Ziemkiewicz (WMiI UMK) Metody numeryczne w przykładach

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

Wykład na Politechnice Krakowskiej w dniu 18 stycznia 2012 r. ZADAŃ I ALGORYTMÓW W OPTYMALIZACJI DYSKRETNEJ

Wykład na Politechnice Krakowskiej w dniu 18 stycznia 2012 r. ZADAŃ I ALGORYTMÓW W OPTYMALIZACJI DYSKRETNEJ Wykład na Politechnice Krakowskiej w dniu 18 stycznia 2012 r. ZŁOŻONOŚĆ OBLICZENIOWA ZADAŃ I ALGORYTMÓW W OPTYMALIZACJI DYSKRETNEJ dr hab. Krzysztof SZKATUŁA, prof. PAN Instytut Badań Systemowych PAN Uniwersytet

Bardziej szczegółowo