Algorytm jest przepisem opisującym krok po kroku rozwiązanie problemu lub osiągnięcie jakiegoś celu. Korzystanie z gotowego rozwiązania. Próba samodzielnego rozwiązania problemu. Słowo algorytm pochodzi od brzmienia fragmentu nazwiska: Muhamad ibn Musa al-chorezmi, arabskiego matematyka i astronoma żyjącego na przełomie VIII i IX wieku. Jest on uznawany za prekursora metod obliczeniowych w matematyce. Upowszechnił stosowanie systemu dziesiętnego i posługiwanie się zerem. Algorytmika jest nazwą dziedziny zajmującej się algorytmami i ich własnościami. Po raz pierwszy użył tego terminu David Harel w swojej książce Rzecz o istocie informatyki. Budowanie algorytmów jest tak stare jak dążenie człowieka do rozwiązywania problemów lub zdobywania wyznaczonych celów: ułatwianie życia, ulepszanie metod realizacji zamierzeń. Najlepszym sposobem przyspieszania pracy komputerów jest obarczanie ich mniejszą liczbą działań. Ralph Gomory (IBM) 1
Najstarszy algorytm, algorytm Euklidesa ma ponad 2000 lat. Algorytmy były opracowywane przez matematyków bądź inżynierów na długo przed pojawieniem się komputerów. Wiele z nich wykorzystywanych jest w niezmienionej formie do dziś. Prekursorem algorytmów komputerowych jest Ada Augusta (1815-1852), hrabina Lovelace, córka Byrona. Opracowując algorytmy dla maszyny analitycznej Babbage a jej przełomowe znaczenie upatrywała w możliwości wielokrotnego wykonywania przez nią danego ciągu instrukcji z liczbą powtórzeń z góry zadaną bądź zależną od wyników obliczeń. Są to podstawowe cechy algorytmów komputerowych. Większość problemów wymaga jednak nowego spojrzenia na sposoby ich rozwiązywania. Należy uwzględniać charakter obliczeń komputerowych - działania muszą być możliwe do przełożenia na operacje wykonywane przez komputer. Przy opracowywaniu nowych algorytmów powinniśmy zwracać uwagę na: wykonywalność tworzonych algorytmów, efektywność algorytmów. 2
Problem znalezienia najkrótszej drogi zamkniętej przechodzącej przez każdy punkt dokładnie jeden raz nazywa się problemem komiwojażera (TSP). Z okazji reformy samorządowej Premier ma odwiedzić Wojewodów ich siedzibach wyruszając z Warszawy, odwiedzając każde województwo dokładnie raz i powrócić do Warszawy. Liczba odwiedzanych województw: 17 zgodnie ze starym podziałem administracyjnym, 25 zgodnie z planowanym podziałem, 49 zgodnie z aktualnym podziałem. Jeśli nie dysponujemy żadnym algorytmem jedyną metodą rozwiązania zadania jest przejrzenie wszystkich możliwych kombinacji. Jeśli n jest liczbą województw to istnieje (n-1)! możliwych ich ustawień. 17!=3.55 10 14 25!=1.55 10 25 49!=6.08 10 62 Jeśli dysponujemy superkomputerem który może w ciągu sekundy przeanalizować 100 miliardów ustawień (10 11 ) to obliczenia będą trwały: 17 województw - 3.5 minuty 25 województw - 2 10 5 lat 49 województw - 4 10 12 lat 3
Specyfikacja zadania to dokładny opis zadania, które ma być wykonane lub problemu, który ma być rozwiązany. Specyfikacja ma na ogół postać wyszczególnienia, w którym są wymienione: dane dla zadania i warunki jakie one musza spełniać, wyniki i warunki jakie musza one spełniać (jaki jest związek wyników z danymi) Zadanie: oblicz wartość funkcji: f(x)=x/ x Obliczanie wartości funkcji Dane: Dowolna liczba rzeczywista x Wynik: Wartość funkcji zgodna ze wzorem, jeśli x jest różne od zera. W przeciwnym przypadku f(x)=0 Aby podać specyfikację zadania polegającego na obliczaniu wartości funkcji musimy uzupełnić jej opis o dziedzinę, czyli informację, dla jakich wartości x funkcja ta ma określone wartości. 4
Słowny opis algorytmu jest na ogół jego pierwszym i mało ścisłym opisem. Służy wyrobieniu pewnej intuicji oraz ukierunkowaniu rozważań na właściwe sposoby i techniki przydatne w rozwiązaniu. Opis algorytmu w postaci listy kroków jest jednym z najczęściej stosowanych, dokładnych sposobów opisywania obliczeń oraz ich kolejności. Poszczególne kroki zawierają opis operacji, które mają być wykonane przez algorytm. Mogą w nich również wystąpić polecenia związane ze zmianą kolejności wykonywania kroków lub polecenie zakończenia algorytmu. Algorytm oblicza wartości funkcji: f(x)=x/ x Dane: Dowolna liczba rzeczywista x Wynik: Wartość funkcji zgodna ze wzorem, jeśli x jest różne od zera. W przeciwnym przypadku f(x)=0 Krok 0 Wczytaj wartość danej x Krok 1 Jeśli x>0 to f(x)=x. Zakończ algorytm Krok 2 {x<=0} Jeśli x=0 to f(x)=0. Zakończ algorytm. Krok 3 {x<0} f(x)=-x. Zakończ algorytm. 5
Schemat blokowy algorytmu jest jednym z najbardziej popularnych graficznych sposobów przedstawiania algorytmów. Składa się on z klatek oraz połączeń między nimi. W klatkach zapisywane są operacje, które mają być wykonywane, a połączenia określają kolejność ich wykonania. Często stosuje się różne kształty klatek dla odróżnienia rodzajów operacji w nich zawartych. Schematy można budować odręcznie, można je również konstruować posługując się oprogramowaniem. Początek lub koniec pracy algorytmu Czytanie danych i wyprowadzanie wyników Instrukcje arytmetyczne Instrukcja warunkowa Instrukcja powtarzania 6
Drzewo algorytmu nazywane również drzewem obliczeń jest szczególnym rodzajem schematu blokowego, który przyjmuje postać drzewa. Drzewo rysowane jest na ogół do góry nogami, z korzeniem u góry. Stosowane nazewnictwo elementów drzewa jest wzięte z dendrologii. Korzeń, wierzchołki końcowe nazywają się liśćmi, a krawędzie, czyli połączenia w drzewie gałęziami. Każde dwie drogi w takim schemacie obliczeń mogą mieć tylko początkowe fragmenty wspólne, ale po rozejściu już się nie spotykają. Najczęściej drzewa algorytmów przedstawia się upraszczając nieco ich postać graficzną. Drzewo wyrażenia ma ograniczone zastosowania jako reprezentacja algorytmów. Jest ono wykorzystywane przede wszystkim do obliczania wartości wyrażeń. W drzewie można zapisać dowolne wyrażenie. Argumenty wyrażeń znajdują się w liściach Działania znajdują się w wierzchołkach pośrednich. Obliczanie wartości wyrażenia zapisanego w drzewie spływa od liści, gałęziami ku korzeniowi. 7
Algorytm liniowy ma postać ciągu (listy) kroków, które bezwarunkowo mają być wszystkie wykonane zgodnie z kolejnością, w jakiej występują. Taki algorytm nie może zawierać sprawdzania warunków, od spełnienia których zależy wykonanie kroków. Częstym zadaniem jest obliczanie wartości wielomianów dla zadanej wartości argumentu. w(x)=ax 2 + bx + c Aby obliczyć jego wartość najczęściej: podnosimy x do kwadratu (mnożymy x przez siebie), dwa razy mnożymy przez współczynniki a i b dwa razy wykonujemy dodawanie. wykonujemy w ten sposób trzy mnożenia i dwa dodawania. Po zgrupowaniu dwóch pierwszych wyrazów i wyłączeniu czynnika x w(x)=(ax + b)x + c wykonywać będziemy tylko dwa mnożenia i dwa dodawania. 8
Przekształćmy w podobny sposób wielomian trzeciego stopnia: v(x)=ax 3 + bx 2 + cx + d = ((ax +b)x +c)x + d W pierwszej postaci należy wykonać pięć mnożeń i trzy dodawania, w drugiej jedynie trzy mnożenia i trzy dodawania. Przytoczone postacie wielomianów drugiego i trzeciego stopnia oraz wynikające z nich sposoby obliczania wartości tych wielomianów są szczególnymi przypadkami tzw. schematu Hornera. 9
rozwiązanie każdego problemu ma cechy odkrycia. Wasz problem może być skromny; jeżeli jednak zaciekawi on Was i pobudzi do czynu Wasze zdolności twórcze i jeśli rozwiążecie go własnymi siłami to możecie doznać emocji towarzyszącej napięciu umysłu i triumfowi dokonanego odkrycia. George Polya, Jak to rozwiązać, PWN 1993 10
Program ELI jest programem edukacyjnym służącym do konstruowania i analizowania algorytmów. W odróżnieniu od klasycznych schematów blokowych w programie tym można budować algorytmy zawierające podprogramy, w tym również podprogramy rekurencyjne. W programie ELI algorytmy konstruowane są z gotowych klocków, które odpowiadają podstawowym krokom wykonywanym w algorytmach: początek i zakończenie algorytmu, wprowadzanie danych i wyprowadzanie wyników, instrukcja warunkowa (czyli rozgałęzienie w algorytmie) czytanie danych z tablicy bądź taśmy (czyli z pliku) zapisywanie danych w tablicy lub na taśmie, wywołanie procedury czyli podprogramu. W schemacie algorytmu musza również występować klocki z liniami, które służą do łączenia innych klocków. Klocki pobiera się z palety znajdującej się po lewej stronie ekranu. 11
Klocki służą jedynie do oznaczenia wybranych fragmentów algorytmów. Właściwe funkcje wykonywane przez nie w algorytmie należy wpisać w oknie dialogowym (wskazanie klocka i kliknięcie prawym klawiszem myszy). Każdy z klocków może być dodatkowo opatrzony komentarzem (otwarcie okna dialogowego - wskazanie i kliknięcie prawym klawiszem myszy przy naciśniętym klawiszu <Shift>). Algorytm buduje się na planszy. Dodatkową częścią algorytmu mogą być tablica i taśma, które służą do zapisywania danych i wyników działania algorytmów. Wymienione elementy tworzą projekt, który stanowi realizację algorytmu w tym programie. Algorytmy budowane w programie ELI mogą być w nim również wykonywane klocek po klocku lub w sposób ciągły. 12