Strefa Algorytmów

Witaj w dziale algorytmów. Jeżeli tak jak ja fascynuje Cię ta dziedzina nauki, to na pewno znajdziesz tutaj coś dla siebie. Prezentuję tutaj różne algorytmy, poczynając od tych najprostszych, kończywszy na bardziej skomplikowanych. Możesz zapytać: “A po co mi to wiedzieć? Wszystko jest przecież zaimplementowane.”. Tak zgadza się, większość algorytmów znajduje się już w domyślnych bibliotekach dowolnego języka. Jednak uważam, że dobrze czasami wiedzieć co dzieje się “pod maską”. Czasami też chodzi o zabawę ;). W dodatku znając jakieś algorytmy można czasami wymyślić lepsze rozwiązanie aktualnego problemu, z którym się mierzymy. Nie mówię tutaj o implementacji innego algorytmu, ale jeżeli wiesz kiedy dany algorytm sprawdza się lepiej od innego, to możesz sporo ugrać w swojej implementacji. W dodatku studiowanie algorytmów na pewno poprawia zdolność wymyślania swoich, co również jest przydatne jeżeli projektujesz jakiś bardziej skomplikowany system.

Nie przedłużając, zacznijmy od najprostszych algorytmów, z którymi spotykałeś (spotkasz się?) na studiach (serio?).

Algorytmy sortowania

Z algorytmami sortowania spotkał się chyba każdy w swojej karierze. Nie mówię tutaj o wywołaniu List.Sort() ;), chodzi mi bardziej o to, że przy rozpoczynaniu nauki jakiegoś języka programowania na studiach, często pada zadanie: “Zaimplementuj BubbleSort”. Serio? Po co? Przecież mam QuickSort gotowy w bibliotekach .NET (mówię tutaj oczywiście o języku C#, ale każdy język ma ten algorytm chyba zaimplementowany, a właściwie jego zoptymalizowaną wersję – wspomnę o tym niżej). Ale cóż, zadanie trzeba zrobić, więc wchodzisz na Wikipedię, kopiujesz kod i do domu. Jednak, czy tak na prawdę wiesz jak działa taki algorytm? Nie uważasz, że nawet tak podstawowa wiedza może się kiedyś przydać? Jeżeli nie rozumiesz jak działa BubbleSort, jak chcesz zrozumieć jak działa algorytm RSA? Albo jakiś bardziej skomplikowany? Myślisz, że Ci się to nie przyda? Możliwe, że nie, ale warto wiedzieć jak działa, zamiast bezmyślnie klepać kod. Takie jest moje zdanie.

Więc, wyróżnia się kilka głównych algorytmów sortowania: