Algorytmy i Struktury Danych. - wozna.orgwozna.org/students/2018-2019/asd/asd01.pdf · struktur...

64
Algorytmy i Struktury Danych. Tre ´ sci programowe. Analiza algorytmu. dr hab. Bo˙ zena Wo´ zna-Szcze´ sniak, prof UJD [email protected] Jan Dlugosz University, Poland Wyklad 1 Bo˙ zena Wo´ zna-Szcze´ sniak (AJD) Algorytmy i Struktury Danych. Wyklad 1 1 / 64

Transcript of Algorytmy i Struktury Danych. - wozna.orgwozna.org/students/2018-2019/asd/asd01.pdf · struktur...

Algorytmy i Struktury Danych.Tresci programowe. Analiza algorytmu.

dr hab. Bozena Wozna-Szczesniak, prof [email protected]

Jan Długosz University, Poland

Wykład 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 1 / 64

Cel wykładów I

Zapoznanie studentów z:podstawowymi technikami projektowania algorytmów:

rekurencja,metoda zachłanna,metoda dziel i rzadz,programowanie dynamiczne.

podstawowymi algorytmami sortujacymi:sortowanie przez porównanie (sortowanie szybkie, sortowanieprzez scalanie, sortowanie przez wybieranie, sortowanie przezwstawianie, sortowanie babelkowe),sortowanie przez kopcowanie,sortowanie pozycyjne.

liniowymi abstrakcyjnymi strukturami danych wraz z ichzastosowaniem: stos, kolejka, lista.drzewami poszukiwan binarnych.drzewami czerwono-czarnymi.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 2 / 64

Cel wykładów II

kopcami: dodawanie i usuwanie elementu z kopca, sortowanieprzez kopcowanie, algorytm R.Floyda przekształcania tablicy wkopiec.

wybranymi algorytmi tekstowymi.

podstawami analizy algorytmów – dobór własciwego algorytmu istruktury danych jest podstawa sukcesu przy rozwiazywaniuzadanego problemu.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 3 / 64

Literatura I

Ksiazki:

Cormen T.H., Leiserson Ch.E., Rivest R.L. Wprowadzenie doalgorytmów. WNT, 1997 i pózniejsze.

Materiały on-line w j. angielskim:

Erik Demaine, and Srinivas Devadas. 6.006 Introduction toAlgorithms, Fall 2011. (Massachusetts Institute of Technology:MIT OpenCourseWare), http://ocw.mit.edu (Accessed 20 Feb,2016). License: Creative Commons BY-NC-SA.

https://class.coursera.org/algs4partI-010/ - czescwykładu wykorzystuje materiał zawarty w tym kursie.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 4 / 64

Dlaczego warto poznac algorytmy?

Wpływ algorytmów jest szeroki, wielokierunkowy i dalekosiezny.

Internet - wyszukiwanie w sieci, routing pakietów, rozproszoneudostepnianie plików, ...Komputery - systemy operacyjne, systemy plików, kompilatory,arytmetyka, ...Grafika komputerowa - filmy, gry wideo, wirtualnarzeczywistosc,...Multimedia - pliki multimedialne zawierajace tekst, obrazy, audio,wideo i animacje, np. MP3, JPG, DivX, ...Bezpieczenstwo - telefony komórkowe, e-handel, maszyny dogłosowania, bankowosc elektroniczna, ...Bioinformatyka - metody obliczeniowe słuzace do badaniastruktury, funkcji i ewolucji genów, genomów i białek, ...Portale społecznosciowe - Facebook, Twitter, LinkedIn,Pinterest, Instagram, ...

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 5 / 64

Dlaczego warto poznac algorytmy? I

Stare korzenie, ale nowe mozliwosci

Badaniem algorytmów zajmował sie juz Euklides z Aleksandrii -algorytm wyznaczania najwiekszego wspólnego dzielnika (NWD)dla dwóch liczb.

Rysunek: Euklides (ur. ok. 365 r. p.n.e., zm. ok. 300 r. p.n.e.). Zródło:https://pl.wikipedia.org/wiki/Euklides

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 6 / 64

Dlaczego warto poznac algorytmy? II

NWD mozna zostosowac do generowania rytmów muzycznych;Godfried Toussaint: The Euclidean Algorithm Generates TraditionalMusical Rhythms. Proceedings of BRIDGES: MathematicalConnections in Art, Music, and Science. 2005, pp. 47-56NWD stosowany jest w algorytmie RSA - RSA to obecnienajpopularniejszy asymetryczny algorytm kryptograficzny zkluczem publicznym; zaprojektowany w 1977 przez Rona Rivesta,Adi Szamira oraz Leonarda Adlemana.

Pojecie algorytmu zostało sformalizowane na poczatku lat 30. XXwieku, niezaleznie, przez Alana Turinga (maszyna Turinga) iAlonzo Church (rachunek lambda).Wiekszosc znanych algorytmów została odkryta w przezstudentów takich jak ty !

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 7 / 64

Dlaczego warto poznac algorytmy? III

Serwis społecznosciowy Nasza klasa (http://nk.pl/),utworzony przez studentów Instytutu Informatyki UniwersytetuWrocławskiego. Maciej Popowicz, główny pomysłodawca Naszejklasy, napisał prace magisterska, której przedmiotem był własnieten serwis.

Rysunek: Zródło:http://i.wp.pl/a/f/jpeg/28213/nk-logo-660.jpeg

Wiele algorytmów czeka na odkrycie przez studentów jak ty !

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 8 / 64

Dlaczego warto poznac algorytmy? I

Aby rozwiazac problemy, które inaczej nie mogłyby zostac rozwiazane.

Problem komiwojazera (ang. Travelling Salesman Problem -TSP):

Dany jest zbiór miejscowosci oraz odległosci miedzynimi. Znalezc droge zamknieta, która ma najkrótszadługosc oraz przechodzi przez kazda miejscowoscdokładnie jeden raz.

Przykład TSP: wyznaczyc najkrótsza trase pozwalajaca nazwiedzenie wszystkich stolic województw (stanów - w StanachZjednoczonych, itp.). Turysta ladujacy na lotnisku Chopina wWarszawie zwiedza Warszawe, a nastepnie wyjezdza ze stolicy ichce odwiedzic (zwiedzic) stolice kazdego województwa dokładniejeden raz i wrócic do Warszawy (miasta, z którego wyruszył).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 9 / 64

Dlaczego warto poznac algorytmy? II

Oto jedna z mozliwych tras. Czy jest ona najkrótsza ?.

Rysunek: Zródło mapy: www.gis-support.pl

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 10 / 64

Dlaczego warto poznac algorytmy? III

Biuro podrózy organizujace wycieczke turysty, aby maksymalnieobnizyc koszty podrózy, postanowiło znalezc najkrótsza trase. Wtym celu zdecydowano sie na wygenerowanie wszystkiemozliwych tras.... ale, ile ich jest ? -:)To łatwo policzyc.

Z Warszawy mozna pojechac do jednego z 15 miast wojewódzkich.Bedac w pierwszym wybranym miescie, mozna pojechac dojednego z 14 miast.Po wybraniu drugiego miasta na trasie, kolejne miasto moznawybrac sposród 13 miast i tak dalej.Po zaliczeniu ostatniego miasto wracamy do Warszawy.A zatem wszystkich mozliwych wyborów jest: 15 · 14 · 13 · . . . · 2 · 1,czyli 15! („15 silnia”).

Ogólnie:n! = n · (n − 1) · (n − 2) · . . . · 2 · 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 11 / 64

Dlaczego warto poznac algorytmy? IV

Uwaga: Wartosci funkcji silnia dla kolejnych n rosna bardzoszybko:

n n!1 15 120

10 3 628 80015 1 307 674 368 000=1,307674368·1012

50 3 041 409 320 ·1064

Z powyzszej tabeli wynika, ze posługujac sie komputerem, którypotrafi wykonac 109 operacji na sekunde, oraz metoda opisanapowyzej, znalezienie najkrótszej trasy dla turysty zajełoby około21 min.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 12 / 64

Dlaczego warto poznac algorytmy? V

Titan1- superkomputer o mocy obliczeniowej 17,59 PFLOPS (i.e.,petaflops = 1015 FLOPS) wyprodukowany przez Cray Inc. iuruchomiony w pazdzierniku 2012 w Oak Ridge NationalLaboratory w USA - znalazłby najkrótsza trasy dla turysty wniespełna 0,000074342 sekund.W olbrzymim kłopocie znajdzie sie jednak biuro podrózy, którezechce taka metoda zaplanowac dla swoich turystów najkrótszatrase objazdu po stolicach wszystkich stanów w StanachZjednoczonych (jest ich 50). Oto ile musiałoby czekac narozwiazanie: 1,729055895·1048 sec. = 2,881759826·1046 min. =4,802933043·1044 godz.= 2,001222101·1043 dni =5,558950281·1040 lat.Problemy TSP ciagle ”czeka” na lepszy algorytm, który gorozwiaze !

1https://pl.wikipedia.org/wiki/Titan_(superkomputer)Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 13 / 64

Dlaczego warto poznac algorytmy ? I

Aby zostac profesjonalnym programista

Niklaus WirthAlgorytmy + Struktury danych = Programy

Linus Torvalds - twórca LinuxaI will, in fact, claim that the difference between a badprogrammer and a good one is whether he considers hiscode or his data structures more important. Badprogrammers worry about the code. Good programmersworry about data structures and their relationships.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 14 / 64

Dlaczego warto poznac algorytmy ? II

Kernighan & PikeEvery program depends onalgorithms and data structures,but few programs depend on theinvention of brand new ones.

Kazdy program zalezy od algorytmów istruktur danych, ale niewiele programówzalezy od opracowania zupełnie nowychalgorytmów.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 15 / 64

Dlaczego warto poznac algorytmy ?

Dla stymulacji intelektualnej

Donald Knuth - twórca TEX-aAn algorithm must be seen to be believed.

Avi Wigderson - Profesor w School of Mathematics, Institute forAdvanced Study, Princeton

Algorithms: a common language for nature, human, andcomputer.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 16 / 64

Dlaczego warto poznac algorytmy ?

Dla zabawy i zysku

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 17 / 64

Dlaczego warto poznac algorytmy ?

Wpływ algorytmów jest szeroki, wielokierunkowy i dalekosiezny.Stare korzenie, ale nowe mozliwosci.Aby rozwiazac problemy, które inaczej nie mogłyby zostacrozwiazane.Aby zostac profesjonalnym programista.Dla stymulacji intelektualnej.Dla zabawy i zysku.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 18 / 64

Analiza algorytmów

WprowadzenieNaukowe metody analizy algorytmówModel matematycznyKlasyfikacja algorytmów

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 19 / 64

Czas wykonania

Charles Babbage (1864)As soon as an Analytic Engine exists, it will necessarily guide thefuture course of the science. Whenever any result is sought by itsaid, the question will arise - By what course of calculation can theseresults be arrived at by the machine in the shortest time?

Rysunek: Współczesna reprodukcja Maszyny analitycznej (ang. analyticalengine) - urzadzenie zaprojektowane przez Charlesa Babbage’a, któreuznaje sie za pierwszy programowalny komputer ogólnego zastosowania.Fotografia Rob Huddleston.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 20 / 64

Dlaczego powinnismy analizowac algorytmy ?

Aby przewidziec ich wydajnosc:potrzebny czas do zakonczenia działania.ilosc zuzywanej pamieci.

Aby wiedziec jak je porównac:który algorytm realizujacy to samo zadanie jest bardziejefektywny ?który jest szybszy ?który zuzywa mniej pamieci ?

Aby udzielic gwarancji poprawnosci:byc pewnym, ze zawsze sie zakonczy.byc pewnym, ze dla prawidłowych danych zwróci poprawny wynik.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 21 / 64

Dlaczego powinnismy analizowac algorytmy ?

Praktyczny powód:Aby unikac błedów wykonania !!!

Zródło:

http://www.fotosearch.com/clip-

art/boss.html

Klient dostaje produkt osłabej wydajnosci, poniewazprogramista nie zrozumiałwłasciwie charakterystykiproblemu.

Zródło:

http://www6.dozdrapebi.tk/wall/

clip-art-computer-

programer/

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 22 / 64

Wyzwanie

Pytanie: Czy mój program bedzie w stanie rozwiazac zadany problemdla duzej ilosci danych wejsciowych, które spotykane sa w praktyce?

Dlaczego za-brakło mu pa-mieci?

Dlaczego mójprogram działatak wolno?

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 23 / 64

Naukowe sposoby stosowane do analizy algorytmów I

Metoda naukowa:Obserwacja pewnych własnosci swiata naturalnego - w przypadkualgorytmów (ich implementacji) bedzie to, np., czas pracy naszegoprogramu na komputerze.Opracowanie hipotezy (modelu), który jest zgodny zobserwacjami.Przewidywanie zdarzen za pomoca opracowanej hipotezy - mamynadzieje, ze opracowana przez nas hipoteza jest na tyle dobra, zepozwoli nam przewidziec, np., czas pracy naszego programu dladanych wejsciowych o duzych rozmiarach, lub czas pracynaszego programu na innym komputerze.Weryfikacja przewidywanych zdarzen poprzez dalsze obserwacje.Walidacja poprzez powtarzanie weryfikacji, az do momentu, kiedyhipotezy i obserwacje sa zgodne.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 24 / 64

Naukowe sposoby stosowane do analizy algorytmów II

ZasadyEksperymenty musza byc powtarzalne - jesli prowadzimyeksperymenty, powinnismy zakładac, ze ktos inny powinien byc wstanie przeprowadzic te eksperymenty i uzyskac ten sam rezultat.Hipoteza musi byc falsyfikowalna - mozna wykazac fałszywoschipotezy poprzez wskazanie przypadku, który jej niespełnia/popiera.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 25 / 64

Analiza algorytmów

WprowadzenieNaukowe metody analizy algorytmówModel matematycznyKlasyfikacja algorytmów

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 26 / 64

Przykład - problem 3SUM

3SUMDane jest zbiór (tablica) złozony z N liczb całkowitych. Problem 3SUMpyta, czy istnieja elementy a, b i c z tego zbioru, takie ze a + b + c = 0,a jesli tak to ile ich jest?

Podaj rozmiar tablicy: 8Tablica po wypełnieniupseudolosowymi wrtosciami:

38 18 -29 26-6 16 13 -9

Wynik: 2

a b c suma1: 38 -29 -9 02: -29 16 13 0

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 27 / 64

3Sum - algorytm typu Brut-force; Java

public class 3Sum {public static int count(int[] a) {int count = 0;for (int i = 0; i < a.length; i++) {for (int j = i+1; j < a.length; j++) {for (int k = j+1; k < a.length; k++) {if (a[i] + a[j] + a[k] == 0) { count++; }

}}}

return count;}public static void main(String[] args) {...}

}

Sprawdzamykazda trójke

Testujemy czysuma trzechwartosci jestrówna 0.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 28 / 64

3SUM - algorytm typu Brut-force; c/c++

int count(int a[], int N){int count = 0;for (int i = 0; i < N; i++)for (int j = i+1; j < N; j++)for (int k = j+1; k < N; k++)

if (a[i] + a[j] + a[k] == 0)count++;

return count;}

Sprawdzamykazda trójke

Testujemy czysuma trzechwartosci jestrówna 0.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 29 / 64

Pomiar czasu pracy programu

Pytanie: Jak zmierzyc czas działania naszego programu ?Odpowiedz: Mozna recznie - przykładowo uruchamiamy stoper imierzymy czas działania naszego programu :)

12

3

6

9

1110

12

457

8

tik, tik, tik, . . .

$ ./3summRozmiar danych: 250Czas w sec.: 0$ ./3summRozmiar danych: 1000Czas w sec.: 0$ ./3summRozmiar danych: 2000Czas w sec.:5$ ./3summRozmiar danych: 4000Czas w sec.: 46$ ./3summRozmiar danych : 8000Czas w sec.: ?

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 30 / 64

Pomiar czasu pracy programu - jezyk C

Pytanie: Jak zmierzyc czas działania naszego programu ?Odpowiedz: Automatycznie

Biblioteka: time.hZawiera, m.in., funkcje clock(), typ clock_t i stałaCLOCKS_PER_SEC.Funkcja clock() zwraca czas systemowy, który upłyna od chwiliuruchomienia programu. Uwaga !

clock() niekoniecznie musi zwracac czas w sekundach.Wartosc funkcji moze byc albo typu long albo unsigned long,albo jeszcze innym.Rozwiazaniem powyzszych problemów jest stałaCLOCKS_PER_SEC, której wartoscia jest liczba systemowychjednostek czasu na sekunde.

Dzielac czas systemowy przez CLOCKS_PER_SEC, otrzymujemyliczbe sekund.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 31 / 64

3Sum. Pomiar czasu pracy programu - jezyk C

int main(void){printf("Podaj rozmiar tablicy: ");int n; scanf("%d",&n);int *a = calloc(n, sizeof(int));fillArr(a, n, 40); showArr(a, n);clock_t start = clock();int wynik = count (a, n);clock_t koniec = clock();printAll3(a,n);double czas_w_sek =((double)(koniec-start))/

CLOCKS_PER_SEC;printf("Rozmiar danych wejsciowych: %d \n", n);printf("Wynik: %d \n", wynik) ;printf("Czas w sec.: %f \n", czas_w_sek);free(a);return 0;

}Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 32 / 64

C - Generowanie losowych danych

#include <time.h>#include <stdlib.h>

