Reklama
Wizyt
Dzisiaj: 294Wszystkich: 520571

Algorytmy

Technikum » PAI » Podstawy programowania » Algorytmy

 

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. 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 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
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
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 postaci graficznej z użyciem symboli.

 

 

Bloki używane w schematach blokowych

 

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.


Specyfikacja algorytmu powinna zawierać:

  • podanie danych wejściowych;
  • określenie wyniku, który algorytm powinien wygenerować;
  • określenie warunków, jakie powinny spełniać dane wejściowe i wyniki;
  • podanie zmiennych pomocniczych niezbędnych do realizacji algorytmu.


Algorytmy powinny operować na zmiennych, a nie na konkretnych wartościach.

 

Klasyfikacja algorytmów


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 są wykonywane w kolejności, w jakiej zosłały zapisane. Żaden krok nie może być pominięty ani powtórzony

 

 

  • Warunkowy (z rozgałęzieniem) — wykonanie zależy od spełnienialub 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ą 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
  • 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 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.

 

Reklama