W najbardziej ogólnym sensie algorytm to dowolny zestaw szczegółowych instrukcji, których wynikiem jest przewidywalny stan końcowy od znanego początku. Algorytmy są jednak tylko tak dobre, jak podane instrukcje, a wynik będzie niepoprawny, jeśli algorytm nie zostanie odpowiednio zdefiniowany.
Przykłady algorytmów
Typowym przykładem algorytmu byłyby instrukcje składania modelu samolotu. Mając początkowy zestaw wielu zaznaczonych elementów, można postępować zgodnie z podanymi instrukcjami, aby uzyskać przewidywalny stan końcowy: ukończony samolot. Błędy w instrukcjach lub nieprawidłowe wykonanie kroku spowoduje wadliwy produkt końcowy.
Innym powszechnym przykładem jest program komputerowy. Każdy program komputerowy to po prostu seria instrukcji, które mogą mieć różną złożoność i są wymienione w określonej kolejności, przeznaczone do wykonania określonego zadania. Matematyka wykorzystuje również algorytmy do ręcznego rozwiązywania równań, bez użycia kalkulatora. Ostatnim przykładem jest ludzki mózg: większość koncepcji ludzkiego mózgu definiuje wszystkie zachowania — od zdobywania pożywienia po zakochanie — jako wynik złożonego algorytmu.
Klasy algorytmów
Chociaż nie ma powszechnie akceptowanego podziału na różne typy algorytmów, istnieją wspólne klasy, do których przynależność algorytmów jest często uzgadniana. Wśród nich są:
Algorytmy programowania dynamicznego: ta klasa zapamiętuje starsze wyniki i próbuje użyć ich do przyspieszenia procesu znajdowania nowych wyników.
Algorytmy zachłanne: Algorytmy zachłanne próbują nie tylko znaleźć rozwiązanie, ale także znaleźć idealne rozwiązanie dowolnego problemu.
Algorytmy brutalnej siły: Podejście brutalnej siły rozpoczyna się w jakimś losowym punkcie i iteruje przez każdą możliwość, aż znajdzie rozwiązanie.
Algorytmy randomizowane: ta klasa obejmuje dowolny algorytm, który używa liczby losowej w dowolnym momencie procesu.
Algorytmy rozgałęzione i powiązane: Algorytmy rozgałęzione i powiązane tworzą drzewo podproblemów głównego problemu, podążając za każdą rozgałęzieniem, aż zostanie rozwiązany lub połączony z inną gałęzią.
Proste algorytmy rekurencyjne: Ten typ od razu szuka bezpośredniego rozwiązania, a następnie wycofuje się, aby znaleźć prostsze rozwiązanie.
Algorytmy cofania: algorytmy cofania sprawdzają rozwiązanie; jeśli rozwiązanie zostanie znalezione, algorytm został rozwiązany, jeśli nie, powtarza się raz i testuje ponownie, kontynuując aż do znalezienia rozwiązania.
Algorytmy dziel i zwyciężaj: Algorytm dziel i zwyciężaj jest podobny do algorytmu rozgałęzienia i wiązania, z wyjątkiem tego, że wykorzystuje metodę śledzenia wstecznego polegającą na powtarzaniu się podczas dzielenia problemu na podproblemy.
Algorytmy szeregowe i równoległe
Oprócz tych ogólnych klas, algorytmy można również podzielić na dwie podstawowe grupy: algorytmy szeregowe, które są przeznaczone do seryjnego wykonywania, w których każda operacja jest wykonywana w kolejności liniowej; oraz algorytmy równoległe, używane z komputerami z procesorami równoległymi, w których wiele operacji jest wykonywanych równolegle do siebie. Równoległe algorytmy istnieją również w świecie przyrody w przypadku np. mutacji genetycznych u gatunku.