Algorytmy i struktury danych
|
|
- Bogna Stachowiak
- 7 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy i struktury danych Wykład 1 Wprowadzenie Janusz Szwabiński Plan wykładu: Sprawy administracyjne Do czego służą struktury danych? Co to jest algorytm? Analiza algorytmów Notacja asymptotyczna Przykład: anagramy Struktury danych w Pythonie i ich wydajność
2 Sprawy administracyjne Dane kontaktowe konsultacje: środa 14:45 16:45, piątek 9:15 11:15, pokój 5.16, C 11 ( Treści programowe Podstawowe struktury danych Algorytmy i ich analiza Rekursja Sortowanie i wyszukiwanie Drzewa i algorytmy ich przetwarzania Grafy i podstawowe algorytmy Techniki projektowania algorytmów Wybrane zagadnienia (m.in. operacje na macierzach, wielomiany, FFT, wyszukiwanie wzorców w tekstach) Literatura 1. T. H. Cormen, Ch. E. Leiserson, R. L. Rivest. Wprowadzenie do algorytmów. WNT, Warszawa, B. Miller, D. Ranum. Problem Solving with algorithms and data structures using Python. ( (w ramach kursu będę często korzystał z materiałów tam zawartych). 3. R. Sedgewick. Algorytmy w C++. RM, Warszawa, R. Sedgewick. Algorytmy w C++.Grafy. RM, Warszawa, L. Banachowski, K. Diks, W. Rytter. Algorytmy i struktury danych. WNT, Warszawa, A. V. Aho, J. E. Hopcroft, J. D. Ullman. Projektowanie i analiza algorytmów komputerowych. PWN, Warszawa, 1983; Helion, Gliwice, E. M. Reingold, J. Nievergelt, N. Deo. Algorytmy kombinatoryczne. PWN, Warszawa, B. Eckel. Thinking in C++. Edycja polska. Helion, Gliwice, B. Eckel. Thinking in Java. Edycja polska. Helion, Gliwice, 2001, Materiały on line 1. Erik Demaine, and Srinivas Devadas Introduction to Algorithms, Fall (Massachusetts Institute of Technology: MIT OpenCourseWare), ( (Accessed 19 Sep, 2016). License: Creative Commons BY NC SA. Warsztat 1. Preferowanym językiem programowania jest Python 2.7.X/3.X. 2. Dowolny edytor tekstowy ze wsparciem składni Pythona (np. Notepad++ pod systemami MS Windows, geany/vi pod systemami z rodziny Linux/Unix). 3. Ewentualnie IPython/Jupyter. Zaliczenie
3 Zaliczenie listy zadań na ćwiczeniach dwa testy: na 7 i ostatnim wykładzie 3 1 ocena = lab + wyk 4 4
4 Do czego służą struktury danych? Abstrakcyjna struktura danych (ASD) to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji: zaawansowane pojemniki na dane pomagają gromadzić różnorodne dane i układać je w odpowiedni sposób dopasowują się rozmiarem do wielkości danych pojawiają się w wielu algorytmach pozwalają na eleganckie rozwiązanie wielu ważnych zagadnień obliczeniowych Liniowe struktury danych Drzewa Grafy
5 Co to jest algorytm?
6 Algorytm to skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Innymi słowy to przepis na rozwiązanie problemu lub osiągnięcie jakiegoś celu. Istnieje kilka różnych metod zapisu algorytmu. Załóżmy, że naszym zadaniem jest obliczenie funkcji f(0) = 0 przy założeniu, że. f(x) = x x Słowny opis algorytmu 1. dla liczb ujemnych, więc, 2. dla liczb dodatnich, więc, x = 0 3. jeśli, to z definicji $f(0)=0. x = x f(x) = x/( x) = 1 x = x f(x) = x/x = 1 Opis słowny czasami da się w prosty sposób wyrazić wzorem matematycznym: f(x) = 1, 0, 1, x < 0 x = 0 x > 0 Lista kroków 1. Wczytaj wartość danej. 2. Jeśli, to. Zakończ algorytm. 3. Jeśli, to. Zakończ algorytm. x x > 0 f(x) = 1 x = 0 f(x) = 0 x < 0 f(x) = 1 4. Jeśli, to. Zakończ algorytm. Schemat blokowy
7 Poszczególne elementy na powyższym schemacie mają następujące znaczenie: Drzewo algorytmu
8 In [1]: x = float(input("podaj x: ")) if x > 0: print("f(x)=1") elif x < 0: print("f(x)=-1") else: print("f(x)=0") Podaj x: 3 f(x)=1
9 Dlaczego warto poznać algorytmy? cały obszar IT opiera się na algorytmach niektóre z nich są ponadczasowe: Euklides z Aleksandrii zajmował się badaniem algorytmów już w IV w p.n.e. (Źródło: Wikipedia) jego algorytm wyznaczania największego wspólnego dzielnika dwóch liczb (NWD) jest znany do dziś NWD jest stosowany w algorytmie RSA najpopularniejszym obecnie asymetrycznym algorytmie kryptograficznym z kluczem publicznym ( ( pozwalają rozwiązać zagadnienia, które inaczej pozostałyby nierozwiązane: problem komiwojażera, np. wyznaczenie najkrótszej trasy pozwalającej na zwiedzenie wszystkich stolic województw pozwalają stać się profesjonalnym programistą I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. (Linus Torvalds, twórca Linuksa) stymulują intelektualnie przynoszą zysk <table class="image" width=50%> (Źródło:
10 Analiza algorytmów Często bywa tak, że ten sam algorytm zaimplementowany jest na wiele różnych sposobów. Nasuwa się wtedy pytanie, która z implementacji jest lepsza od pozostałych. Dla przykładu porównajmy dwa programy: In [2]: def sumofn(n): thesum = 0 for i in range(1,n+1): thesum = thesum + i return thesum print(sumofn(10)) 55 In [3]: def foo(tom): fred = 0 for bill in range(1,tom+1): barney = bill fred = fred + barney return fred print(foo(10)) 55
11 Mimo, że na pierwszy rzut oka tego nie widać, oba robią to samo sumują liczby od do, i na dodatek robią to w ten sam sposób. Mimo to powiemy, że pierwszy program jest lepszy ze względu na czytelność. Ogólnie rzecz biorąc, aby dokonać porównania między programami, musimy zdefiniować odpowiednie kryteria. Oprócz czytelności mogą to być: liczba operacji niezbędnych do wykonania "zasobożerność" wydajność czas wykonania 1 n Analiza algorytmów zajmuje się właśnie ich porównywaniem pod względem nakładów obliczeniowych niezbędnych do uzyskania rozwiązania. Wróćmy jeszcze raz do pierwszego z powyższych programów i zmodyfikujmy go tak, aby wyliczał jeszcze czas sumowania: In [4]: import time def sumofn2(n): start = time.time() thesum = 0 for i in range(1,n+1): thesum = thesum + i end = time.time() return thesum,end-start Wyniki pięciu wywołań funkcji sumofn2dla n = są następujące: In [5]: for i in range(5): print("suma wynosi %d, czas wykonania: %10.7f sekund"%sumofn2(10000)) Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Czasy wykonania poszczególnych wywołań różnią się nieznacznie od siebie (zależą od chwilowego obciążenia komputera), jednak rząd wielkości pozostaje ten sam. Zobaczmy, co stanie się, jeżeli zwiększymy o jeden rząd: n
12 In [6]: for i in range(5): print("suma wynosi %d, czas wykonania: %10.7f sekund"%sumofn2(100000)) Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund I znowu, czasy wykonania są dość podobne do siebie, jednak w porównaniu z poprzednim przykładem wzrosły mniej więcej dziesięciokrotnie. Dla jeszcze większego otrzymamy: n In [7]: for i in range(5): print("suma wynosi %d, czas wykonania: %10.7f sekund"%sumofn2( )) Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Widzimy, że czas wykonania ponownie wzrósł. Zauważmy teraz, że program sumofn2wylicza sumę częściową ciągu arytmetycznego o różnicy i wyrazie początkowym 1. Korzystając z własności ciągu sumę tę możemy wyliczyć przy pomocy wyrażenia: n i = i=1 n(n + 1) 2 r = 1 In [8]: def sumofn3(n): start = time.time() thesum = n*(n+1)/2 end = time.time() return thesum,end-start In [9]: for n in (10000,100000, , ): print("suma wynosi %d, czas wykonania: %10.7f sekund"%sumofn3(n)) Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund Suma wynosi , czas wykonania: sekund
13 Analizując te wyniki dochodzimy do dwóch wniosków: 1. sumofn3wykonuje się dużo szybciej niż sumofn2 2. w przypadku sumofn3czas wykonania funkcji nieznacznie zależy od n
14 Notacja asymptotyczna Aby sformalizować powyższe wnioski, potrzebujemy miary, która pozwoli na scharakteryzować czas wykonywania algorytmu w zależności od wielkości danych wejściowych, i niezależnie of typu komputera i użytego języka programowania. Do scharakteryzowania czasu wykonania algorytmu ważne jest określenie liczby operacji i/lub kroków niezbędnych do jego zakończenia. Jeżeli na każdą z tych operacji potraktujemy jako podstawową jednostkę obliczeniową, wówczas możemy wyrazić czas wykonania algorytmu poprzez liczbę niezbędnych operacji. Wybór podstawowej jednostki nie jest łatwy i zależy od tego, jak algorytm jest zaimplementowany. W przypadku powyższych funkcji dobrym kandydatem na jednostę podstawową jest liczba przypisań niezbędnych do wyliczenia sumy. I tak w przypadku funkcji sumofn2mamy przypisań, natomiast w przypadku sumofn3 tylko jedno. Można pójść krok dalej i stwierdzić, że dokładna liczba operacji nie jest ważna, a to, co się liczy, to dominująca składowa, bo dla dużych pozostałe składniki i tak są zaniedbywalne. Innymi słowy, interesuje nas tylko asymptotyczne tempo wzrostu czasu wykonywania algorytmów. Do zapisu tego tempa służy tzw. notacja dużego O: f g T(n) T(n) = n + 1 f(n) = O(g(n)) C f(n) C g(n) n Niech i będą ciągami liczb rzeczywistych. Piszemy wtedy, gdy istnieje stała dodatnia taka, że dla dostatecznie dużych wartości. n służy do zapisu szybkości wzrostu nazywana jest ona czasami złożonością teoretyczną algorytmu definicja dopuszcza, aby nierówność nie była spełniona dla pewnej liczby małych wartości n w praktyce oznacza ciąg, którym właśnie się zajmujemy (np. górne ograniczenie czasu f(n) działania algorytmu), a jest prostym ciągiem o znanej szybkości wzrostu notacja nie podaje dokładnego czasu wykonania algorytmu pozwala odpowiedzieć na pytanie, jak ten czas będzie rósł z rozmiarem danych wejściowych Przydatne własności: g(n) 1 n log 2 n W hierarchii ciągów,,, 4, 3 n, n, n, n ln n, n n,,,,,, każdy z nich jest O od wszystkich ciągów na prawo od niego Jeśli i jest stałą, to W praktyce stwierdzenie, że algorytm jest klasy n 2 n 3 2 n n! n n f(n) = O(g(n)) c c f(n) = O(g(n)) Jeśli f(n) = O(g(n)) i h(n) = O(g(n)), to f(n) + h(n) = O(g(n)) Jeśli f(n) = O(a(n)) i g(n) = O(b(n)), to f(n) g(n) = O(a(n) b(n)) Jeśli a(n) = O(b(n)) i b(n) = O(c(n)), to a(n) = O(c(n)) O(a(n)) + O(b(n)) = O(max{ a(n), b(n) }) O(a(n)) O(b(n)) = O(a(n) b(n)) O( n 3 ) oznacza, że dla danych wejściowych o wielkości n n 3 (np. układ równań liniowych zmiennych) czas wykonania algorytmu jest proporcjonalny do. n
15 Zobaczmy, jak wypada porównanie czasów wykonania algorytmów różnych typów przy założeniu, że dla n = każdy z nich wykonuje się s: n O(n 2 ) O(n 3 ) O(2 n ) O(3 n ) O(n! ) ,00001s 0,00002s 0,00003s 0,00004s 0,00005s 0,00006s 0,0001s 0,0004s 0,0009s 0,0016s 0,0025s 0,0036 0,001s 0,008s 0,027s 0,064s 0,125s 0,216s 0,001s 1,048s 17,9min 12,7dni 35,7lat 366w ,059s 58min 6,5lat 3855w 227* w 1,3* w ,6s 771w 8,4* w 2,6* w 9,6* w 2,6* w
16 Przykład anagramy Anagram oznacza wyraz, wyrażenie lub całe zdanie powstałe przez przestawienie liter bądź sylab innego wyrazu lub zdania, wykorzystujące wszystkie litery (głoski bądź sylaby) materiału wyjściowego: kebab babek Gregory House Huge ego, sorry "Quid est veritas?" (Co to jest prawda?, Piłat) Jezus) "Vir est qui adest" (Człowiek, który stoi przed tobą, Testowanie, czy łańcuchy znaków są anagramami, to przykład zagadnienia, które można rozwiązać algorytmami o różnym tempie asymptotycznego wzrostu, a jednocześnie na tyle prostego, aby można było o tym opowiedzieć w ramach kursu ze wstępu do programowania. Rozwiązanie 1: "odhaczanie" liter Jednym z możliwych rozwiązań naszego problemu jest sprawdzenie, czy litera z jednego łańcucha znajduje się w drugim. Jeżeli tak, "odhaczamy" ją i powtarzamy czynność dla pozostałych liter. Jeżeli po zakończeniu tej operacji wszystkie litery w drugim łańcuchu zostaną "odhaczone", łańcuchy muszą być anagramami. Odhaczanie możemy zrealizować poprzez zastąpienie odnalezionej litery wartością specjalną None. In [10]: def anagramsolution1(s1,s2): alist = list(s2) #zamień drugi łańcuch na listę pos1 = 0 stillok = True while pos1 < len(s1) and stillok: pos2 = 0 found = False while pos2 < len(alist) and not found: if s1[pos1] == alist[pos2]: #sprawdzamy literę s1[pos1] found = True else: pos2 = pos2 + 1 if found: alist[pos2] = None else: stillok = False #przerwij, jeśli litery nie ma pos1 = pos1 + 1 #pozycja następnej litery w łańcuchu s1 return stillok print(anagramsolution1('abcd','dcba')) True
17 s1 n s2 Dla każdego znaku z łańcucha musimy wykonać iterację po maksymalnie elementach listy. Każda pozycja w liście s2 musi zostać odwiedzona raz w celu odhaczenia. Dlatego całkowita liczba wizyt elementów listy s2 jest sumą liczb naturalnych od 1 do n: n n(n + 1) 1 1 i = = + n 2 2 n2 2 i=1 n 1 2 n2 1 2 n O( n 2 ) Dla dużych wyraz będzie dominował nad. Dlatego algorytm jest klasy. Rozwiązanie 2: sortowanie i porównywanie s1 s2 Zauważmy, że jeżeli i są anagramami, muszą składać się z tych samych liter, występujących taką samą liczbę razy. Jeżeli więc posortujemy każdy z łańcuchów alfabetycznie od 'a' do 'z', powinniśmy otrzymać dwa takie same łańcuchy. Do posortowania wykorzystamy metodę sort: In [11]: def anagramsolution2(s1,s2): alist1 = list(s1) #konieczne, żeby skorzystać z sort alist2 = list(s2) alist1.sort() alist2.sort() pos = 0 matches = True while pos < len(s1) and matches: if alist1[pos]==alist2[pos]: pos = pos + 1 else: matches = False return matches print(anagramsolution2('abcde','edcba')) True Na pierwszy rzut oka może się wydawać, że algorytm jest klasy, ponieważ wykonujemy tylko jedną iterację po elementach łańcuchów. Jednak wywołanie metody sortrównież "kosztuje", najczęściej lub O(n log n). Dlatego czas wykonania będzie zdominowany przez operację sortowania. O( n 2 )
18 Rozwiązanie 3: algorytm siłowy (ang. brute force) Metoda siłowa rozwiązania jakiegoś zadania polega na wyczerpaniu wszystkich możliwości. Dla anagramów oznacza to wygenerowanie listy wszystkich możliwych łańcuchów ze znaków łańcucha s1 i sprawdzenie, czy s2 znajduje się na tej liście. Nie jest to jednak zalecane podejście, przynajmniej w tym przypadku. Zauważmy mianowicie, że dla ciągu znaków s1 o długości n mamy n wyborów pierwszego znaku, (n 1) możliwości dla znaku na drugiej pozycji, (n 2) na trzeciej pozycji itd. Musimy zatem wygenerować n! łańcuchów znaków. Dla ustalenia uwagi przyjmijmy, że s1 składa się z 20 znaków. Oznacza to konieczność wygenerowania In [12]: import math math.factorial(20) #silnia Out[12]: łańcuchów znaków, a następnie odszukanie wśród nich ciągu. Widzieliśmy już wcześniej, ile czasu zajmuje algorytm klasy, dlatego nie jest to polecane podejście do zagadnienia anagramów. O(n!) s2 Rozwiązanie 4: zliczaj i porównuj s1 s2 Jeżeli i są anagramami, będą miały tą samą liczbę wystąpień litery 'a', tą samą litery 'b' itd. Dlatego możemy zliczyć liczbę wystąpień poszczególnych znaków w łańcuchach i porównać te liczby ze sobą: In [18]: def anagramsolution4(s1,s2): c1 = [0]*26 #dla ułatwienia ograniczamy się do języka angielskiego c2 = [0]*26 for i in range(len(s1)): pos = ord(s1[i])-ord('a') #pozycja znaku w alfabecie c1[pos] = c1[pos] + 1 for i in range(len(s2)): pos = ord(s2[i])-ord('a') c2[pos] = c2[pos] + 1 j = 0 stillok = True while j<26 and stillok: if c1[j]==c2[j]: j = j + 1 else: stillok = False return stillok print(anagramsolution4('apple','pleap')) True
19 Również w przypadku tej metody mamy do czynienia z iteracjami, jednak teraz żadna z nich nie jest zagnieżdżona. Dodając kroki konieczne do wykonania w tych iteracjach do siebie otrzymamy Jest to zatem algorytm klasy T(n) = 2n + 26, czyli najszybszy ze wszystkich prezentowanych. Zauważmy jednak, że c1 c2 lepszą wydajność uzyskaliśmy kosztem większego obciążenia pamięci (dwie dodatkowe listy i ). To sytuacja bardzo często spotykana w praktyce. Dlatego programując, nie raz staniemy przed koniecznością wyboru, który z zasobów (czas procesora czy pamięć) należy poświęcić. Struktury danych w Pythonie i ich wydajność Złożone struktury danych dostępne w Pythonie oszczędzają programiście sporo pracy. Dobrze jest wiedzieć, jakie są zarówno ich mocne strony jak i ograniczenia, ponieważ pozwoli to w przyszłości pisać lepsze programy. Listy Przyjrzyjmy się najpierw różnym sposobom generowania list: In [13]: def test1(): #łączenie list l = [] for i in range(1000): l = l + [i] def test2(): #dodawanie elementu l = [] for i in range(1000): l.append(i) def test3(): #list comprehension l = [i for i in range(1000)] def test4(): #z zakresu l = list(range(1000)) In [14]: %%timeit test1() The slowest run took 4.51 times longer than the fastest. This could mean that an intermediate result is being cached loops, best of 3: 1.34 ms per loop In [15]: %%timeit test2() The slowest run took 7.11 times longer than the fastest. This could mean that an intermediate result is being cached loops, best of 3: 81.3 µs per loop
20 In [16]: %%timeit test3() The slowest run took 5.44 times longer than the fastest. This could mean that an intermediate result is being cached loops, best of 3: 33.3 µs per loop In [17]: %%timeit test4() The slowest run took 4.18 times longer than the fastest. This could mean that an intermediate result is being cached loops, best of 3: 14.1 µs per loop Z powyższego eksperymentu wynika, że najszybszą metodą jest tworzenie listy z zakresu, natomiast najdłużej trwa łączenie list. Jeśli chodzi o różne operacje na listach, ich złożoność jest następująca: Operacja index [] Złożoność O(1) zmiana wartości elementu O(1) append pop() pop(i) insert(i,item) del iterowanie zawiera (in) odczyt wycinka [x:y] usuwanie wycinka przypisanie wycinka reverse łączenie O(1) O(1) O(k) O(n+k) O(k) sort O(n log n) iloczyn O(nk) Dla przykładu zbadajmy wydajność metody pop:
21 In [1]: import timeit popzero = timeit.timer("x.pop(0)", "from main import x") popend = timeit.timer("x.pop()", "from main import x") In [2]: x = list(range( )) popzero.timeit(number=1000) Out[2]: In [3]: x = list(range( )) popend.timeit(number=1000) Out[3]: Eksperyment ten można powtórzyć dla różnych : n In [15]: popzero = timeit.timer("x.pop(0)", "from main import x") popend = timeit.timer("x.pop()", "from main import x") pi = [] pe = [] for i in range( , , ): x = list(range(i)) pt = popend.timeit(number=1000) pe.append(pt) x = list(range(i)) pz = popzero.timeit(number=1000) pi.append(pz) In [16]: %matplotlib inline In [17]: import matplotlib import matplotlib.pyplot as plt
22 In [22]: sizes = list(range( , , )) In [26]: plt.xlabel("rozmiar listy") plt.ylabel("czas wykonania") plt.plot(sizes,pi,'ro',label="pop(0)") plt.plot(sizes,pe,'bs',label="pop()") Out[26]: [<matplotlib.lines.line2d at 0x7f8a4a370400>] Słowniki Słowniki to drugi główny typ danych w Pythonie. Wydajności wybranych operacji są następujące: Operacja copy get item set item delete item Złożoność O(1) O(1) O(1) contains (in) O(1) iteration
Algorytmy i struktury danych
Algorytmy i struktury danych Wykład 4 Algorytmy i ich analiza Janusz Szwabiński Plan wykładu: Co to jest algorytm? Analiza algorytmów motywacja Cele analizy Analiza eksperymentalna Studium przypadku 3SUM
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
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
Wstęp do programowania
Wstęp do programowania Wykład 5 Podstawowe techniki programownia w przykładach Janusz Szwabiński Plan wykładu: Metoda babilońska wyliczania pierwiastka Liczby pierwsze i sito Eratostenesa Metoda bisekcji
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
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
Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.
Wrocław, 28.11.2017 Wstęp do informatyki i programowania: liczby pierwsze Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz Dzisiaj na zajęciach... Zajmiemy się liczbami pierwszymi... liczby
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
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
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ą
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
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
Algorytmy i struktury danych
Algorytmy i struktury danych 4. Łódź 2018 Suma szeregu harmonicznego - Wpisz kod programu w oknie edycyjnym - Zapisz kod w pliku harmonic.py - Uruchom skrypt (In[1]: run harmonic.py) - Ten program wykorzystuje
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ść
Wstęp do programowania
Wstęp do programowaia Wykład 13 Algorytmy i ich aaliza Jausz Szwabiński Pla wykładu: Co to jest algorytm? Aaliza algorytmów Notacja dużego O Przykład: aagramy Struktury daych w Pythoie i ich wydajość Literatura
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
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
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)
Wykład 4. Określimy teraz pewną ważną klasę pierścieni.
Wykład 4 Określimy teraz pewną ważną klasę pierścieni. Twierdzenie 1 Niech m, n Z. Jeśli n > 0 to istnieje dokładnie jedna para licz q, r, że: m = qn + r, 0 r < n. Liczbę r nazywamy resztą z dzielenia
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
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
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
Matematyka dyskretna. Andrzej Łachwa, UJ, /14
Matematyka dyskretna Andrzej Łachwa, UJ, 2012 andrzej.lachwa@uj.edu.pl 2/14 Funkcji podłogi z logarytmu można użyć do wyliczenia liczby cyfr liczby naturalnej k (k>0): w układzie dziesiętnym log 10 (k)
Podstawy Programowania Algorytmy i programowanie
Podstawy Programowania Algorytmy i programowanie Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Algorytm Algorytm w matematyce, informatyce, fizyce, itp. lub innej dziedzinie życia,
KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques
KARTA KURSU Nazwa Nazwa w j. ang. Algorytmy, struktury danych i techniki programowania Algorithms, Data Structures and Programming Techniques Kod Punktacja ECTS* 3 Koordynator dr Paweł Pasteczka Zespół
Algorytmy i złożoność obliczeniowa. Wojciech Horzelski
Algorytmy i złożoność obliczeniowa Wojciech Horzelski 1 Tematyka wykładu Ø Ø Ø Ø Ø Wprowadzenie Poprawność algorytmów (elementy analizy algorytmów) Wyszukiwanie Sortowanie Elementarne i abstrakcyjne struktury
PRZEWODNIK PO PRZEDMIOCIE
Nazwa przedmiotu: I KARTA PRZEDMIOTU CEL PRZEDMIOTU PRZEWODNIK PO PRZEDMIOCIE C1. Podniesienie poziomu wiedzy studentów z zagadnień dotyczących analizy i syntezy algorytmów z uwzględnieniem efektywności
PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW
PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW http://metodycy.torun.pl/ m.informatyka@metodycy.torun.pl 1. Wprowadzenie do Pythona podstawowe informacje Python to język programowania wysokiego poziomu,
Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości
Metody numeryczne I. Janusz Szwabiński. Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61
Metody numeryczne I Dokładność obliczeń numerycznych. Złożoność obliczeniowa algorytmów Janusz Szwabiński szwabin@ift.uni.wroc.pl Metody numeryczne I (C) 2004 Janusz Szwabiński p.1/61 ... the purpose of
Projektowanie i Analiza Algorytmów
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNIK INFORMACYJNYCH Projektowanie i Analiza Algorytmów www.pk.edu.pl/~zk/piaa_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład
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
METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH
METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR
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
Języki i metody programowania
Języki i metody programowania Wykład 3 dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie hab. Andrzeja Zbrzezngo Wartości boolowskie
1 Wprowadzenie do algorytmiki
Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności
Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010
1/1 Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010 Kierunek: INFORMATYKA Specjalność: PRZEDMIOT OBOWIĄZKOWY DLA WSZYSTKICH STUDENTÓW. Tryb studiów: NIESTACJONARNE PIERWSZEGO STOPNIA
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
Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009
Informatyka 1 zajęcia nr 1 Elektrotechnika, semestr II rok akademicki 2008/2009 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Organizacja laboratorium przedmiotu 2. Algorytmy i sposoby ich opisu
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
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
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 2016 2020 Realizacja w roku akademickim 2016/17 1.1. Podstawowe informacje o przedmiocie/module Nazwa przedmiotu/ modułu
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
Zał nr 4 do ZW. Dla grupy kursów zaznaczyć kurs końcowy. Liczba punktów ECTS charakterze praktycznym (P)
Zał nr 4 do ZW WYDZIAŁ PODSTAWOWYCH PROBLEMÓW TECHNIKI KARTA PRZEDMIOTU Nazwa w języku polskim : Algorytmy i Struktury Danych Nazwa w języku angielskim : Algorithms adn Data Structures Kierunek studiów
Podstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 5 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 7 listopada 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania
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
Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer
Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny
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:
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)
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
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
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ść
Wstęp do informatyki- wykład 2
MATEMATYKA 1 Wstęp do informatyki- wykład 2 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy
Metodyki i techniki programowania
Metodyki i techniki programowania dr inż. Maciej Kusy Katedra Podstaw Elektroniki Wydział Elektrotechniki i Informatyki Politechnika Rzeszowska Elektronika i Telekomunikacja, sem. 2 Plan wykładu Sprawy
PRZEWODNIK PO PRZEDMIOCIE
Nazwa przedmiotu: Algorytmy i programowanie Algorithms and Programming Kierunek: Zarządzanie i Inżynieria Produkcji Rodzaj przedmiotu: kierunkowy Poziom studiów: studia I stopnia forma studiów: studia
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
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
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
Wykresy i interfejsy użytkownika
Wrocław, 07.11.2017 Wstęp do informatyki i programowania: Wykresy i interfejsy użytkownika Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz Dzisiaj na zajęciach... Instrukcje sterujące Biblioteka
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
Algorytmy, reprezentacja algorytmów.
Algorytmy, reprezentacja algorytmów. Wprowadzenie do algorytmów Najważniejszym pojęciem algorytmiki jest algorytm (ang. algorithm). Nazwa pochodzi od nazwiska perskiego astronoma, astrologa, matematyka
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
Programowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
Podstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 2 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 10 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania
ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne
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 Nazwa modułu w języku angielskim Obowiązuje od roku akademickiego 2012/2013
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
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
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ł
i = n = n 1 + n 2 1 i 2 n 1. n(n + 1)(2n + 1) n (n + 1) =
Druga zasada inducji matematycznej Niech m będzie liczbą całowitą, niech p(n) będzie ciągiem zdań zdefiniowanych na zbiorze {n Z: n m} oraz niech l będzie nieujemną liczbą całowitą. Jeśli (P) wszystie
Metodyki i techniki programowania
Metodyki i techniki programowania dr inż. Maciej Kusy Katedra Podstaw Elektroniki Wydział Elektrotechniki i Informatyki Politechnika Rzeszowska Elektronika i Telekomunikacja, sem. 2 Plan wykładu Sprawy
Wstęp do programowania
Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2014 1 / 38 Przypomnienie Programowanie imperatywne Program
Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.
Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji. Maria Górska 9 stycznia 2010 1 Spis treści 1 Pojęcie algorytmu 3 2 Sposób
Algorytmy i struktury danych
Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Mariusz Różycki University of Cambridge Zajęcia będą mieć formę wykładową. Slajdy można znaleźć na stronie kursu: http://lw.mi.edu.pl/informatyka/algorytmy.
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
IZ2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki niestacjonarne
KARTA MODUŁU / KARTA PRZEDMIOTU Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. Kod modułu Nazwa modułu Nazwa modułu w języku angielskim Obowiązuje od roku akademickiego 2012/2013
Algorytmy i struktury danych.
Kod przedmiotu: ASD Rodzaj przedmiotu: Wydział: Informatyki Kierunek: Informatyka Specjalność (specjalizacja): - Algorytmy i struktury danych. kierunkowy ; obowiązkowy Poziom studiów: pierwszego stopnia
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
Teoria obliczeń i złożoność obliczeniowa
Teoria obliczeń i złożoność obliczeniowa Kontakt: dr hab. inż. Adam Kasperski, prof. PWr. pokój 509 B4 adam.kasperski@pwr.wroc.pl materiały + informacje na stronie www. Zaliczenie: Egzamin Literatura Problemy
Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014
Politechnika Krakowska im. Tadeusza Kościuszki Karta przedmiotu Wydział Mechaniczny obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014 Kierunek studiów: Informatyka Stosowana Forma
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
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
Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy
Informatyka wprowadze do algorytmów (II) dr hab. inż. Mikołaj Morzy plan wykładu cechy algorytmów sposoby zapisu algorytmów klasyfikacja algorytmów przykłady algorytmów sumowa przeszukiwa ciągu liczb sortowa
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
Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA
Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający
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
WHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.
Funkcje wymierne Jerzy Rutkowski Teoria Przypomnijmy, że przez R[x] oznaczamy zbiór wszystkich wielomianów zmiennej x i o współczynnikach rzeczywistych Definicja Funkcją wymierną jednej zmiennej nazywamy
Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2015/2016. Forma studiów: Stacjonarne Kod kierunku: 11.
Państwowa Wyższa Szko la Zawodowa w Nowym Sa czu Karta przedmiotu Instytut Techniczny obowiązuje studentów rozpoczynających studia w roku akademickim 201/2016 Kierunek studiów: Informatyka Profil: Ogólnoakademicki
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łóż
ALGORYTMY. 1. Podstawowe definicje Schemat blokowy
ALGORYTMY 1. Podstawowe definicje Algorytm (definicja nieformalna) to sposób postępowania (przepis) umożliwiający rozwiązanie określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności
KARTA PRZEDMIOTU. 1. NAZWA PRZEDMIOTU: Struktury danych i algorytmy. 2. KIERUNEK: Matematyka. 3. POZIOM STUDIÓW: I stopnia
KARTA PRZEDMIOTU 1. NAZWA PRZEDMIOTU: Struktury danych i algorytmy 2. KIERUNEK: Matematyka 3. POZIOM STUDIÓW: I stopnia 4. ROK/ SEMESTR STUDIÓW: III/5 5. LICZBA PUNKTÓW ECTS: 6 6. LICZBA GODZIN: 30 wykład
Wykład 6. Wyszukiwanie wzorca w tekście
Wykład 6 Wyszukiwanie wzorca w tekście 1 Wyszukiwanie wzorca (przegląd) Porównywanie łańcuchów Algorytm podstawowy siłowy (naive algorithm) Jak go zrealizować? Algorytm Rabina-Karpa Inteligentne wykorzystanie
Jeszcze o algorytmach
Jeszcze o algorytmach Przykłady różnych, podstawowych algorytmów 11.01.2018 M. Rad Plan Powtórka Znajdowanie najmniejszego elementu Segregowanie Poszukiwanie przez połowienie Wstawianie Inne algorytmy
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
Laboratorium kryptograficzne dla licealistów 6
Laboratorium kryptograficzne dla licealistów 6 Projekt Matematyka dla ciekawych świata Łukasz Mazurek 11.05.2017 1 Potęgowanie W kryptografii często wykonuje się operację potęgowania modulo. Np. w algorytmie
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH wykład 1 wprowadzenie, struktury sterujace, projektowanie algorytmów dr hab. inż. Andrzej Obuchowicz, prof. UZ Instytut Sterowania i Systemów Informatycznych UZ p. 425 A2 tel.
Algorytmy przeszukiwania wzorca
Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Algorytmy przeszukiwania wzorca 1 Wstęp Algorytmy
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
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
wagi cyfry 7 5 8 2 pozycje 3 2 1 0
Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień