Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały...

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

Transcript of Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały...

Page 1: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Algorytmy i Struktury Danych.Tresci programowe. Analiza algorytmu.

dr hab. Bozena [email protected]

Jan Długosz University, Poland

Wykład 1

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

Page 2: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Cel wykładów I

Zapoznanie z:podstawowymi algorytmami realizujacymi zadanie sortowania:

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

elementarnymi abstrakcyjnymi strukturami danych: stos, kolejka,lista, kolejka priorytetowa.grafami i podstawowymi algorytmami: BFS, DFS, Prim, Kruskal,Dijkstra, minimalne drzewo rozpinajace.drzewami binarnymi i metodami wyszukiwania.kopcami: dodawanie i usuwanie elementu z kopca, sortowanieprzez kopcowanie, algorytm R.Floyda przekształcania tablicy wkopiec.

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

Page 3: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Cel wykładów II

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

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

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

Page 4: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Literatura I

Ksiazki:Cormen T.H., Leiserson Ch.E., Rivest R.L. Wprowadzenie doalgorytmów. WNT, 1997 i pózniejsze.Banachowski L., Diks K., Rytter W. Algorytmy i struktury danych.WNT, 1996.Niklaus Wirth. Algorytmy + struktury danych = programy. WNT,2004 i pózniejsze. Seria: KLASYKA INFORMATYKI.

Materiały on-line:http://zasoby1.open.agh.edu.pl/dydaktyka/informatyka/c_algorytmy_i_str_danych/

http://www.algorytm.org/

http://wazniak.mimuw.edu.pl/index.php?title=Algorytmy_i_struktury_danych

...

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

Page 5: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Literatura II

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 5 / 49

Page 6: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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, Google Plus+, Instagram, ...

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

Page 7: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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

Page 8: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 8 / 49

Page 9: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 9 / 49

Page 10: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 10 / 49

Page 11: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 11 / 49

Page 12: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 12 / 49

Page 13: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 13 / 49

Page 14: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 14 / 49

Page 15: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 15 / 49

Page 16: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 16 / 49

Page 17: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 17 / 49

Page 18: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Dlaczego warto poznac algorytmy ?

Dla zabawy i zysku

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

Page 19: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 19 / 49

Page 20: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza algorytmów

WprowadzenieNaukowe metody analizy algorytmówModel matematycznyKlasyfikacja algorytmów

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

Page 21: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 21 / 49

Page 22: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Dlaczego powinnismy analizowac algorytmy ?

Aby umiec:przewidziec wydajnosc - umiec odpowiedziec na pytania:

kiedy program sie zakonczy ?ile pamieci bedzie potrzebował ?

porównac algorytmy - umiec odpowiedziec na pytania:Jak zrobic, aby program działał szybciej ?Czy wprowadzenie danej zmiany spowoduje, ze program zadziałaszybciej?

udzielac gwarancji poprawnosci - umiec odpowiedziec na pytania:czy program sie zakonczy ?czy dla prawidłowych danych zwróci poprawny wynik ?

je zrozumiec.umozliwic nowe badania naukoweopracowac nowe technologie

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

Page 23: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 23 / 49

Page 24: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 24 / 49

Page 25: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Naukowe sposoby stosowane do analizy algorytmów I

Metody: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 25 / 49

Page 26: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Naukowe sposoby stosowane do analizy algorytmów II

Zasady:

Eksperymenty 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 26 / 49

Page 27: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza algorytmów

WprowadzenieNaukowe metody analizy algorytmówModel matematycznyKlasyfikacja algorytmów

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

Page 28: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Uwaga! Problem głeboko zwiazany z problemami w geometriiobliczeniowej !!!

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

Page 29: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

3SUM - algorytm typu Brut-force (algorytm siłowy)

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

Page 30: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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

Page 31: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Pomiar czasu pracy programu

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

Biblioteka: ctimeZawiera, 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 / 49

Page 32: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

3SUM. Mierzenie czasu wykonania programu.

int main(){

cout << "Podaj rozmiar tablicy: ";int n; cin >> n;fillArr(a, n, 40);cout << "Tablica po wypelnieniu: " << endl;showArr(a, n);clock_t start = clock();int wynik = count (a, n);clock_t koniec = clock();clock_t czas = (koniec-start) / CLOCKS_PER_SEC;cout << "Wynik: " << wynik << endl;cout << "Rozmiar danych wejsciowych: " << n <<

"\nCzas w sec.: " << czas << endl;return 0;

}

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

Page 33: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Pomiar czasu pracy programu - cd.

Biblioteka: chronoDostarcza elastyczny zbiór typów do sledzenia czasu, z róznymstopniem dokładnosci – std::chrono::time_point.Definiuje trzy główne typy:

czas trwania – durations; Czasu trwania to okresu czasudefiniowany jako pewna liczba tików w danej jednostce czasu.zegary – clocks; Zegar składa sie z pewnego punktupoczatkowego (lub epoki) i czestotliwosci zegara. Na przykład,zegar moze miec epoke 1 stycznia 1970 i tykac co kazda sekunde.C++ definiuje trzy rodzaje zegara: system_clock (czasrzeczywisty), steady_clock (zegarmonotoniczny),high_resolution_clock (czas rzeczywisty super dokładny)punkty czasowe – time points; Punkt czasowy to okres czasu,który upłynał od epoki (komputerowej) konkretnego zegara.

oraz funkcje narzedziowe i typedef-y.

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

Page 34: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Pomiar czasu pracy programu - cd.

Klasa std::chrono::system_clock

Klasa reprezentuje "zegar scienny" w czasie rzeczywistym całegosystemu.Podstawowe funkcje składowe:

static std::chrono::time_point<std::chrono::system_clock> now(); (od c++11) – funkcjazwraca punkt czasowy reprezentujacy biezacy punkt w czasie.static std::time_t to_time_t(const time_point& t);(od c++11) – funkcja konwertuje t dotypu std::time_t.static std::chrono::system_clock::time_point from_time_t( std::time_t t ); – funkcjakonwertuje t to typu time_point.

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

Page 35: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Pomiar czasu pracy programu - cd.

Klasa wzorcowa std::chrono::duration

Klasa reprezentuje przedział czasu.Podstawowe funkcje składowe:

constexpr rep count() const; (od c++11) – funkcja zwracaliczbe tików w przedziale czasowym (duartion).Wiecej nahttp://en.cppreference.com/w/cpp/chrono/duration

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

Page 36: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

3SUM. Mierzenie czasu wykonania programu.

#include <chrono >i n t main ( ) {

cout << " Podaj rozmiar t a b l i c y : " ;i n t n ; c in >> n ;f i l l A r r ( a , n , 40) ;cout << " Tab l i ca po wypeln ien iu : " << endl ;showArr ( a , n ) ;s td : : chrono : : t ime_poin t <s td : : chrono : : system_clock > s t a r t ,

end ;s t a r t = s td : : chrono : : system_clock : : now ( ) ;i n t wynik = count ( a , n ) ;end = std : : chrono : : system_clock : : now ( ) ;s td : : chrono : : dura t ion <double> elapsed_seconds = end−s t a r t ;cout << " Wynik : " << wynik << endl ;cout << " Rozmiar danych wejsciowych : " << n <<

" \ nCzas w sec . : " << elapsed_seconds . count ( ) << endl ;return 0;

}

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

Page 37: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

C++ - Generowanie losowych danych

#include <random>

void fillArr(int a[], int n, int Value){// Seed with a real random value, if availablestd::random_device r;// Choose a random mean between -Value and Valuestd::default_random_engine e1(r());std::uniform_int_distribution<int> uniform_dist(-

Value, Value);for (int k = 0; k < n; ++k) {

a[k] = uniform_dist(e1);}

}

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

Page 38: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza doswiadczalna

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

Rozmiar danych Czas w sec.250 0500 0

1000 02000 54000 468000 380

16000 ?

Komputer na którym wykonano eksperymenty:Intel(R) Core(TM) i5 CPU M 540 @ 2.53GHz

System operacyjny: Debian version 8.3

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

Page 39: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza danych

Standardowy wykres2.

0

50

100

150

200

250

300

350

400

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

Cza

s p

racy

T(N

) w

se

ku

nd

ach

Rozmiar danych wejściowych N

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

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

2Mozna go wykonac, przykładowo, przy pomocy narzedzia GNUPLOTBozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 39 / 49

Page 40: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 40 / 49

Page 41: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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.743207 +/- 0.001407 (0.1893%)b = -0.899549 +/- 0.3325 (36.96%)

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

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

Page 42: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza danych

Wykres logarytmiczny. Podstawa logarytmu jest równa 2.

0.015625

0.0625

0.25

1

4

16

64

256

1024

1K 2K 4K 8K

lg(T

(N))

lg (N)

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

Dane doswiadczalneWykres funkcji aproksymującej dane

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

Page 43: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza danych

Standardowy wykres wraz z wyliczona aproksymacja.

-50

0

50

100

150

200

250

300

350

400

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

Cza

s p

racy

T(N

) w

se

ku

nd

ach

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 43 / 49

Page 44: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Hipoteza, Przewidywanie, Weryfikacja i Walidacja

Hipoteza. Czas pracy naszego programu to:

T (N) = 0.743207 · N3 − 0.899549

Przewidywanie.379.6 sekund dla N = 80003043.3 sekund dla N = 16000

Weryfikacja.N Czas w sec.

8000 3808000 379

16000 302916000 3032

Dane potwierdzaja hipoteze !

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

Page 45: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

Analiza danych

Prawo potegowe (ang. power law)Zaleznosc pomiedzy dwiema wielkosciamiempirycznymi, która mozna opisac jakonastepujaca funkcja:

T (N) = a · Nb .

Hipoteza. Czas pracy naszego programuspełnia prawo potegowe.

Szacujemy wartosc b odpowiadajacanachyleniu linii wykresu poprzezfitowanie.

Ulepszona Hipoteza. Czas pracynaszego programu rosnie jako funkcjaszescienna rozmiaru danychwejsciowych: a · N3

0.5

1

2

4

8

16

32

64

128

256

512

1K 2K 4K 8K

lg(T

(N))

lg (N)

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

Skala logarytmiczna

Dane doswiadczalneFunkcja aproksymująca

Final set of parameters=======================a = 0.713325b = 3.01886

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

Page 46: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 46 / 49

Page 47: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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. T (2N)/T (N) log2(T (2N)/T (N))

512 0 - -1024 0 - -2048 6 - -4096 50 50/6 = 8,33 3,0588192 407 407/50 = 8,14 3,02

16384 3263 3263/407 =8,01 3,001Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 1 47 / 49

Page 48: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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 = 50a = 50/40963 = 50/68719476736 = 0,000000001.Przewidywanie.

400 sekund dla N = 81923200 sekund dla N = 1638425600 sekund dla N = 32768

Dane eksperymentalne potwierdzaja powyzsza hipoteze.

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

Page 49: Algorytmy i Struktury Danych.wozna.org/students/2017-2018/asd/asd01.pdf · LiteraturaII Materiały on-line w j. angielskim: Erik Demaine, and Srinivas Devadas. 6.006 Introduction

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