Wprowadzenie do algorytmw Opracowa Arkadiusz Waliczek Algorytm to

  • Slides: 18
Download presentation
Wprowadzenie do algorytmów Opracował: Arkadiusz Waliczek

Wprowadzenie do algorytmów Opracował: Arkadiusz Waliczek

 • Algorytm to zestaw ściśle określonych czynności, prowadzących do wykonania pewnego zadania. •

• Algorytm to zestaw ściśle określonych czynności, prowadzących do wykonania pewnego zadania. • Zdefiniowany algorytm może zostać zapisany w wybranym języku programowania. Ale ten sam algorytm może zostać zapisany różnie, w zależności od użytego języka programowania. • Zapis algorytmu w wybranym języku programowania nazywamy implementacją algorytmu.

Reprezentacja algorytmów • Algorytm opisujący operacje do wykonania może zostać zapisany w różny sposób.

Reprezentacja algorytmów • Algorytm opisujący operacje do wykonania może zostać zapisany w różny sposób. Może to być: • zapis słowny • lista kroków • pseudokod • drzewo algorytmu • schemat blokowy

 • Opis słowny W opisie słownym operacje, które należy wykonać, są zapisywane za

• Opis słowny W opisie słownym operacje, które należy wykonać, są zapisywane za pomocą zwykłego tekstu. Ten sposób zapisu algorytmu stosowany jest we wstępnej fazie opisu problemu, gdy trzeba w sposób ogólny przedstawić operacje do wykonania, bez określania szczegółów dotyczących rozwiązania problemu. • Lista kroków Na liście kroków każda operacja, którą należy wykonać, jest zapisywana w postaci numerowanego kroku. Lista kroków pozwała dokładnie zdefiniować cały algorytm.

 • Pseudokod to opis słowny przypominający zapis kroków algorytmu, który może zawierać instrukcje

• Pseudokod to opis słowny przypominający zapis kroków algorytmu, który może zawierać instrukcje z języka programowania. Tworząc pseudokod, najczęściej używamy słów języka naturalnego do określenia kroków algorytmu (np. wczytaj dane, oblicz wartość), ale mogą pojawić się w nim elementy zawierające symboliczny opis działań (np. a=5, powtarzaj. . . aż do. . . ).

 • Drzewo algorytmu to reprezentacja graficzna algorytmu. W schemacie drzewa wyróżnione są: jeden

• Drzewo algorytmu to reprezentacja graficzna algorytmu. W schemacie drzewa wyróżnione są: jeden główny element, tj. korzeń (wierzchołek), który stanowi początek algorytmu, gałęzie (wierzchołki pośrednie), które są reprezentacją wykonywanych operacji, oraz liście (wierzchołki końcowe), które reprezentują otrzymane wyniki. Drzewo algorytmu może zostać przedstawione jako graf.

 • Schemat blokowy W schemacie blokowym operacje, które należy wykonać, są przedstawione w

• Schemat blokowy W schemacie blokowym operacje, które należy wykonać, są przedstawione w postaci graficznej z użyciem symboli.

Cechy algorytmów • Podstawowymi cechami algorytmów są: • poprawność — algorytm powinien zwracać poprawne

Cechy algorytmów • Podstawowymi cechami algorytmów są: • poprawność — algorytm powinien zwracać poprawne wyniki • jednoznaczność — algorytm powinien przy takim samym zbiorze danych wejściowych zwracać takie same wyniki • skończoność dla każdego zbioru poprawnych danych wejściowych algorytm powinien zwracać wyniki w skończonej liczbie kroków • efektywność algorytm powinien prowadzić do rozwiązania problemu w jak najmniejszej liczbie kroków.

Klasyfikacja algorytmów ze względu na sposób konstruowania algorytmu • Dziel i zwyciężaj — problem,

Klasyfikacja algorytmów ze względu na sposób konstruowania algorytmu • Dziel i zwyciężaj — problem, który należy rozwiązać, jest dzielony na kilka mniejszych, a te znowu są dzielone aż do uzyskania problemów łatwych do rozwiązania. Algorytmy z tej grupy należą do najskuteczniejszych metod rozwiązywania problemów • Programowanie dynamiczne — metoda podobna do metody dziel i zwyciężaj. Problem, który należy rozwiązać, jest dzielony na kilka mniejszych. Wyniki analizy cząstkowych problemów wykorzystuje się do rozwiązania głównego problemu. • Metoda zachłanna — nie jest przeprowadzana dokładna analiza problemu, tylko wybierane jest rozwiązanie, które w danym momencie wydaje się najkorzystniejsze. • Poszukiwanie i wyliczanie — przeszukiwany jest zbiór danych aż do znalezienia rozwiązania. • Heurystyka — na podstawie niepełnych danych tworzony jest algorytm, który działa w sposób najbardziej prawdopodobny. Metody heurystyczne nie zapewniają otrzymania poprawnego rozwiązania; powstałe algorytmy dają zawsze rozwiązania przybliżone.

Klasyfikacja algorytmów ze względu na kolejność wykonywania działań Liniowy — kolejne kroki w algorytmie

Klasyfikacja algorytmów ze względu na kolejność wykonywania działań Liniowy — kolejne kroki w algorytmie są wykonywane w kolejności, w jakiej zostały zapisane. Żaden krok nie może być pominięty ani powtórzony

 • Warunkowy (z rozgałęzieniem) — wykonanie zależy od spełnienia lub niespełnienia określonego warunku.

• Warunkowy (z rozgałęzieniem) — wykonanie zależy od spełnienia lub niespełnienia określonego warunku. • Z pętlą (cykliczny) — grupa poleceń jest powtarzana wielokrotnie. Liczba powtórzeń może być z góry określona lub grupa poleceń jest powtarzana aż do spełnienia określonego warunku.

Klasyfikacja algorytmów ze względu na sposób wykonywania operacji Sekwencyjne — operacje w algorytmie są

Klasyfikacja algorytmów ze względu na sposób wykonywania operacji Sekwencyjne — operacje w algorytmie są wykonywane w kolejności, w jakiej zostały opisane. Iteracyjne — niektóre kroki są powtarzane aż do spełnienia wymaganego warunku. Rekurencyjne — tworzona jest formuła powtarzająca dane i odwołująca się do niej samej. Zakończenie wywoływania formuły następuje po spełnieniu warunku zakończenia rekurencji.

Klasyfikacja algorytmów ze względu na obszar zastosowań • Matematyczne — wykonują obliczenia numeryczne •

Klasyfikacja algorytmów ze względu na obszar zastosowań • Matematyczne — wykonują obliczenia numeryczne • Przeszukujące — przeszukują zbiór danych w celu znalezienia określonego elementu • Porządkujące — ustawiają elementy zbioru w określonej kolejności • Rekurencyjne — rozwiązują problemy, które po podzieleniu na mniejsze części stanowią kopię głównego problemu • Szyfrujące — kodują dane w ten sposób, że ich odczyt jest niemożliwy bez znajomości klucza kodującego

Złożoność obliczeniowa algorytmu • Złożoność obliczeniowa algorytmu określa ilość zasobów (pamięci, czasu) niezbędnych do

Złożoność obliczeniowa algorytmu • Złożoność obliczeniowa algorytmu określa ilość zasobów (pamięci, czasu) niezbędnych do rozwiązania problemu. • Złożoność czasowa algorytmu jest rozpatrywana jako ilość czasu potrzebnego do rozwiązania problemu w zależności od liczby danych wejściowych. Podawanie złożoności obliczeniowej w jednostkach czasu jest jednak nieprecyzyjne, bo wynik zależy również od szybkości działania komputera. Dlatego złożoność obliczeniowa algorytmu najczęściej podawana jest w liczbie wykonanych operacji i jest to największa liczba operacji dominujących wykonywanych w algorytmie dla dowolnego układu danych. • Złożoność pamięciowa algorytmu określa wielkość pamięci operacyjnej komputera, która jest potrzebna do przechowywania danych wejściowych, danych pośrednich oraz ostatecznych wyników obliczeń. • Złożoność czasowa oraz złożoność pamięciowa algorytmu często zależą od postaci przetwarzanych danych, dlatego można je przedstawiać jako złożoność: pesymistyczną — określa zużycie zasobów dla najgorszego przypadku, oczekiwaną — określa zużycie zasobów dla uśrednionych wszystkich możliwych przypadków lub dla typowych przypadków, optymistyczną — określa zużycie zasobów dla najkorzystniejszego przypadku. • • •

Idea sortowania przez scalanie • Dziel i zwyciężaj (ang. divide and conquer) – technika

Idea sortowania przez scalanie • Dziel i zwyciężaj (ang. divide and conquer) – technika projektowania algorytmów polegająca na podejściu rekurencyjnym. W technice tej problem dzielony jest na mniejsze podproblemy, te podproblemy na jeszcze mniejsze podproblemy, aż dojdzie się do przypadków trywialnych (np. posortowanie jednoelementowej tablicy, obliczenie silni z 1). • Jeśli rozpatrywany problem wymaga podzielenia na podproblemy, jest on określany jako przypadek rekurencyjny. Jeśli mamy do czynienia z przypadkiem trywialnym, jest to przypadek bazowy. Tworząc algorytm wykorzystujący metodę dziel i zwyciężaj musimy ustalić: