Algorytmy komputerowe. Złożoność obliczeniowa Sortowanie. Mnożenie macierzy. dr inż. Jarosław Forenc

Podobne dokumenty
Przykład: QS(tab,0,5); Sortowanie. Mnożenie macierzy. dr inż. Jarosław Forenc

Mnożenie macierzy Metody skrócenia czasu mnożenia macierzy. dr inż. Jarosław Forenc , K. metoda Strassena zmiana implementacji algorytmu

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów. dziedziczenie funkcje wirtualne

dr inż. Jarosław Forenc

Semantyka i Weryfikacja Programów - Laboratorium 2 Działania na ułamkach, krotki i rekordy

Wprowadzenie do Sieci Neuronowych Łańcuchy Markowa

Połączenie (1) Optymalizacja poleceń SQL Część 3. Algorytm nested loops. Połączenie (2)

Wprowadzenie do Sieci Neuronowych Łańcuchy Markowa

Rys Wyrównanie spostrzeżeń zawarunkowanych jednakowo dokładnych C. KRAKOWIANY

Algebra Boole a. ccc dr inŝ. Jarosław Forenc

ZADANIA Z ZAKRESU SZKOŁY PODSTAWOWEJ, GIMNAZJUM I SZKOŁY ŚREDNIEJ

Programowanie obiektowe w języku C++ Operacje na wektorach i macierzach. dr inż. Jarosław Forenc. Dziedziczenie. funkcje wirtualne (polimorfizm)

G i m n a z j a l i s t ó w

FUNKCJA KWADRATOWA. RÓWNANIA I NIERÓWNOŚCI DRUGIEGO STOPNIA.

Zadania. I. Podzielność liczb całkowitych

WYZNACZNIKI. . Gdybyśmy rozważali układ dwóch równań liniowych, powiedzmy: Takie układy w matematyce nazywa się macierzami. Przyjmijmy definicję:

Semantyka i Weryfikacja Programów - Laboratorium 7

Wektor kolumnowy m wymiarowy macierz prostokątna o wymiarze n=1 Wektor wierszowy n wymiarowy macierz prostokątna o wymiarze m=1

Elementy znajdujące się w opakowaniu mogą różnić się w zależności od kraju, w którym zakupiono urządzenie. Przewód zasilający do gniazdka ściennego

MODEL ODPOWIEDZI I SCHEMAT OCENIANIA ARKUSZA EGZAMINACYJNEGO II

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

2. Funktory TTL cz.2

4. RACHUNEK WEKTOROWY

Iloczyn skalarny

Kodowanie liczb. Kodowanie stałopozycyjne liczb całkowitych. Niech liczba całkowita a ma w systemie dwójkowym postać: Kod prosty

a) b) Rys Schemat ideowo-konstrukcyjny układu do przykładu 6.1 a) i jego schemat blokowy

dr inż. Jarosław Forenc

Podstawy programowania obiektowego

KLUCZ PUNKTOWANIA ODPOWIEDZI

Rozwiązania maj 2017r. Zadania zamknięte

Szkice rozwiązań zadań zawody rejonowe 2019

WYMAGANIA EDUKACYJNE Z MATEMATYKI W KLASIE IIc ZAKRES PODSTAWOWY I ROZSZERZONY

Realizacje zmiennych są niezależne, co sprawia, że ciąg jest ciągiem niezależnych zmiennych losowych,

Algebra Boola i podstawy systemów liczbowych. Ćwiczenia z Teorii Układów Logicznych, dr inż. Ernest Jamro. 1. System dwójkowy reprezentacja binarna

Oznaczenia: K wymagania konieczne; P wymagania podstawowe; R wymagania rozszerzające; D wymagania dopełniające; W wymagania wykraczające

Z INFORMATYKI RAPORT

Macierz. Wyznacznik macierzy. Układ równań liniowych

Wymagania edukacyjne matematyka klasa 2 zakres podstawowy 1. SUMY ALGEBRAICZNE

4.6. Gramatyki regularne

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

Analiza matematyczna i algebra liniowa

Metoda List łańcuchowych

1. Wstęp. Pojęcie grafu przepływowego. Niech pewien system liniowy będzie opisany układem liniowych równań algebraicznych

RBD Relacyjne Bazy Danych

Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych (zakres podstawowy)

Wspomaganie obliczeń za pomocą programu MathCad

T W O R Z Y M Y. 15 godzin w cyklu 3-godzinnym

usuwa niewymierność z mianownika wyrażenia typu

PRZEŁĄCZNIK MIEJSC POMIAROWYCH PMP

PODSTAWY BAZ DANYCH Wykład 3 2. Pojęcie Relacyjnej Bazy Danych

Matematyczne Podstawy Informatyki

Co można zrobić za pomocą maszyny Turinga? Wszystko! Maszyna Turinga potrafi rozwiązać każdy efektywnie rozwiązywalny problem algorytmiczny!

WYMAGANIA I KRYTERIA OCENIANIA Z MATEMATYKI W 3 LETNIM LICEUM OGÓLNOKSZTAŁCĄCYM

Wymagania na ocenę dopuszczającą z matematyki klasa II Matematyka - Babiański, Chańko-Nowa Era nr prog. DKOS /02

WYMAGANIA NA OCENĘ DOPUSZCZAJĄCĄ DLA UCZNIÓW KLASY Ia TECHNIKUM

symbol dodatkowy element graficzny kolorystyka typografia

Równania i nierówności kwadratowe z jedną niewiadomą

Wyk lad 1 Podstawowe wiadomości o macierzach

Algorytm. a programowanie -

Wymagania edukacyjne na poszczególne oceny z matematyki w klasie II poziom rozszerzony

Klucz odpowiedzi do zadań zamkniętych i schemat oceniania zadań otwartych

2. FUNKCJE WYMIERNE Poziom (K) lub (P)

Temat lekcji Zakres treści Osiągnięcia ucznia

Wprowadzenie: Do czego służą wektory?

Montaż żaluzji i rolet

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

DZIAŁ 2. Figury geometryczne

Minimalizacja automatu

Wymagania edukacyjne matematyka klasa 2b, 2c, 2e zakres podstawowy rok szkolny 2015/ Sumy algebraiczne

Wymagania edukacyjne z matematyki FUNKCJE dopuszczającą dostateczną dobrą bardzo dobrą

Pierwiastek z liczby zespolonej

Metody generowania skończonych modeli zachowań systemów z czasem

SZTUCZNA INTELIGENCJA

MATeMAtyka 3 inf. Przedmiotowy system oceniania wraz z określeniem wymagań edukacyjnych. Zakres podstawowy i rozszerzony. Dorota Ponczek, Karolina Wej

Macierz. Wyznacznik macierzy. Układ równań liniowych

GŁÓWNY URZĄD STATYSTYCZNY, al. Niepodległości 208, Warszawa DS-50 I OCHRONA ZDROWIA W GOSPODARSTWACH DOMOWYCH, Kwestionariusz indywidualny

WYMAGANIA I KRYTERIA OCENIANIA DO EGZAMINU POPRAWKOWEGO MATEMATYKA. Zakresie podstawowym i rozszerzonym. Klasa II rok szkolny 2011/2012

Maciej Grzesiak. Iloczyn skalarny. 1. Iloczyn skalarny wektorów na płaszczyźnie i w przestrzeni. a b = a b cos ϕ. j) (b x. i + b y

Wyznacznikiem macierzy kwadratowej A stopnia n nazywamy liczbę det A określoną następująco:

Algorytmy graficzne. Filtry wektorowe. Filtracja obrazów kolorowych

Algorytmy komputerowe. dr inż. Jarosław Forenc

Komisja Egzaminacyjna dla Aktuariuszy LII Egzamin dla Aktuariuszy z 15 marca 2010 r. Część I Matematyka finansowa

KONKURS MATEMATYCZNY dla uczniów gimnazjów w roku szkolnym 2012/13. Propozycja punktowania rozwiązań zadań

Komisja Egzaminacyjna dla Aktuariuszy LIX Egzamin dla Aktuariuszy z 12 marca 2012 r. Część I Matematyka finansowa

Wektory [ ] Oczywiście wektor w przestrzeni trójwymiarowej wektor będzie miał trzy współrzędne. B (x B. , y B. α A (x A, y A ) to jest wektor

Całki oznaczone. wykład z MATEMATYKI

Matematyka stosowana i metody numeryczne

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego. best in training PRE TEST

Technikum Nr 2 im. gen. Mieczysława Smorawińskiego w Zespole Szkół Ekonomicznych w Kaliszu

GENEZA WYZNACZNIKA. Układ równań liniowych z dwiema niewiadomymi. Rozwiązania układu metodą eliminacji Gaussa

Materiały pomocnicze 1

wersja podstawowa (gradient)

Wymagania edukacyjne z matematyki Klasa IIB. Rok szkolny 2013/2014 Poziom podstawowy

O RELACJACH MIĘDZY GRUPĄ OBROTÓW, A GRUPĄ PERMUTACJI

Wykład 6 Dyfrakcja Fresnela i Fraunhofera

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY VIII w roku szkolnym 2015/2016

TABLICE WZORÓW I TWIERDZEŃ MATEMATYCZNYCH zakres GIMNAZJUM

ROZWIĄZYWANIE MAŁYCH TRÓJKĄTÓW SFERYCZNYCH

WYKŁAD 5. Typy macierzy, działania na macierzach, macierz układu równań. Podstawowe wiadomości o macierzach

Karta oceny merytorycznej wniosku o dofinansowanie projektu innowacyjnego testującego składanego w trybie konkursowym w ramach PO KL

Transkrypt:

Rok kdemiki 2012/2013, Wykłd nr 7 2/66 Pln wykłdu nr 7 Informtyk 1 Politehnik Biłostok - Wydził Elektryzny Elektrotehnik, semestr II, studi stjonrne I stopni Rok kdemiki 2012/2013 Wykłd nr 7 (10.04.2013) Algorytmy komputerowe definije lgorytmu podstwowe ehy lgorytmu sposoy opisu lgorytmów Rekurenj Złożoność olizeniow Sortow proste wstwi proste wyier ąelkowe Quik-Sort Mnoże mierzy Rok kdemiki 2012/2013, Wykłd nr 7 3/66 Rok kdemiki 2012/2013, Wykłd nr 7 4/66 Algorytm - definije Algorytmy Definij 1 Skońzony, uporządkowny iąg jsno zdefiniownyh zynnośi, koznyh do wykonni pewnego zdni Słowo lgorytm pohodzi od nzwisk Muhmmd in-musy l-chuwrizmiego (po łi pisnego jko Algorismus), mtemtyk perskiego z IX wieku Definij 2 Metod rozwiązni zdni Definij 3 Śiśle określon proedur olizeniow, któr dl włśiwyh dnyh wejśiowyh zwr żądne dne wyjśiowe zwne wynikiem dziłni lgorytmu Bdm lgorytmów zjmuje się lgorytmik Algorytm może zostć zimplementowny w posti progrmu komputerowego Przetłumze lgorytmu n wyrny język progrmowni nzywne jest też kodowm lgorytmu Ten sm lgorytm może yć zimplementowny (zkodowny) w różny sposó przy użyiu różnyh języków progrmowni.

Rok kdemiki 2012/2013, Wykłd nr 7 5/66 Rok kdemiki 2012/2013, Wykłd nr 7 6/66 Podstwowe ehy lgorytmu Sposoy opisu lgorytmów Posid dnyh wejśiowyh (w ilośi większej lu równej zeru) pohodząyh z dorze zdefiniownego zioru Zwr wyniku Preyzyjne zdefiniow (kżdy krok lgorytmu musi yć jednoznz określony) Poprwność (dl kżdego z złożonego dopuszzlnego zestwu dnyh wejśiowyh) Zkońze dziłni po skońzonej lizie kroków (powinn istć poprw dziłją reguł stopu lgorytmu) Efektywność (jk njkrótszy zs wykonni i jk njmjsze zpotrzeow n pmięć). 1. Opis słowny w języku nturlnym lu w posti listy kroków (opis w punkth) 2. Shemt lokowy 3. Pseudokod (formln odmin język progrmowni) 4. Wyrny język progrmowni Rok kdemiki 2012/2013, Wykłd nr 7 7/66 Rok kdemiki 2012/2013, Wykłd nr 7 8/66 Opis słowny lgorytmu List kroków Pod kolejnyh zynnośi, które nleży wykonć, y otrzymć ozekiwny efekt końowy Uporządkowny opis wszystkih zynnośi, jkie nleży wykonć podzs relizji lgorytmu Przypomin przepis kulinrny z książki kuhrskiej lu instrukję osługi urządzeni, np. Algorytm: Tortill ( Podróże kulinrne R. Mkłowiz) Krok jest to pojedynz zynność relizown w lgorytmie Kroki w lgorytmie są numerowne, operje wykonywne są zgod z rosnąą numerją kroków Dne wejśiowe: 0,5 kg ziemników, 100 g kiełsy Chorizo, 8 jjek Dne wyjśiowe: gotow Tortill Opis lgorytmu: Ziemniki orć i pokroić w plsterki. Kiełsę pokroić w plsterki. Ziemniki wrzuić n gorąą oliwę n ptelni i przyrumienić z ou stron. Kiełsę wrzuić n gorąą oliwę n ptelni i przyrumienić z ou stron. Uić jjk i dodć do połązonyh ziemników i kiełsy. Dodć sól i pieprz. Usmżyć z ou stron wielki omlet ndziewny hipsmi ziemniznymi z kiełską. Jedynym odstępstwem od powyższej reguły są operje skoku (wrunkowe lu ezwrunkowe), w któryh jw określ się numer kolejnego kroku Przykłd (instrukj otwierni wózk-speerówki): Krok 1: Krok 2: Krok 3: Zwolnij element lokująy wózek Rozkłdj wózek w kierunku kółek Niskją nogą dolny element lokująy ż do ztrzśnięi, rozłóż wózek do pozyji przewozowej

Rok kdemiki 2012/2013, Wykłd nr 7 9/66 Rok kdemiki 2012/2013, Wykłd nr 7 10/66 Shemt lokowy Shemt lokowy Zwier pln lgorytmu przedstwiony w posti grfiznej struktury elementów zwnyh lokmi Kżdy lok zwier informję o operji, któr m yć w nim wykonn Pomiędzy lokmi umieszzone są li przepływu (strzłki) określjąe kolejność wykonywni loków lgorytmu Podstwowe symole stosowne n shemth lokowyh: Podstwowe symole stosowne n shemth lokowyh: lok strtowy, pozątek lgorytmu wskzuje miejse rozpozęi lgorytmu może występowć tylko jeden rz lok końowy, ko lgorytmu wskzuje miejse zkońzeni lgorytmu musi występowć przynjmj jeden rz lini przepływu (połąze) występuje w posti linii zkońzonej strzłką określ kierunek przemieszzni się po shemie lok wykonwzy, lok funkyjny zwier polee (elementrną instrukję) instrukją może yć podstwie, operj rytmetyzn, wprowdze dnyh lu wyprowdze wyników Rok kdemiki 2012/2013, Wykłd nr 7 11/66 Rok kdemiki 2012/2013, Wykłd nr 7 12/66 Shemt lokowy Pseudokod i język progrmowni Podstwowe symole stosowne n shemth lokowyh: lok wrunkowy (deyzyjny, porównująy) sprwdz umieszzony w nim wrunek i dokonuje wyoru tylko jednej drogi wyjśiowej połązeni wyhodząe z loku: - T lu TAK - gdy wrunek jest prwdziwy - N lu NIE - gdy wrunek jest prwdziwy Czsmi wprowdz i wyprowdz dnyh oznz się dodtkowym lokiem wejśi-wyjśi lok wejśi-wyjśi poprzez ten lok wprowdzne są dne i wyprowdzne wyniki Pseudokod: Pseudokod (pseudojęzyk) - uproszzon wersj język progrmowni Często zwier zwroty pohodząe z języków progrmowni Zpis w pseudokodzie może yć łtwo przetłumzony n wyrny język progrmowni Opis w języku progrmowni: Zpis progrmu w konkretnym języku progrmowni Stosowne języki: Psl, C, Mtl (kiedyś - Fortrn, Bsi)

Rok kdemiki 2012/2013, Wykłd nr 7 13/66 Rok kdemiki 2012/2013, Wykłd nr 7 14/66 Algorytm Euklides - list kroków Algorytm Euklides - njwiększy wspólny dzielnik dwóh liz Dne wejśiowe: zerowe lizy nturlne i Dne wyjśiowe: NWD(,) Kolejne kroki: 1. Czytj lizy i 2. Dopóki i są większe od zer, powtrzj krok 3, nstęp przejdź do kroku 4 3. Jeśli jest większe od, to weź z resztę z dzieleni przez, w przeiwnym rzie weź z resztę z dzieleni przez 4. Przyjmij jko njwiększy wspólny dzielnik tę z liz i, któr pozostł większ od zer 5. Drukuj NWD(,) Algorytm Euklides - przykłd NWD(1675,3752) =? Dziele większej lizy przez mjszą Zmin 1675 3752 / = 3752/1675 = 2 reszt 402 = 402 1675 402 / = 1675/402 = 4 reszt 67 = 67 67 402 / = 402/67 = 6 reszt 0 = 0 67 0 KONIEC NWD(1675,3752) = 67 Rok kdemiki 2012/2013, Wykłd nr 7 15/66 Rok kdemiki 2012/2013, Wykłd nr 7 16/66 Algorytm Euklides - shemt lokowy Algorytm Euklides - pseudokod NWD(,) while >0 i >0 do if > then mod else mod if >0 then return else return

Rok kdemiki 2012/2013, Wykłd nr 7 17/66 Rok kdemiki 2012/2013, Wykłd nr 7 18/66 Algorytm Euklides - język progrmowni (C) Wrtość ezwzględn lizy - shemt lokowy int NWD(int, int ) while (>0 && >0) if (>) = % ; else = % ; if (>0) return ; else return ; x dl x 0 x = x dl x < 0 tk START Wzytj(x) x 0 tk START Wzytj(x) x 0 Drukuj(x) Drukuj(-x) Drukuj(x) Drukuj(-x) Rok kdemiki 2012/2013, Wykłd nr 7 19/66 Rok kdemiki 2012/2013, Wykłd nr 7 20/66 Przystość lizy - shemt lokowy Równ kwdrtowe - shemt lokowy START Wzytj(x) START Wzytj(x) x < 0 tk 2 x + x + = 0 = 2 4 START Wzytj(,,) delt= 2-4 Drukuj (x - przyste) x mod 2 = 0 tk Drukuj (x - przyste) x > 1 tk x = x -2 x = -x Drukuj (x - przyste) x = 0 tk Drukuj (x - przyste) > 0 : x1 =, 2 = 0 : x1 = x2 = 2 + x2 = 2 tk x1 = 2 + x2 = 2 Drukuj(x1,x2) delt > 0 tk x1 = x2 = 2 Drukuj(x1,x2) delt = 0 Drukuj(Brk rozwiązni)

Rok kdemiki 2012/2013, Wykłd nr 7 21/66 Rok kdemiki 2012/2013, Wykłd nr 7 22/66 Silni - shemt lokowy Rekurenj n! = 1 2 3... n 0! = 1 1! = 1 2! = 1 2 3! = 1 2 3... START Wzytj(n) silni = 1 n > 0 tk silni=n silni n = n -1 Drukuj(silni) Rekurenj lu rekursj - jest to odwoływ się funkji lu definiji do smej sieie Rozwiąz dnego prolemu wyrż się z pomoą rozwiązń tego smego prolemu, le dl dnyh o mjszyh rozmirh W mtemtye mehnizm rekurenji stosowny jest do definiowni lu opisywni lgorytmów Silni: 1 n! = n( n 1)! dl dl n = 0 n 1 int silni(int n) return n==0? 1 : n*silni(n-1); Rok kdemiki 2012/2013, Wykłd nr 7 23/66 Rok kdemiki 2012/2013, Wykłd nr 7 24/66 Rekurenj - iąg Fiogo Rekurenj - lgorytm Euklides 0 dl n = 0 Fn = 1 dl n = 1 F n 1 + F n 2 dl n > 1 int F(int n) if (n==0) return 0; else if (n==1) return 1; else return F(n-1) + F(n-2); NWD(, ) = NWD(, mod ) int NWD(int, int ) if (==0) return ; else return NWD(, % ); dl dl = 0 1

Rok kdemiki 2012/2013, Wykłd nr 7 25/66 Rok kdemiki 2012/2013, Wykłd nr 7 26/66 Złożoność olizeniow Złożoność olizeniow W elu rozwiązni dnego prolemu olizeniowego szukmy lgorytmu njrdziej efektywnego zyli: njszyszego o możliwie młym zpotrzeowniu n pmięć Do oeny efektywnośi progrmu służy złożoność olizeniow (koszt lgorytmu) Złożoność olizeniow lgorytmu: jest ilośią zsoów potrzenyh do jego dziłni (zs, pmięć) jest funkją rozmiru dnyh, n któryh pruje lgorytm Złożoność zsow Jej mirą jest liz podstwowyh operji (dominująyh) Podstwowe operje - porówn, podstwie, operj rytmetyzn Złożoność pmięiow Jest mirą wykorzystni pmięi (liz komórek pmięi) Złożoność pesymistyzn Odpowid dnym njrdziej sprzyjjąym dl lgorytmu Złożoność średni Złożoność uśrednion po wszystkih możliwyh zestwh dnyh, występują dl typowyh dnyh wejśiowyh Rok kdemiki 2012/2013, Wykłd nr 7 27/66 Rok kdemiki 2012/2013, Wykłd nr 7 28/66 Notj O ( duże O ) Notj O ( duże O ) Wyrż złożoność mtemtyzną lgorytmu Porówn njzęśiej występująyh złożonośi: Po literze O występuje wyrże w nwish zwierjąe literę n, któr oznz lizę elementów, n której dził lgorytm Do wyznzeni złożonośi ierze się pod uwgę lizę wykonywnyh w lgorytmie podstwowyh operji Przykłd: O(n) - złożoność lgorytmu jest prostą funkją lizy elementów (jeśli sortow 10.000 elementów zjmuje 5 s, to sortow 20.000 elementów zjmie 10 s) O(n 2 )- zs kozny do wykonni lgorytmu roś wrz z kwdrtem lizy elementów (przy podwojeniu lizy elementów ih osług ędzie trwł ztery rzy dłużej) Elementy O(log n) O(n) O(n logn) O(n 2 ) O(2 n ) 10 3 10 33 100 1024 100 7 100 664 10 000 1,27 10 30 1 000 10 1 000 9 966 1 000 000 1,07 10 301 10 000 13 10 000 132 877 100000000 1,99 10 3010 O(log n) O(n) - złożoność logrytmizn - złożoność liniow O(n log n) - złożoność liniowo-logrytmizn (qusi-liniow) O(n 2 ) - złożoność kwdrtow O(2 n ) - złożoność wykłdniz

Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 29/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 30/66 Sortow Sortow sortow poleg n uporządkowniu zioru dnyh względem pewnyh eh hrkterystyznyh kżdego elementu tego zioru (wrtośi kżdego elementu) w przypdku liz, sortow poleg n znlezieniu kolejnośi liz zgodnej z relją lu w przypdku słów sortow poleg n ustwieniu ih w porządku lfetyznym (leksykogrfiznym) Przykłd: tli posortown: Przykłd: tli posortown: tlie posortowne: tli posortown zgod z relją (od njmjszej do njwiększej lizy): tli posortown zgod z relją (od njwiększej do njmjszej lizy): Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 31/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 32/66 Sortow w prktye sortow sprowdz się do porządkow dnyh n podstwie porównni - porównywny element to kluz Przykłd: tli posortown (imię, nzwisko, wiek): tli posortown (kluz - nzwisko): tli posortown (kluz - wiek): Sortow Po o stosowć sortow? posortowne elementy możn szyiej zloklizowć posortowne elementy możn przedstwić w zyteljszy sposó Klsyfikje lgorytmów sortowni złożoność olizeniow lgorytmu - zleżność lizy wykonywnyh operji w stosunku do lizenośi sortownego zioru n złożoność pmięiow - wielkość zsoów zjmownyh przez lgorytm (sortow w miejsu - wielkość zioru dnyh podzs sortowni zmieni się lu jest tylko o większ) sortow wewnętrzne (odyw się w pmięi komputer) i zewnętrzne ( jest możliwe jednozesne umieszze wszystkih elementów zioru sortownego w pmięi komputer)

Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 33/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 34/66 Klsyfikje lgorytmów sortowni Proste wstwi (insertion sort) Stilność lgorytmu: lgorytm jest stilny, jeśli podzs sortowni zhowuje kolejność występowni elementów o tym smym kluzu, np. tli posortown (imię, nzwisko, wiek): tli posortown lgorytmem stilnym (kluz - wiek): tli posortown lgorytmem stilnym (kluz - wiek): Przykłd: Funkj w języku C: void InsertionSort(int t[]) int i,j,tmp; for (i=1; i<n; i++) j=i; tmp=t[i]; while (t[j-1]>tmp && j>0) t[j]=t[j-1]; j--; t[j]=tmp; Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 35/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 36/66 Proste wstwi (insertion sort) Uwgi: złożoność lgorytmu: O(n 2 ) + wydjny dl dnyh wstęp posortownyh + wydjny dl ziorów o wielkiej lizenośi + młe zsoy zjmowne podzs pry (sortow w miejsu) + stilny + prosty w implementji mł efektywność dl normlnej i dużej ilośi dnyh. Proste wyier (seletion sort) Przykłd: Funkj w języku C: void SeletionSort(int t[]) int i,j,k,tmp; for (i=0;i<n-1;i++) k=i; for (j=i+1; j<n; j++) if (t[k]>=t[j]) k = j; tmp = t[i]; t[i] = t[k]; t[k] = tmp;

Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 37/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 38/66 Proste wyier (seletion sort) Bąelkowe (ule sort) Uwgi: złożoność lgorytmu: O(n 2 ) + szyki w sortowniu wielkih tli + młe zsoy zjmowne podzs pry (sortow w miejsu) + prosty w implementji liz porównń elementów jest zleżn od pozątkowego rozmieszzeni elementów w tliy w lgorytmie może zdrzyć się, że wykonywn jest zmin tego smego elementu ze soą. sortow ąelkowe (ng. ule sort), nzywne jest tkże: sortowm pęherzykowym sortowm przez prostą zminę (ng. stright exhnge) metod t poleg n porównywniu dwóh kolejnyh elementów i zmi ih kolejnośi jeśli jest to kozne nzw metody wzięł się stąd, że kolejne porównni powodują wypyh kolejnego njwiększego elementu n ko ( wypłynięie njwiększego ąelk ) Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 39/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 40/66 Bąelkowe (ule sort) Bąelkowe (ule sort) Funkj w języku C: void BuleSort(int t[]) int i,j,tmp,ko; do ko=0; for (i=0;i<n-1;i++) if (t[i]>t[i+1]) tmp=t[i]; t[i]=t[i+1]; t[i+1]=tmp; ko=1; while (ko);

Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 41/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 42/66 Bąelkowe (ule sort) Uwgi: złożoność lgorytmu: O(n 2 ) + prost relizj + wysok efektywność użyi pmięi (sortow w miejsu) + stilny mł efektywność. Sortow szykie (Quik-Sort) Fz dzieleni: w fzie dzieleni tli jest dzielon n dwie zęśi wokół pewnego elementu (nzywnego elementem entrlnym) wyiermy jeden element (losowo, hoć może to yć element środkowy) i nzywmy go x przeglądmy tlię od lewej strony, ż znjdziemy element i x, nstęp przeglądmy tlię od prwej strony, ż znjdziemy j x zmienimy elementy i i j miejsmi i kontynuujemy proes przeglądni i zminy, ż nstąpi gdzieś spotk w środku tliy w rezultie otrzymujemy tlię podzieloną n lewą zęść z wrtośimi mjszymi od x i n prwą zęść z wrtośimi większymi od x Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 43/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 44/66 Sortow szykie (Quik-Sort) Fz sortowni: zwier dw rekurenyjne wywołni tej smej funkji sortowni: dl lewej i dl prwej zęśi posortownej tliy rekurenj ztrzymuje się, gdy wielkość tliy wynosi 1 Przykłd: sortujemy 6-elementową tlię t: Sortow szykie (Quik-Sort) QuikSort(t,0,5): element środkowy: (0+5)/2 = 2, x = t[2] = 5 od lewej szukmy t[i] x, od prwej t[j] x, zmienimy elementy miejsmi poszukiwni końzymy, gdy indeksy mijją się wywoł funkji QuikSort() m postć: wywołujemy rekurenyj funkję QuikSort() dl elementów z zkresów [l,j] i [i,r]: QuikSort(t,0,5); QuikSort(t,0,3); QuikSort(t,4,5);

Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 45/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 46/66 Sortow szykie (Quik-Sort) QuikSort(t,0,3): element środkowy dl zkresu [0,3]: (0+3)/2 = 1, x = t[1] = 2 Sortow szykie (Quik-Sort) QuikSort(t,2,3): element środkowy dl zkresu [2,3]: (2+3)/2 = 2, x = t[2] = 3 0 1 2 3 od lewej szukmy t[i] x, od prwej t[j] x, 1 2 4 3 zmienimy elementy miejsmi: i j zmin od lewej szukmy t[i] x, od prwej t[j] x, zmienimy elementy miejsmi: poszukiwni końzymy, gdy indeksy mijją się: poszukiwni końzymy, gdy indeksy mijją się: wywoł QuikSort() tylko dl elementów z zkresu [2,3], gdyż po lewej stro rozmir tliy do posortowni wynosi 1: QuikSort(t,2,3); rozmir ou tli do posortowni wynosi 1 wię m nowyh wywołń Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 47/66 Informtyk 2, studi stjonrne I stopni Rok kdemiki 2012/2013, Wykłd nr 7 48/66 Sortow szykie (Quik-Sort) QuikSort(t,4,5): element środkowy dl zkresu [4,5]: (4+5)/2 = 4, x = t[4] = 6 od lewej szukmy t[i] x, od prwej t[j] x, zmienimy elementy miejsmi: poszukiwni końzymy, gdy indeksy mijją się: rozmir ou tli do posortowni wynosi 1 wię m nowyh wywołń Sortow szykie (Quik-Sort) Funkj w języku C: void QuikSort(int t[], int l, int r) int i,j,x,y; i=l; j=r; x=t[(l+r)/2]; do while (t[i]<x) i++; while (x<t[j]) j--; if (i<=j) y=t[i]; t[i]=t[j]; t[j]=y; i++; j--; while (i<=j); if (l<j) QuikSort(t,l,j); if (i<r) QuikSort(t,i,r);

Rok kdemiki 2012/2013, Wykłd nr 7 49/66 Rok kdemiki 2012/2013, Wykłd nr 7 50/66 Funkj qsort() w języku C lgorytm Quik-Sort zostł zimplementowny w języku C w funkji: QSORT stdli.h void qsort(void *z, size_t n, size_t size, (*funkj)(onst void *element1, onst void *element2)); funkj qsort() sortuje metodą Quik-Sort tlię wskzywną przez rgument z i zwierjąą n elementów o rozmirze size funkj qsort() posługuje się funkją porównująą funkj(), której rgumentmi są wskzni do elementów tliy z funkj() powinn zwrć wrtośi: < 0, gdy *element1 < *element2 == 0, gdy *element1 == *element2 > 0, gdy *element1 > *element2 Funkj qsort() w języku C - przykłd (1/2) #inlude <stdio.h> #inlude <stdli.h> #inlude <time.h> #define N 10 void generuj(int t[]) int i; srnd(time(null)); for (i=0;i<n;i++) t[i]=rnd()%100; void drukuj(int t[]) int i; for (i=0;i<n;i++) printf("%2d ",t[i]); printf("\n"); Rok kdemiki 2012/2013, Wykłd nr 7 51/66 Rok kdemiki 2012/2013, Wykłd nr 7 52/66 Funkj qsort() w języku C - przykłd (2/2) int funkj(onst void *element1, onst void *element2) if (*(int*)element1 < *(int*)element2) return -1; if (*(int*)element1 == *(int*)element2) return 0; if (*(int*)element1 > *(int*)element2) return 1; int min() int t[n]; generuj(t); drukuj(t); printf("\nqsort:\n"); qsort((void*)t,(size_t)n,sizeof(int),funkj); drukuj(t); system("pause"); return (0); Funkj qsort() w języku C - przykłd (2/2) 6 7 31 22 66 89 22 27 int funkj(onst void *element1, onst void *element2) if (*(int*)element1 < qsort: *(int*)element2) return -1; 26 52 if (*(int*)element1 == 6 *(int*)element2) 7 22 22 26return 27 0; 31 if (*(int*)element1 > *(int*)element2) return 1; 52 66 89 int min() int t[n]; generuj(t); drukuj(t); printf("\nqsort:\n"); qsort((void*)t,(size_t)n,sizeof(int),funkj); drukuj(t); system("pause"); return (0);

Rok kdemiki 2012/2013, Wykłd nr 7 53/66 Rok kdemiki 2012/2013, Wykłd nr 7 54/66 Mnoże mierzy przez mierz Mnoże mierzy przez mierz N Operj: C = A B A[N][M] - mierz N M - elementow B[M][K] - mierz M K - elementow C[N][K] - mierz N K - elementow 11 21 31 12 22 32 13 23 33 = N 11 21 31 12 22 32 13 23 33 11 21 31 12 22 32 13 23 33 M N (i) Operj: C = A B (A[N][M],B[M][K],C[N][K]) 11 12 13 = N (i) 21 22 23 21 22 23 21 22 23 31 32 33 31 32 33 31 32 33 K (k) M (j) K (k) Progrm w języku C: 11 12 13 11 12 13 M (j) 11 21 31 = = = 11 11 21 11 31 11 12 21 22 21 32 21 K 13 31 23 31 33 31 12 22 32 = = = 11 12 21 12 31 12 M 12 22 22 22 32 22 13 32 23 32 33 32 13 23 33 K = = = 11 13 21 13 31 13 12 23 22 23 32 23 13 33 23 33 33 33 for (i=0; i<n; i++) for (k=0; k<k; k++) C[i][k] = 0.0; for (j=0; j<m; j++) C[i][k] += A[i][j] * B[j][k]; M ik = j= i = 1,2, K, N ij jk, 1 k = 1,2, K, K Koszt lgorytmu: O( n 3 ) Rok kdemiki 2012/2013, Wykłd nr 7 55/66 Rok kdemiki 2012/2013, Wykłd nr 7 56/66 Mnoże mierzy przez mierz Mnoże mierzy przez mierz n szykość wykonywni olizeń wpływ tylko liz operji zmiennoprzeinkowyh, le tkże sposó poierni dnyh z pmięi komputer oene systemy komputerowe mją hierrhizną udowę pmięi: rejestry proesor pmięć podręzn (he) pmięć operyjn pmięć zewnętrzn olizeni są efektyw wykonywne, gdy odywją się n zmiennyh znjdująyh się w jk njszyszej pmięi rozptrzmy dw lgorytmy mnożeni mierzy: Algorytm nr 1 for (i=0; i<n; i++) for (k=0; k<n; k++) for (j=0; j<n; j++) C[i][k] += A[i][j]*B[j][k]; Algorytm nr 2 for (i=0; i<n; i++) for (j=0; j<n; j++) for (k=0; k<n; k++) C[i][k] += A[i][j]*B[j][k]; mierze: 2048 2048 proesor: Intel Core i5-2410m 2,30 GHz kompiltor: Mirosoft Visul C++ 2008 Stndrd Edition Algorytm nr 1: ez optymlizji: 268,021 [s] z optymlizją: 92,053 [s] Algorytm nr 2: ez optymlizji: 49,409 [s] z optymlizją: 6,270 [s]

Rok kdemiki 2012/2013, Wykłd nr 7 57/66 Rok kdemiki 2012/2013, Wykłd nr 7 58/66 Mnoże mierzy przez mierz Mnoże mierzy przez mierz Metod przehowywni mierzy w pmięi liniowej Algorytm nr 1 N M [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] for (i=0; i<n; i++) for (k=0; k<k; k++) for (j=0; j<m; j++) C[i][k] += A[i][j] * B[j][k]; C A B [2][0] [2][1] [2][2] [2][3] mierz w pmięi liniowej (wektor) mierz Pmięć podręzn (he memory) Algorytm nr 2 for (i=0; i<n; i++) for (j=0; j<m; j++) for (k=0; k<k; k++) C[i][k] += A[i][j] * B[j][k]; C A B [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] Rok kdemiki 2012/2013, Wykłd nr 7 59/66 Rok kdemiki 2012/2013, Wykłd nr 7 60/66 Biliotek numeryzn BLAS BLAS - Bsi Liner Alger Suprogrms Ziór proedur służąyh do wykonywni operji n podstwowyh oiekth lgery liniowej: sklrh wektorh mierzh Stron główn: http://www.netli.org/ls Rok pulikji: 1979 Oryginl npisn w języku Fortrn 77 Osługuje lizy: rzezywiste pojedynzej i podwójnej preyzji zespolone pojedynzej i podwójnej preyzji Biliotek numeryzn BLAS Wyróżni się 3 poziomy strkji lgorytmów BLAS BLAS Level 1 operje typu wektor-wektor (dodw wektorów, normy wektor, ilozyn sklrny wektorów) y α x + y BLAS Level 2 operje typu mierz-wektor (mnoże mierzy przez wektor) y αax + y BLAS Level 3 operje typu mierz-mierz (mnoże mierzy przez mierz) C αa B + C

Rok kdemiki 2012/2013, Wykłd nr 7 61/66 Rok kdemiki 2012/2013, Wykłd nr 7 62/66 BLAS - Nzwy proedur BLAS - Implementje DGEMV - mnoże mierzy przez wektor, mierz i wektor zwierją lizy rzezywiste podwójnej preyzji y α A x + β y lu y α A x + β y SGEMM - mnoże mierzy przez mierz, mierze zwierją lizy rzezywiste pojedynzej preyzji T Stron główn: http://www.netli.org/ls Stron główn zwier zoptymlizowną iliotekę BLAS MKL (Intel) Intel Mth Kernel Lirry (Intel MKL) v11 http://softwre.intel.om/en-us/intel-mkl y α op( A) op( B) + β C op( X) = X, op( X) = X, op( X) = onjg( X SSWAP - zmin wektorów zwierjąyh lizy rzezywiste pojedynzej preyzji T x y T ) ACML (AMD) AMD Core Mth Lirry http://developer.md.om/tools/pu-development/md-ore-mthlirry-ml/ ATLAS (open soure) Automtilly Tuned Liner Alger Softwre http://mth-tls.soureforge.net/ Rok kdemiki 2012/2013, Wykłd nr 7 63/66 Rok kdemiki 2012/2013, Wykłd nr 7 64/66 GPGPU i CUDA CUDA - Jk używć? GPGPU - Generl Purpose omputing on Grphis Proessing Units CUDA (Compute Unified Devie Arhiteture) hrdwre - równoległ rhitektur olizeniow GPU softwre - kompiltor nv, ilioteki i inne nrrzędzi NVIDIA Corportion (USA) Pierwsz wersj: luty 2007 Stron WWW: http://www.nvidi.pl/ojet/ud_home_new_pl.html Lienj: freewre Sprwdzić zy krt grfizn w komputerze osługuje CUDA wszystkie nowe krty grfizne NVIDIA są komptyilne z CUDA Śiągnąć oprogrmow CUDA The CUDA Driver - zintegrowny ze sterownikiem krty grfiznej The CUDA Toolkit - zwier nrzędzi potrzene do kompilowni plikji z wykorzystm Mirosoft Visul Studio (nrzędzi, ilioteki, pliki ngłówkowe, inne zsoy) The GPU Computing SDK - przykłdowe progrmy Zinstlowć CUDA driver (jeśli jest to kozne) Zinstlowć oprogrmow CUDA - Toolkit, SDK Użyć szlonu (templte projet) do stworzeni włsnego progrmu wykorzystująego CUDA

Rok kdemiki 2012/2013, Wykłd nr 7 65/66 Rok kdemiki 2012/2013, Wykłd nr 7 66/66 CUBLAS Ko wykłdu nr 7 Biliotek CUBLAS - implementj BLAS (Bsi Liner Alger Suprogrms) dl krt grfiznyh NVIDIA i środowisk CUDA Zstosow CUBLAS w progrmie wymg: inijlizji ilioteki CUBLAS: ulsinit() przydzieleni pmięi GPU n mierze i wektory: ulsallo() przesłni mierzy i wektorów do pmięi GPU: ulssetmtrix() wywołni odpowiednih funkji CUBLAS: ulssgemm() przesłni wyników olizeń z pmięi GPU do pmięi RAM komputer: ulsgetmtrix() zwolni pmięi GPU: ulsfree() zkońzeni pry ilioteki CUBLAS: ulsshutdown() Dziękuję z uwgę!