void fillArr(int a[], int n, int Value){

srand(time(0));for (int k = 0; k < n; ++k){a[k] = rand()% Value - Value/2;}

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 33 / 64

Pomiar czasu pracy programu - jezyk Java

Klasa Stopwatch

Do pobrania z https://introcs.cs.princeton.edu/java/stdlib/Stopwatch.java.Klasa public class Stopwatch jest czescia bibliotekistdlib.jar i zawiera:

konstruktor Stopwatch() – tworzy nowy obiekt typu stopwatch.metode public double elapsedTime() – zwraca czasprocesora (w sekundach) jaki upłyna od utworzenia stopera.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 34 / 64

3Sum. Pomiar czasu pracy programu - jezyk Java

import java.util.Scanner;...public static void main(String[] args) {

Scanner in = new Scanner(System.in);System.out.println("Podaj rozmiar tablicy");int n = in.nextInt();int[] a = new int[n];generate (a,50); printTab (a);Stopwatch stopwatch = new Stopwatch();int count = count(a);double time = stopwatch.elapsedTime();System.out.println("elapsed time = " + time);System.out.println(count);printAll(a);

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 35 / 64

Java - Generowanie losowych danych

import java.util.Arrays;import java.util.Random;

public static void generate(int[] tab, int max) {Random r = new Random();for (int j = 0; j < tab.length; ++j) {

tab[j] = r.nextInt(max)-max/2;}

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 36 / 64

Analiza doswiadczalna

Uruchom program dla danych wejsciowych o róznych rozmiarach izmierz czas jego pracy.

Rozmiar danych Czas w sec.500 0

1000 0.3642000 2.2754000 17.6498000 140.567

16000 ?

Komputer na którym wykonano eksperymenty:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

System operacyjny: Debian 4.9.144-3.1

Pytanie: W jaki sposób czas wykonania programu rosnie jako funkcjarozmiaru danych wejsciowych N?

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 37 / 64

Analiza danych

0

100

200

300

400

500

600

1K 2K 3K 4K 5K 6K 7K 8K

Cza

s p

racy

T(N

) w

se

kun

da

ch

Rozmiar danych wejściowych N

Zależność czasu pracy algorytmu od rozmiaru danych wejściowych

Dane experymentalnef(n) = n3

3SumPoniewaz nasz program implementujacy problem 3SUM wykorzystujepotrójnie zagniezdzenie, to przypuszczamy, ze czas jego wykonaniajest proporcjonalny do funkcji szesciennej N3, gdzie N jest liczbacałkowita odpowiadajaca za rozmiar danych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 38 / 64

Analiza danych

Aproksymacja i fitowanie - czyli jak przyblizyc uzyskane dane dojakiejs znanej i ’prostej’ funkcji

Mozna w tym celu wykorzystac swoja wiedze ze statystyki.Mozna równiez wykorzystac GNUplota.

GNUplotZa aproksymacje danych do zadanej funkcji słuzy polecenie fit,które ma nastepujaca składnie:fit równanie_funkcji "adres_pliku_z_danymi"

via parametry_funkcji;

Poniewaz nasz program implementujacy program 3SUMwykorzystuje potrójnie zagniezdzenie, to przypuszczamy, ze czasjego wykonania jest proporcjonalny do funkcji szesciennej N3,gdzie N jest liczba całkowita odpowiadajaca za rozmiar danych.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 39 / 64

Analiza danych

Aproksymacja i fitowanie - czyli jak przyblizyc uzyskane dane dojakiejs funkcji. cd.

Próbujemy zatem przyblizyc nasze dane do funkcji szesciennejfit a*x**3+b "plik-z-danymi" via a,b;

oraz narysowac te dane razem z wyliczona aproksymacjaplot "plik_z_danymi" title "Dane doswiadczalne",a*x**3+b title "Funkcji aproksymujaca"GNUplot wyznaczył nastepujace parametry:Final set of parameters Asymptotic Standard Error======================= ==========================a = 0.274538 +/- 0.0001997 (0.07275%)b = 0.0745526 +/- 0.04721 (63.32%)

oraz narysował te dane razem z wyliczona aproksymacja - zobacznastepny slajd.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 40 / 64

Analiza danych

Standardowy wykres wraz z wyliczona aproksymacja.

0

20

40

60

80

100

120

140

160

1K 2K 3K 4K 5K 6K 7K 8K

Cza

s p

racy

T(N

) w

se

kun

da

ch

Rozmiar danych wejściowych N

Zależność czasu pracy algorytmu od rozmiaru danych wejściowych

Dane experymentalneFunkcja aproksymująca

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 41 / 64

Hipoteza, Przewidywanie, Weryfikacja i Walidacja

Hipoteza. Czas pracy naszego programu to:

T (N) = 0.274538 · (N/1000)3 + 0.0745526

Przewidywanie.140.64 sekund dla N = 80001124.58 sekund dla N = 16000

Weryfikacja.N Czas w sec.

8000 140.56716000 1128.049

Dane potwierdzaja hipoteze !

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 42 / 64

Analiza danych

Prawo potegowe (ang. power law)Zaleznosc pomiedzy dwiema wielkosciami empirycznymi, która moznaopisac jako nastepujaca funkcja:

T (N) = a · Nb .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 43 / 64

Analiza danych - Hipoteza podwojenia (ang. DoublingHypothesis) I

Szybki sposób, aby oszacowac współczynnik b dla prawapotegowego: T (N) = a · Nb.Aby oszacowac czas pracy programu dla duzego zbioru danych,zadajemy pytanie: "Jaki wpływ na czas pracy programu mapodwojenie wielkosci zestawu danych? - przygotowujemy tabele,która zawiera 4 kolumny: rozmiar danych (N), czas pracyprogramu (T (N) w sek.), stosunek T (2N)/T (N) oraz wartosclog2(T (2N)/T (N)).Rozmiar zbioru danych waha sie, np., od 256 do 16384elementów, podwajajac za kazdym razem (stad nazwa"podwojona hipoteza").Uruchamiamy program dla kazdego wybranego przez naspodwojonego zbioru danych i mierzymy czas wykonania.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 44 / 64

Analiza danych - Hipoteza podwojenia (ang. DoublingHypothesis) II

Obliczamy stosunek T (2N)/T (N).Obliczamy wartosc log2(T (2N)/T (N)); uzywajac kalkulatoranaukowego do obliczenia wartosci logarytmu o podstawie 2wykorzystujemy logarytm naturalny (i.e.,log2(T (2N)/T (N)) = ln(T (2N)/T (N))/ln(2) lub logarytmdziesietny log2(T (2N)/T (N)) = log(T (2N)/T (N))/log(10).Tabela dla problemu 3SUM:

N T(N) w sek. B = T (2N)/T (N) log2(B)

512 0.083 - -1024 0.381 0.381/0.083 = 4.59036 2,192048 2.437 2.437/0.381 = 6.396325 2,674096 18.9 18.9/2.437 = 7.755437 2,968192 151.437 151.437/18.9 = 8.012539 3,002

16384 1228.049 1228.049/151.437= 8.109306 3,01Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 45 / 64

Analiza danych - Hipoteza podwojenia (ang. DoublingHypothesis) III

Zauwazamy, ze stosunek T (2N)/T (N) jest zbiezny do wartosci 8,a wartosc log2 jest zbiezna do wartosci 3.Hipoteza. Czas pracy naszego programu spełnia prawo potegowe:T (N) = a · Nb dla b = 3, tj.

T (N) = a · N3

Wartosc stałej a mozna znalezc rozwiazujac równanie dlawybranego rozmiaru danych, np.: a · 40963 = 18.9a = 18.9/40963 = 18.9/68719476736 =2.750311978161335e − 10.Przewidywanie.

151.2 sekund dla N = 81921209.6 sekund dla N = 163849676.8 sekund dla N = 32768

Dane eksperymentalne potwierdzaja powyzsza hipoteze.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 46 / 64

Algorytmika eksperymentalna - uwagi

Czynniki niezalezne od systemu w testowaniu programuAlgorytmDane wejsciowe.

Czynniki zalezne od systemu w testowaniu programuSprzet: procesor, pamiec cache, ...Oprogramowanie: kompilator, interpreter, ...System: system operacyjny, siec, inne aplikacje, ...

Zła wiadomosc. Trudno uzyskac dokładne pomiary.Dobre wiesci. Znacznie łatwiej i taniej niz w innych naukachdoswiadczalnych - potrzebujemy tylko komputer, czas i dobre checi :)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 47 / 64

Analiza algorytmów

WprowadzenieNaukowe metody analizy algorytmówModel matematycznyKlasyfikacja algorytmów

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 48 / 64

Analiza doswiadczalna a model matematyczny

Analiza doswiadczalna algorytmu jest sposobem na przewidzeniejego wydajnosci, ale nie pomaga w zrozumieniu jego działania.W zrozumieniu działania algorytmu pomocny jest modelmatematyczny czasu pracy algorytmu.Model matematyczny daje nam podstawy do zrozumieniazłozonosci obliczeniowej algorytmu.Złozonosc obliczeniowa algorytmu to koszt jego realizacji, czyliilosc zasobów komputera niezbednych do jego wykonania.W zaleznosci od rozwazanego zasobu złozonosc dzielimy nazłozonosc czasowa oraz złozonosc pamieciowa.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 49 / 64

Matematyczny model czasu pracy algorytmu

Koncepcja modelumatematycznego zostałaopracowana ispopularyzowana przezDonalda Knutha w póznychlatach 60 ubiegłego stulecia.Sztuka programowania (TheArt of Computer Programming)- przełomowa monografiaautorstwa Donalda Knuthadotyczaca analizy algorytmów;pierwszy tom wydano w 1968r.

Rysunek: Donald Ervin Knuth (10stycznia 1938 -). Laureat nagrody Turinga1974. Zródło zdjecia:http://amturing.acm.org/

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 50 / 64

Matematyczny model czasu pracy algorytmu

Całkowity czas pracy algorytmu (programu) to suma powszystkich operacjach (instrukcjach) wystepujacych w algorytmiewartosci: koszt operacji × czestotliwosc wystepowania operacji.Aby policzyc całkowity czas pracy algorytmu, nalezy:

przeanalizowac program w celu okreslenia zestawu operacji.pamietac, ze koszt operacji zalezy, m.in., od komputera, systemuoperacyjnego i kompilatora.pamietac, ze czestotliwosc wystapienia operacji zalezy zarówno odalgorytmu jak i danych wejsciowych.

Dzieki Donaldowi Knuthowi wiemy, ze mozna uzyskac dokładnemodele matematyczne wykonywania danego algorytmu(programu) oraz operacji.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 51 / 64

Koszt wykonania podstawowych operacji

Na poczatku rozwoju komputerów kazdy komputer byłdostarczany z instrukcja (podrecznikiem) zawierajaca dokładnyczas wykonania kazdej operacji - teraz juz tak nie jest.Obecnie, aby poznac koszt wykonania danej operacji mozna, np.,wykonac bilon eksperymentów i oszacowac te wielkosc, np. ze:dodawanie dwóch liczb całkowitych zajmuje 2 nanosekundy, amnozenie dwóch liczb rzeczywistych zajmuje 4 nanosekundy.Praktycznie jednak zakłada sie, ze operacje (np.,dodawanie,odejmowanie, mnozenie, dzielenie, przypisanie, porównanie,deklaracja zmiennej, dostep do elementu tablicy ) wykonywane nastandardowych (wbudowanych) typach danych zajmuja pewienstały (bardzo nieduzy) czas wykonania2.

2Nalezy pamietac, ze niektóre operacje, np. deklaracja tablicy o rozmiarze N wJavie, zajmuje czas proporcjonalny do N z uwagi na to, ze kazdy jej elementdomyslnie inicjalizowany jest zerem.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 52 / 64

Czestosc wystepowania operacji - przykład

Pytanie: Ile jest instrukcji w zaleznosci od rozmiaru danychwejsciowych n ?

int count = 0;for (int i = 0; i < n; i++)

if (a[i] == 0)count++;

Operacja liczbawystapien

deklaracja zmiennych 2przypisanie 2

porównanie == nporównanie < n+1

dostep do tablicy ninkrementacja i n

inkrementacja count ≤ n

Czestosc wysta-pienia zalezna odwielkosci danychwejsciowych

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 53 / 64

Czestosc wystepowania operacji - problem 2SUM

Pytanie: Ile jest instrukcji w zaleznosci od rozmiaru danychwejsciowych n ?

int count = 0;for (int i = 0; i < n; i++)

for (int j = i+1; j < n; j++)if (a[i] + a[j] == 0) count++;

Operacja liczbawystapien

deklaracja zmiennych n+2przypisanie n+2

porównanie == 12 · (n − 1) · n

porównanie < 12 · (n + 1) · (n + 2)

dostep do tablicy n · (n − 1)inkrementacja od 1

2 · n · (n − 1) do n · (n − 1)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 54 / 64

Czestosc wystepowania operacji - przykład

Pytanie Dlaczego mamy 12 · (n − 1) · n operacji == ?

Odp. Zauwazmy, ze:

Wartosci i Wartosci j Liczba operacjii = 0 1,2,3. . .,n-1 n-1i = 1 2,3. . .,n-1 n-2i = 2 3,. . .,n-1 n-3. . . . . . . . .

i = n-2 n-1 1i = n-1 - 0

Sumujac liczbe operacji: (n − 1) + (n − 2) + (n − 3) + . . .+ 1 + 0Otrzymujemy: 1

2 · (n − 1) · n

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 55 / 64

Czestosc wystepowania operacji - przykład

Pytanie Dlaczego mamy 12 · (n + 1) · (n + 2) operacji < ?

Odp. Zauwazmy, ze:

Wartosci i Wartosci j Liczba operacjiporównania dla j i 1 dla i

i = 0 1,2,3. . .,n n+1i = 1 2,3. . .,n ni = 2 3,. . .,n n-1. . . . . . . . .

i = n-2 n-1,n 3i = n-1 n 2i = n - 1

Sumujac liczbe operacji: (n + 1) + n + (n − 1) + . . .+ 1 + 0Otrzymujemy: 1

2 · (n + 1) · (n + 2)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 56 / 64

Czestosc wystepowania operacji - przykład

Pytanie Dlaczego mamy (n − 1) · n operacji dostepu do tablicy ?Odp. Zauwazmy, ze:

Wartosci i Wartosci j Liczba dostepudo tablicy i

i = 0 1,2,3. . .,n-1 2 · (n − 1)i = 1 2,3. . .,n-1 2 · (n − 2)i = 2 3,. . .,n 2 · (n − 3). . . . . . . . .

i = n-2 n-1 2i = n-1 -

Sumujac liczbe operacji: 2 · ((n − 1) + (n − 2) + (n − 3) + . . .+ 1)Otrzymujemy: (n − 1) · n

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 57 / 64

Uproszczenie liczenia czestosci wystepowaniaoperacji

Juz Alan Turing w 1947 roku wiedział, ze liczenie wszystkichoperacji majacych wpływ na czas pracy algorytmu moze byczmudne i niekoniecznie potrzebne.

"It is convenient to have a measure of the amount of work involved in a computingprocess, even though it be a very crude one. We may count up the number of timesthat various elementary operations are applied in the whole process and then giventhem various weights. We might, for instance, count the number of additions,subtractions, multiplications, divisions, recording of numbers, and extractions offigures from tables. In the case of computing with matrices most of the work consistsof multiplications and writing down numbers, and we shall therefore only attempt tocount the number of multiplications and recordings."

Alan Turing (1947); ROUNDING-OFF ERRORS IN MATRIXPROCESSES. National Physical Laboratory, Teddington, Middlesex.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 58 / 64

Uproszczenie liczenia czestosci wystepowaniaoperacji

Pierwsze uproszczenie: wybór operacji dominujacej(elementarnej).Operacja elementarna moze byc na przykład: przypisanie,porównanie, działanie arytmetyczne lub dostep do tablicy.Zazwyczaj jako operacje dominujaca wybiera sie te, która kosztujenajwiecej i ma najwieksza czestotliwosc wystepowania.

int count = 0;for (int i = 0; i < n; i++)

for (int j = i+1; j < n; j++)if (a[i] + a[j] == 0) count++;

Operacja liczbadominujaca wystapien

dostep do tablicy n · (n − 1)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 59 / 64

Uproszczenie liczenia czestosci wystepowaniaoperacji

Drugie uproszczenie - notacja ∼:szacujemy czas działania jako funkcje, która przyjmuje danewejsciowe o rozmiarze nignorujemy składowe o mniejszej waznosci w formułachreprezentujacych czestotliwosc wystepowania danej operacji.

gdy n jest duze, składowe te sa nieistotne,gdy n jest małe, nie bierzemy ich pod uwage

Przykłady

P1 16n3 + 20n + 16 ∼ 1

6n3

P2 16n3 + 100n + 46 ∼ 1

6n3

P3 16n3 + 1

2n2 + n + 16 ∼ 16n3

Formalna definicja notacji ∼f (n) ∼ g(n) definiujemy jako

limn→∞

f (n)g(n)

= 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 60 / 64

Uproszczenie liczenia czestosci wystepowaniaoperacji - notacja ∼

Operacja liczba notacja ∼wystapien

deklaracja zmiennych n+2 ∼ nprzypisanie n+2 ∼ n

porównanie == 12 · (n − 1) · n ∼ 1

2 · n2

porównanie < 12 · (n + 1) · (n + 2) ∼ 1

2 · n2

dostep do tablicy n · (n − 1) ∼ n2

inkrementacja od 12 · n · (n − 1) od ∼ 1

2 · n2

do n · (n − 1) do ∼ n2

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 61 / 64

Problem 2SUM

Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacejoperacje dominujaca dostep do tablicy, która przyjmuje danewejsciowe o rozmiarze n ?

int count = 0;for (int i = 0; i < n; i++)

for (int j = i+1; j < n; j++)if (a[i] + a[j] == 0) count++;

Odpowiedz: ∼ n2.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 62 / 64

Problem 2SUM

Pytanie: Jakie jest asymptotyczne tempo wzrostu funkcji zliczajacejoperacje dominujaca dostep do tablicy, która przyjmuje danewejsciowe o rozmiarze n ?

int count = 0;for (int i = 0; i < n; i++)

for (int j = i+1; j < n; j++)for (int k = j+1; k < n; k++)if (a[i] + a[j] + a[k] == 0) count++;

Dokładna liczba operacji dominujacej dostep do tablicy jest postaci:

n · (n − 1) · (n − 2)6

=

(n3

)Odpowiedz: ∼ 1

6n3.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 63 / 64

Oszacowania dla sum dyskretnych

Pytanie: Jak oszacowac sume dyskretna ? Odpowiedz: Pouczyc siematematyki dyskretnej :)!Przykładowe oszacowania czesto spotykanych sum:

1 + 2 + . . .+ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∼ 12n2

1k + 2k + . . .+ nk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∼ 1k+1nk+1

1 + 12 + 1

3 + . . .+ 1n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .∼ ln(n)

2-sum petla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ∼ 12n2

3-sum petla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .∼ 16n3.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 64 / 64