Algorytmy – definicja, cechy,...

7

Click here to load reader

Transcript of Algorytmy – definicja, cechy,...

Page 1: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Algorytmy ndash definicja cechy złożoność Algorytmy napotykamy wszędzie gdziekolwiek się zwroacutecimy Rządzą one wieloma codziennymi czynnościami jak np wymiana przedziurawionej dętki montowanie szafy z gotowych elementoacutew robienie swetra na drutach dzielenie liczb wypełnienie formularza podatkowego Algorytmika jest to dziedzina zajmująca się tworzeniem algorytmoacutew Jest to więcej niż dział informatyki Jest ona ważna dla większości nauk matematyczno ndash przyrodniczych ekonomii techniki Algorytm ndash jest to przepis (sposoacuteb postępowania) ktoacutery ma prowadzić do rozwiązania określonego zadania Przyjmuje się że przepis ten jest na tyle precyzyjny że posługiwanie się nim polega wyłącznie na automatycznym wykonywaniu zawartych w nim poleceń Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa ndash wyszukiwanie NWD dwoacutech liczb (400 a 300 rok przed narodzeniem Chrystusa) Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhammeda Alchwarizmi ktoacutery żył w IX w i ktoacuteremu przypisuje się podanie reguł dodawania odejmowania mnożenia i dzielenia zwykłych liczb dziesietnych Nazwisko to pisane po łacinie przyjęło postać Algorismus Stąd do słowa algorytm już tylko mały krok

Cechy algorytmu bull wykonalność ndash polecenia zawarte w algorytmie są

wykonywalne tzn dostępne a pisząc algorytm wystarczy się nimi tylko posłużyć

bull posiadanie wejścia i wyjścia ndash wejście oznacza zwykle pewne dane pobierane przez algorytm w celu ich przetworzenia wyjście odnosi się do wyniku działania algorytmu

bull skończoność ndash algorytm powinien zakończyć swoje działanie po skończonej liczbie krokoacutew

bull określoność - każda operacja w algorytmie powinna być sformułowana tak aby zapewnić jej jednoznaczną interpretację

Zestawienie wymienionych cech algorytmoacutew

Podstawowe pytania pojawiające się w czasie badań nad obliczeniami bull Jak dla określonego zadania znaleźć efektywny algorytm bull Jeśli algorytm już znaleziono to jak poroacutewnać go z innymi

ktoacutere rozwiązują podobne zadania bull Jak udowodnić poprawność algorytmu bull W jakim sensie można wykazać że pewne algorytmy są

bdquonajlepszymi z możliwychrdquo Odpowiedzi na te pytania można uzyskać dzięki dziedzinie zwanej analiza algorytmoacutew ktoacuterej zasadnicze kierunki dotyczą poprawności i złożoności obliczeniowej Poprawność dotyczy przede wszystkim pojęć i metod związanych z dowodzeniem poprawności algorytmoacutew takich min jak bull własność stopu ndash algorytm musi osiągnąć swoacutej logiczny

koniec i zatrzymać się bull częściowa poprawność ndash program nigdy nie może

zatrzymać się ze złymi wynikami bull metoda niezmiennikoacutew ndash niezmienniki pozostają

prawdziwe bez względu na to jak często się je osiąga ndash przejście z jednego punktu kontrolnego do drugiego nie narusza żadnych własności niezmiennikoacutew

Złożoność obliczeniowa koncentruje się na określeniu zasoboacutew (czas obliczeń i pamięć) jakie są potrzebne do wykonania badanego algorytmu

Złożoność obliczeniowa Oceny złożoności można dokonać według roacuteżnych kryterioacutew Często stosowana jest metoda polegająca na badaniu jak zwiększają się zasoby potrzebne do wykonania algorytmu wraz ze wzrostem rozmiaru danych wejściowych Rozmiar danych wejściowych nazywać będziemy rozmiarem zadania albo rozmiarem wejścia przyjmując że jest to konkretna liczba charakteryzująca objętość danych wejściowych Jako przykłady rozmiaroacutew wejścia można wymienić bull wymiary macierzy w zadaniu mnożenia macierzy bull liczbę elementoacutew tablicy wejściowej w algorytmach

sortowania bull liczbę n w obliczeniach n

