• Nie Znaleziono Wyników

algorytmy wyklad

N/A
N/A
Protected

Academic year: 2021

Share "algorytmy wyklad"

Copied!
7
0
0

Pełen tekst

(1)

Algorytmy – definicja, cechy, złożoność.

Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z gotowych elementów, robienie swetra na drutach, dzielenie liczb, wypełnienie formularza podatkowego.

Algorytmika jest to dziedzina zajmująca się tworzeniem

algorytmów. Jest to więcej niż dział informatyki. Jest ona ważna dla większości nauk matematyczno – przyrodniczych, ekonomii, techniki.

Algorytm – jest to przepis (sposób postępowania), który 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 – wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhammeda Alchwarizmi, który żył w IX w. i któremu 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.

(2)

Cechy algorytmu:

wykonalność

– polecenia zawarte w algorytmie są

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

posiadanie wejścia i wyjścia

– wejście oznacza zwykle pewne dane pobierane przez algorytm w celu ich przetworzenia, wyjście odnosi się do wyniku działania algorytmu.

skończoność

– algorytm powinien zakończyć swoje

działanie po skończonej liczbie kroków.

określoność

- każda operacja w algorytmie powinna być sformułowana tak, aby zapewnić jej jednoznaczną interpretację.

(3)

Podstawowe pytania pojawiające się w czasie badań nad obliczeniami:

• Jak dla określonego zadania znaleźć efektywny algorytm? • Jeśli algorytm już znaleziono, to jak porównać go z innymi,

które rozwiązują podobne zadania? • Jak udowodnić poprawność algorytmu?

• W jakim sensie można wykazać, że pewne algorytmy są „najlepszymi z możliwych”?

Odpowiedzi na te pytania można uzyskać dzięki dziedzinie zwanej analiza algorytmów, której zasadnicze kierunki dotyczą poprawności i złożoności obliczeniowej.

Poprawność dotyczy przede wszystkim pojęć i metod związanych z dowodzeniem poprawności algorytmów, takich m.in. jak:

• własność stopu – algorytm musi osiągnąć swój logiczny koniec i zatrzymać się

• częściowa poprawność – program nigdy nie może zatrzymać się ze złymi wynikami

• metoda niezmienników – niezmienniki pozostają prawdziwe bez względu na to, jak często się je osiąga – przejście z jednego punktu kontrolnego do drugiego nie narusza żadnych własności niezmienników.

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

(4)

Złożoność obliczeniowa

Oceny złożoności można dokonać według różnych kryteriów. 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 rozmiarów wejścia można wymienić:

• wymiary macierzy w zadaniu mnożenia macierzy

• liczbę elementów tablicy wejściowej w algorytmach sortowania

• liczbę n w obliczeniach n!

Złożoność czasowa algorytmu

– czas potrzebny na

wykonanie algorytmu w funkcji rozmiaru zadania.

Asymptotyczna złożoność czasowa –

charakter złożoności

czasowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania.

Złożoność pamięciowa algorytmu

– pamięć potrzebna na

wykonanie algorytmu w funkcji rozmiaru zadania.

Asymptotyczna złożoność pamięciowa –

charakter

złożoności pamięciowej przy dążeniu do wartości granicznej wraz ze wzrostem rozmiaru zadania.

(5)

Wprowadzenie asymptotycznej złożoności algorytmu jest szczególnie ważne, gdyż przy jej pomocy można określić rozmiar zadań, które 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łą, wówczas mówimy, że złożoność czasowa tego jest rzędu cn2, co zapisujemy jako O(n2) i czytamy ”duże o od n kwadrat”.

Pewna nieujemna funkcja f(n) jest O(g(n)), jeśli istnieje taka stała c, że

0 ≤ f(n) ≤ cg(n)

dla wszystkich n oprócz 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 algorytmów. Na rysunku a) podano interpretację graficzną notacji O. Wynika z niej, że przy pomocy zapisu f(n) = O(g(n)) podaje się górne ograniczenie funkcji z dokładnością do stałego współ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

(6)

Na rysunkach b) i c) przedstawiono w podobny sposób notacje Θ i Ω, będące także przykładami notacji asymptotycznych. W odróżnieniu od notacji O, która ogranicza funkcję z góry, 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 góry. 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 sposób nie mniej istotny jak rozwój sprzętu wpływać na wydajność komputerów (mierzoną np. rozmiarem zadania, które mogą rozwiązywać.

W dwóch pierwszych kolumnach tabeli zamieszczono pięć przykładowych algorytmów 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 6·104 4893 244 39 15 3,6·106 2,0·105 1897 153 21

(7)

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ść komputerów rośnie 10-krotnie. W kolejnej tabeli pokazano, jak wzrosną rozmiary zadań, które mogą być przetworzone przez algorytmy A1 do A5, w wyniku

takiego wzrostu szybkości komputerów.

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

3,16s3

2,15s4

s5+3,3

Porównajmy teraz efekty zwiększenia szybkości komputerów 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 komputerów.

Cytaty

Powiązane dokumenty

Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos operacji.. Schemat blokowy algorytmu.

Zadanie Do zbioru reprezentowanego przez drzewo D dołączyć element e, o ile nie należy on jeszcze do etykiet drzewa D.... Zastosowanie: wyszukiwanie

(3) Jeżeli tak otrzymane drzewo nie jest częściowo uporządkowane, to przechodząc wzdłuż drogi od liścia x do korzenia, poprawić etykiety zamieniając etykietę ojca z

Jeśli element e należy do kolejki q, to po skończonej liczbie usunięć kolejnych elementów minimalnych.. dotrę do tego

takie drzewo <V, T> rozpinające grafu G, że suma kosztów jego krawędzi  eT c (e) jest najmniejsza.. Mirkowska, ASD_12 Algorytmy na

Niech będzie tekst 100000 znakowy, w którym występują tylko litery a,b,c,d,e,f i a-45tys razy, b-13tys., c-12tys.,.. d-16tys., e -

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Dowód przez indukcję ze względu na liczbę wywołań rekurencyjnych funkcji min_max.. Dla jednego tylko wywołania