Złożoność czasowa algorytmu ndash czas potrzebny na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność czasowa ndash charakter złożoności czasowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania Złożoność pamięciowa algorytmu ndash pamięć potrzebna na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność pamięciowa ndash charakter złożoności pamięciowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania

Wprowadzenie asymptotycznej złożoności algorytmu jest szczegoacutelnie ważne gdyż przy jej pomocy można określić rozmiar zadań ktoacutere mogą być rozwiązane za pomocą tego algorytmu Jeśli np algorytm przetwarza wejście o rozmiarze n w czasie cn2 gdzie c jest pewną stałą woacutewczas moacutewimy że złożoność czasowa tego jest rzędu cn2 co zapisujemy jako O(n2) i czytamy rdquoduże o od n kwadratrdquo Pewna nieujemna funkcja f(n) jest O(g(n)) jeśli istnieje taka stała c że 0 le f(n) le cg(n) dla wszystkich n oproacutecz pewnego być może pustego zbioru nieujemnych wartości n Symbol O(g(n)) jest zaliczany do tzw notacji asymptotycznych używanych do opisu asymptotycznego czasu działania algorytmoacutew Na rysunku a) podano interpretację graficzną notacji O Wynika z niej że przy pomocy zapisu f(n) = O(g(n)) podaje się goacuterne ograniczenie funkcji z dokładnością do stałego wspoacutełczynnika Bardziej precyzyjne zapis ten oznacza że istnieją dodatnie stałe c i no takie że na prawo od no wartość f(n) jest zawsze nie większa niż cg(n) Interpretacja graficzna

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 2: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Cechy algorytmu bull wykonalność ndash polecenia zawarte w algorytmie są

wykonywalne tzn dostępne a pisząc algorytm wystarczy się nimi tylko posłużyć

bull posiadanie wejścia i wyjścia ndash wejście oznacza zwykle pewne dane pobierane przez algorytm w celu ich przetworzenia wyjście odnosi się do wyniku działania algorytmu

bull skończoność ndash algorytm powinien zakończyć swoje działanie po skończonej liczbie krokoacutew

bull określoność - każda operacja w algorytmie powinna być sformułowana tak aby zapewnić jej jednoznaczną interpretację

Zestawienie wymienionych cech algorytmoacutew

Podstawowe pytania pojawiające się w czasie badań nad obliczeniami bull Jak dla określonego zadania znaleźć efektywny algorytm bull Jeśli algorytm już znaleziono to jak poroacutewnać go z innymi

ktoacutere rozwiązują podobne zadania bull Jak udowodnić poprawność algorytmu bull W jakim sensie można wykazać że pewne algorytmy są

bdquonajlepszymi z możliwychrdquo Odpowiedzi na te pytania można uzyskać dzięki dziedzinie zwanej analiza algorytmoacutew ktoacuterej zasadnicze kierunki dotyczą poprawności i złożoności obliczeniowej Poprawność dotyczy przede wszystkim pojęć i metod związanych z dowodzeniem poprawności algorytmoacutew takich min jak bull własność stopu ndash algorytm musi osiągnąć swoacutej logiczny

koniec i zatrzymać się bull częściowa poprawność ndash program nigdy nie może

zatrzymać się ze złymi wynikami bull metoda niezmiennikoacutew ndash niezmienniki pozostają

prawdziwe bez względu na to jak często się je osiąga ndash przejście z jednego punktu kontrolnego do drugiego nie narusza żadnych własności niezmiennikoacutew

Złożoność obliczeniowa koncentruje się na określeniu zasoboacutew (czas obliczeń i pamięć) jakie są potrzebne do wykonania badanego algorytmu

Złożoność obliczeniowa Oceny złożoności można dokonać według roacuteżnych kryterioacutew Często stosowana jest metoda polegająca na badaniu jak zwiększają się zasoby potrzebne do wykonania algorytmu wraz ze wzrostem rozmiaru danych wejściowych Rozmiar danych wejściowych nazywać będziemy rozmiarem zadania albo rozmiarem wejścia przyjmując że jest to konkretna liczba charakteryzująca objętość danych wejściowych Jako przykłady rozmiaroacutew wejścia można wymienić bull wymiary macierzy w zadaniu mnożenia macierzy bull liczbę elementoacutew tablicy wejściowej w algorytmach

sortowania bull liczbę n w obliczeniach n

Złożoność czasowa algorytmu ndash czas potrzebny na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność czasowa ndash charakter złożoności czasowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania Złożoność pamięciowa algorytmu ndash pamięć potrzebna na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność pamięciowa ndash charakter złożoności pamięciowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania

Wprowadzenie asymptotycznej złożoności algorytmu jest szczegoacutelnie ważne gdyż przy jej pomocy można określić rozmiar zadań ktoacutere mogą być rozwiązane za pomocą tego algorytmu Jeśli np algorytm przetwarza wejście o rozmiarze n w czasie cn2 gdzie c jest pewną stałą woacutewczas moacutewimy że złożoność czasowa tego jest rzędu cn2 co zapisujemy jako O(n2) i czytamy rdquoduże o od n kwadratrdquo Pewna nieujemna funkcja f(n) jest O(g(n)) jeśli istnieje taka stała c że 0 le f(n) le cg(n) dla wszystkich n oproacutecz pewnego być może pustego zbioru nieujemnych wartości n Symbol O(g(n)) jest zaliczany do tzw notacji asymptotycznych używanych do opisu asymptotycznego czasu działania algorytmoacutew Na rysunku a) podano interpretację graficzną notacji O Wynika z niej że przy pomocy zapisu f(n) = O(g(n)) podaje się goacuterne ograniczenie funkcji z dokładnością do stałego wspoacutełczynnika Bardziej precyzyjne zapis ten oznacza że istnieją dodatnie stałe c i no takie że na prawo od no wartość f(n) jest zawsze nie większa niż cg(n) Interpretacja graficzna

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 3: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Podstawowe pytania pojawiające się w czasie badań nad obliczeniami bull Jak dla określonego zadania znaleźć efektywny algorytm bull Jeśli algorytm już znaleziono to jak poroacutewnać go z innymi

ktoacutere rozwiązują podobne zadania bull Jak udowodnić poprawność algorytmu bull W jakim sensie można wykazać że pewne algorytmy są

bdquonajlepszymi z możliwychrdquo Odpowiedzi na te pytania można uzyskać dzięki dziedzinie zwanej analiza algorytmoacutew ktoacuterej zasadnicze kierunki dotyczą poprawności i złożoności obliczeniowej Poprawność dotyczy przede wszystkim pojęć i metod związanych z dowodzeniem poprawności algorytmoacutew takich min jak bull własność stopu ndash algorytm musi osiągnąć swoacutej logiczny

koniec i zatrzymać się bull częściowa poprawność ndash program nigdy nie może

zatrzymać się ze złymi wynikami bull metoda niezmiennikoacutew ndash niezmienniki pozostają

prawdziwe bez względu na to jak często się je osiąga ndash przejście z jednego punktu kontrolnego do drugiego nie narusza żadnych własności niezmiennikoacutew

Złożoność obliczeniowa koncentruje się na określeniu zasoboacutew (czas obliczeń i pamięć) jakie są potrzebne do wykonania badanego algorytmu

Złożoność obliczeniowa Oceny złożoności można dokonać według roacuteżnych kryterioacutew Często stosowana jest metoda polegająca na badaniu jak zwiększają się zasoby potrzebne do wykonania algorytmu wraz ze wzrostem rozmiaru danych wejściowych Rozmiar danych wejściowych nazywać będziemy rozmiarem zadania albo rozmiarem wejścia przyjmując że jest to konkretna liczba charakteryzująca objętość danych wejściowych Jako przykłady rozmiaroacutew wejścia można wymienić bull wymiary macierzy w zadaniu mnożenia macierzy bull liczbę elementoacutew tablicy wejściowej w algorytmach

sortowania bull liczbę n w obliczeniach n

Złożoność czasowa algorytmu ndash czas potrzebny na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność czasowa ndash charakter złożoności czasowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania Złożoność pamięciowa algorytmu ndash pamięć potrzebna na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność pamięciowa ndash charakter złożoności pamięciowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania

Wprowadzenie asymptotycznej złożoności algorytmu jest szczegoacutelnie ważne gdyż przy jej pomocy można określić rozmiar zadań ktoacutere mogą być rozwiązane za pomocą tego algorytmu Jeśli np algorytm przetwarza wejście o rozmiarze n w czasie cn2 gdzie c jest pewną stałą woacutewczas moacutewimy że złożoność czasowa tego jest rzędu cn2 co zapisujemy jako O(n2) i czytamy rdquoduże o od n kwadratrdquo Pewna nieujemna funkcja f(n) jest O(g(n)) jeśli istnieje taka stała c że 0 le f(n) le cg(n) dla wszystkich n oproacutecz pewnego być może pustego zbioru nieujemnych wartości n Symbol O(g(n)) jest zaliczany do tzw notacji asymptotycznych używanych do opisu asymptotycznego czasu działania algorytmoacutew Na rysunku a) podano interpretację graficzną notacji O Wynika z niej że przy pomocy zapisu f(n) = O(g(n)) podaje się goacuterne ograniczenie funkcji z dokładnością do stałego wspoacutełczynnika Bardziej precyzyjne zapis ten oznacza że istnieją dodatnie stałe c i no takie że na prawo od no wartość f(n) jest zawsze nie większa niż cg(n) Interpretacja graficzna

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 4: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Złożoność obliczeniowa Oceny złożoności można dokonać według roacuteżnych kryterioacutew Często stosowana jest metoda polegająca na badaniu jak zwiększają się zasoby potrzebne do wykonania algorytmu wraz ze wzrostem rozmiaru danych wejściowych Rozmiar danych wejściowych nazywać będziemy rozmiarem zadania albo rozmiarem wejścia przyjmując że jest to konkretna liczba charakteryzująca objętość danych wejściowych Jako przykłady rozmiaroacutew wejścia można wymienić bull wymiary macierzy w zadaniu mnożenia macierzy bull liczbę elementoacutew tablicy wejściowej w algorytmach

sortowania bull liczbę n w obliczeniach n

Złożoność czasowa algorytmu ndash czas potrzebny na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność czasowa ndash charakter złożoności czasowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania Złożoność pamięciowa algorytmu ndash pamięć potrzebna na wykonanie algorytmu w funkcji rozmiaru zadania Asymptotyczna złożoność pamięciowa ndash charakter złożoności pamięciowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania

Wprowadzenie asymptotycznej złożoności algorytmu jest szczegoacutelnie ważne gdyż przy jej pomocy można określić rozmiar zadań ktoacutere mogą być rozwiązane za pomocą tego algorytmu Jeśli np algorytm przetwarza wejście o rozmiarze n w czasie cn2 gdzie c jest pewną stałą woacutewczas moacutewimy że złożoność czasowa tego jest rzędu cn2 co zapisujemy jako O(n2) i czytamy rdquoduże o od n kwadratrdquo Pewna nieujemna funkcja f(n) jest O(g(n)) jeśli istnieje taka stała c że 0 le f(n) le cg(n) dla wszystkich n oproacutecz pewnego być może pustego zbioru nieujemnych wartości n Symbol O(g(n)) jest zaliczany do tzw notacji asymptotycznych używanych do opisu asymptotycznego czasu działania algorytmoacutew Na rysunku a) podano interpretację graficzną notacji O Wynika z niej że przy pomocy zapisu f(n) = O(g(n)) podaje się goacuterne ograniczenie funkcji z dokładnością do stałego wspoacutełczynnika Bardziej precyzyjne zapis ten oznacza że istnieją dodatnie stałe c i no takie że na prawo od no wartość f(n) jest zawsze nie większa niż cg(n) Interpretacja graficzna

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 5: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Wprowadzenie asymptotycznej złożoności algorytmu jest szczegoacutelnie ważne gdyż przy jej pomocy można określić rozmiar zadań ktoacutere mogą być rozwiązane za pomocą tego algorytmu Jeśli np algorytm przetwarza wejście o rozmiarze n w czasie cn2 gdzie c jest pewną stałą woacutewczas moacutewimy że złożoność czasowa tego jest rzędu cn2 co zapisujemy jako O(n2) i czytamy rdquoduże o od n kwadratrdquo Pewna nieujemna funkcja f(n) jest O(g(n)) jeśli istnieje taka stała c że 0 le f(n) le cg(n) dla wszystkich n oproacutecz pewnego być może pustego zbioru nieujemnych wartości n Symbol O(g(n)) jest zaliczany do tzw notacji asymptotycznych używanych do opisu asymptotycznego czasu działania algorytmoacutew Na rysunku a) podano interpretację graficzną notacji O Wynika z niej że przy pomocy zapisu f(n) = O(g(n)) podaje się goacuterne ograniczenie funkcji z dokładnością do stałego wspoacutełczynnika Bardziej precyzyjne zapis ten oznacza że istnieją dodatnie stałe c i no takie że na prawo od no wartość f(n) jest zawsze nie większa niż cg(n) Interpretacja graficzna

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 6: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

Na rysunkach b) i c) przedstawiono w podobny sposoacuteb notacje Θ i Ω będące także przykładami notacji asymptotycznych W odroacuteżnieniu od notacji O ktoacutera ogranicza funkcję z goacutery notacja Ω (rys b) ogranicza funkcję z dołu Zapis f(n) = Ω(g(n)) oznacza że istnieją stałe dodatnie c i no takie że na prawo od no wartość funkcji f(n) jest zawsze nie mniejsza od cg(n) Przedstawiona na rys c) notacja pozwala szacować funkcję z dołu i z goacutery Pisząc zatem f(n) = Θ(g(n)) wskazujemy że istnieją dodatnie stałe c1 c2 i no takie że na prawo od no wartość f(n) jest zawsze nie mniejsza od c1g(n) i nie większa od c2g(n) Kolejny przykład pokazuje że efektywne algorytmy mogą w sposoacuteb nie mniej istotny jak rozwoacutej sprzętu wpływać na wydajność komputeroacutew (mierzoną np rozmiarem zadania ktoacutere mogą rozwiązywać W dwoacutech pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmoacutew wraz z ich złożonością czasową rozumianą tutaj jako liczba jednostek czasu potrzebnych do przetworzenia wejścia o rozmiarze n Jeśli za jednostkę czasu przyjąć 1 milisekundę to algorytm A1 może w ciągu sekundy przetworzyć wejście o rozmiarze 1000 natomiast algorytm A5 wejście o rozmiarze zaledwie 9

Maksymalny rozmiar zadania Algorytm Złożoność czasowa 1 sekunda 1 minuta 1 godzina

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

1000 140 31 10 9

6104 4893 244 39 15

36106

20105

1897 153 21

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew

Page 7: Algorytmy – definicja, cechy, złożonośćinformatyka.2ap.pl/ftp/3d/algorytmy/algorytmy_wyklad.pdf · Algorytmy – definicja, cechy, złożoność. Algorytmy napotykamy wszędzie,

W kolejnych kolumnach zamieszczono maksymalne rozmiary jakie mogą być przetworzone przez rozważane algorytmy jeśli całkowity czas obliczeń przyjąć odpowiednio 1 sekundę 1 minutę i 1 godzinę Zakładamy że prędkość komputeroacutew rośnie 10-krotnie W kolejnej tabeli pokazano jak wzrosną rozmiary zadań ktoacutere mogą być przetworzone przez algorytmy A1 do A5 w wyniku takiego wzrostu szybkości komputeroacutew

Maksymalny rozmiar zadania Algorytm Złożoność czasowa przed zwiększeniem po zwiększeniu

A1 A2 A3 A4 A5

n n lg n

n2 n3

2n

s1 s2 s3 s4 s5

10s1 ok 10s2 dla dużych s2

316s3 215s4 s5+33

Poroacutewnajmy teraz efekty zwiększenia szybkości komputeroacutew z efektami zastosowania bardziej efektywnego algorytmu Zwiększenie prędkości komputera dla algorytmu A5 powoduje wzrost rozmiaru zadania tylko o 3 a algorytm A3 ten rozmiar potraja Zamiana algorytmu A4 na A3 (dla 1 minuty) pozwala rozwiązać zadanie 6-krotnie większe natomiast zamiana A4 na A2 zadanie aż 125-krotnie Powyższe zadanie pokazuje że zastosowanie bardziej efektywnego algorytmu może znacznie przewyższyć zyski wynikające ze zwiększenia szybkości komputeroacutew