Zestawienie najpopularniejszych algorytmów Algorytm 1. Otrzymywanie binarnej reprezentacji liczby naturalnej i tworzenie na tej podstawie binarnych reprezentacji liczb całkowitych w komputerze (rozdz. I.5). Uogólnienie tych algorytmów na dowolną podstawę systemu liczbowego, np. 8 i 16 (zad.I.1 – I.4)- Dalszym uogólnieniem jest tworzenie stałopozycyjnej i zmiennopozycyjnej reprezentacji liczb rzeczywistych (p. I5.1.8 i I5.1.9 oraz p. II.1.3.3 i II.2.3). Problemy: korzystanie z komputerowych reprezentacji liczb w algorytmach (np. przy szybkim potęgowaniu, patrz p.I.5.1.5), tworzenie własnych reprezentacji liczb (zad. II.4.2), zakresy reprezentacji liczb i niedokładności pojawiające się w obliczeniach (p. II.2.3). Pojęcia: pozycyjny system reprezentacji liczb, nadmiar reprezentacji liczb całkowitych, nadmiar i niedomiar w reprezentacjach liczb rzeczywistych, błędy zaokrągleń w reprezentacjach liczb rzeczywistych. Metody: iteracja algorytmu dzielenia liczby całkowitej z resztą, schemat Hornera (patrz Algorytm 2). Algorytm 2. Schemat Homera obliczania wartości wielomianu (p. I.7.1.1). Problemy: wszystkie problemy, w których jest obliczana wartość wielomianu; takim problemem jest na przykład obliczanie dziesiętnej wartości liczby, która jest przedstawiona w postaci rozwinięcia binarnego; szybkie potęgowanie, gdy wykładnik w reprezentacji binarnej jest przedstawiony w postaci schematu Homera. Pojęcia: iteracja, liczba działań wykonywanych przez algorytm - złożoność obliczeniowa, algorytm optymalny. Metody: iteracja, rekurencja (p.I.1.11.1). Algorytm 3. Szybkie potęgowanie, w którym jest wykorzystywane binarne rozwiniecie wykładnika potęgi (p.I.5.1.5, zad.I.5.9; zad.I.5.11) Problemy: algorytm szyfrowania i deszyfrowania metodą RSA. Pojęcia: reprezentacja binarna liczby naturalnej, schemat Homera, rekurencja. Metody: wykorzystanie binarnej reprezentacji wykładnika i zastosowanie do niego schematu Homera. Algorytm 4. Obliczanie pierwiastków równania kwadratowego metodą informatycznie poprawną, czyli metodą stabilną, która jest połączeniem algorytmu delty i wzorów Viete'a (p. II.2.4 i II.3.2). Problemy: rozwiązywanie zadań z matematyki i fizyki, które sprowadzają do rozwiązania równania kwadratowego. Pojęcia: utrata dokładności w obliczeniach komputerowych, błędy zaokrągleń, algorytm stabilny. Metody: szkolny algorytm delty w powiązaniu z wzorami Viete'a. się Algorytm 5. Obliczanie wartości pierwiastków układu dwóch równań liniowych metodą wyznaczników (p. II.2.5). Problemy: rozwiązywanie układów równań liniowych, znajdowanie punktu przecięcia się prostych. Pojęcia: wyznacznik i jego wartość, dokładność obliczeń, algorytm stabilny, złe uwarunkowanie zadania. Metody: metoda wyznaczników. Algorytm 6. Znajdowanie elementu najmniejszego lub największego w ciągu (p. I.1.7.2). Znajdowanie w ciągu elementu o wyróżnionej własności lub wartości, a ogólniej - poszukiwanie informacji w zbiorze (p.I.1.10). Problemy: znajdowanie w ciągu wyróżnionych elementów, np. o zadanej wartości lub określonej własności. Pojęcia: przeszukiwanie liniowe, iteracja. Metody: liniowe przeszukiwanie ciągu elementów, czyli przeszukiwanie ciągu od jednego do drugiego końca. Algorytm 7. Znajdowanie w ciągu uporządkowanym elementu o danej wartości metodą przeszukiwania binarnego (p. I.1.10). Problemy: przeszukiwanie ciągu uporządkowanego, wstawianie elementu do ciągu uporządkowanego, porządkowanie ciągu metodą binarnego wstawiania elementów. Pojęcia: przeszukiwanie binarne, metoda dziel i zwyciężaj. Metody: przeszukiwanie binarne, znane również jako przeszukiwanie przez połowienie. Algorytm 8. Jednoczesne znajdowanie w ciągu najmniejszego i największego elementu (p.I.1.8). Problemy: jednoczesne znajdowanie minimum i maksimum. Pojęcia: metoda dziel i zwyciężaj. Metody: metoda dziel i zwyciężaj, zrealizowana iteracyjnie (p.I.1.8) lub rekurencyjnie (zad. I.1.19)). Algorytm 9. Porządkowanie ciągu metodą przez wybór (p. 1.1.9). Problemy: porządkowanie. Pojęcia: iteracja, znajdowanie najmniejszego elementu, porządkowanie Metody: iteracja innego algorytmu (szukania minimum) i zamiana. Algorytm10. Scalanie (łączenie) dwóch ciągów uporządkowanych w jeden ciąg uporządkowany (p.I.1.11.2). Problemy: scalanie ciągów i plików (zad.I.7.4), porządkowanie przez scalanie. Pojęcia: scalanie (łączenie). Metody: scalanie (łączenie) dwóch ciągów lub plików w jeden przez przeglądanie obu ciągów od ich początków i porównywanie elementów znajdujących się na początku. Algorytm 11. Porządkowanie ciągu metodą przez scalanie (p.I.1.11.2). Problemy: porządkowanie. Pojęcia: scalanie, metoda dziel i zwyciężaj, porządkowanie. Metody: dziel i zwyciężaj, rekurencyjne zastosowanie scalania. Algorytm 12. Porządkowanie ciągu metodą przez wstawianie (zad.I.1.16). Problemy: porządkowanie. Pojęcia: przeszukiwanie, porządkowanie. Metody: iteracja i wstawianie elementu w ciąg uporządkowany - miejsce dla wstawianego elementu można znaleźć, stosując metodę przeszukiwania liniowego lub binarnego (patrz Algorytm 7). Algorytm 13. Porządkowanie ciągu metodą bąbelkową (p.II.3.10). Problemy: porządkowanie. Pojęcia: elementarne zamiany elementów, porządkowanie. Metody: iteracja przestawiania elementów sąsiednich, które są w niewłaściwej kolejności. Algorytm 14. Porządkowanie pozycyjne metodą koszykową (p.I.7.1.1). Problemy: porządkowanie obiektów nieliczbowych i rekordów, czyli obiektów złożonych z niejednorodnych elementów, np. słów, dat, a także liczb jako ciągów cyfr. Pojęcia: porządek leksykograficzny (słownikowy), reprezentacja pozycyjna obiektów, rekord Metody: metoda koszykowa. Algorytm 15. Znajdowanie największego wspólnego dzielnika dwóch liczb naturalnych (p.II.1.4). Problemy: znajdowanie największego wspólnego dzielnika dwóch liczb, wykonywanie działań na ułamkach (zad. II.1.10), znajdowanie najmniejszej wspólnej wielokrotności dwóch liczb (zad. II.1.2). Pojęcia: dzielenie liczb całkowitych, największy wspólny dzielnik, algorytm Euklidesa, rekurencja. Metody: algorytm Euklidesa w realizacji iteracyjnej lub rekurencyjnej. Algorytm 16. Generowanie kolejnych liczb Fibonacciego (p.I.1.11.3, II.1.9). Problemy: realizacja w postaci iteracji obliczeń zdefiniowanych zależnością rekurencyjną; liczby Fibonacciego w przyrodzie i w sztuce. Pojęcia: liczby Fibonacciego, zależność rekurencyjna, rekurencja a iteracja, złoty podział. Metody: rekurencyjna lub iteracyjna realizacja zależności rekurencyjnej definiującej liczby Fibonacciego (p. II.1.9). Algorytm 17. Przeszukiwanie drzew binarnych (p. II.1.13). Problemy: obliczanie wartości wyrażeń reprezentowanych za pomocą drzew, wyznaczanie beznawiasowej postaci wyrażenia (p.II.1.13). Pojęcia: drzewo binarne, metody przeszukiwania drzewa binarnego: przedrostkowa (ang. preorder), wrostkowa (ang. inorder) i przyrostkowa (ang. postorder), nieliniowe metody przeszukiwania, rekurencja. Metody: metody przeszukiwania drzew. Algorytm 18. Zamiana wyrażenia na postać ONP i obliczanie wartości wyrażenia danego w postaci ONP (p. II.1.11.2, zad.II.1.16, p. II.3.9, zad. II.3.1). Problemy: obliczanie wartości wyrażeń w programach przez translatory, kompilatory i interpretery. Pojęcia: beznawiasowa postać wyrażenia (postać ONP), drzewo binarne, drzewo wyrażenia, rekurencja, stos. Metody: analiza postaci wyrażenia z wykorzystaniem stosu. Algorytm 19. Algorytm Huffmana (p.I.7.2.2). Problemy: wyznaczanie średnio najkrótszych kodów prefiksowych, dalsze zastosowania: szybkie automaty, szybkie scalanie wielu plików. Pojęcia: kod prefiksowy, drzewo binarne. Metody: zastosowanie binarnego drzewa Huffmana do generowania odpowiedniego kodu. Algorytm 20. Szyfr RSA (p. I.7.3.5). Problemy: szyfrowanie informacji z kluczem publicznym, podpis elektroniczny. Pojęcia: kryptografia z kluczem publicznym, klucz asymetryczny, liczby pierwsze, szybkie potęgowanie, arytmetyka reszt (modularna), podpis elektroniczny. Metody: szybkie potęgowania. Algorytm 21. Wydawanie reszty za pomocą najmniejszej liczby nominałów ( p. II.4.3.4). Problemy: minimalizacja nominałów w sumie pieniędzy; dalsze zastosowanie podejścia zachłannego to np. dobór najlepszej zawartości plecaka. Pojęcia: problem reszty, problem plecakowy, algorytm zachłanny. Metody: algorytm zachłanny. Algorytm 22. Szukanie najkrótszej drogi w siatce dróg (p. II.4.3.5) Problemy: znajdowanie możliwie najlepszej trajektorii ruchu (po drogach, w czasie wspinaczki, w locie samolotem). Pojęcia: najkrótsza droga, optymalizacja, programowanie dynamiczne, Metody: programowanie dynamiczne (oba etapy, I i II). Algorytm 23. Wyznaczanie przybliżonej wartości pierwiastka kwadratowego z nieujemnej liczby rzeczywistej (p. II.2.2). Problemy: pierwiastkowanie liczb, które nie są kwadratami liczb naturalnych. Pojęcia: metoda iteracyjna, przybliżanie wartości dokładnej, algorytm Newtona--Raphsona. Metody: algorytm Newtona-Raphsona. Algorytm 24. Wyznaczanie miejsca zerowego funkcji (p. II.2.6). Problemy: obliczanie miejsc zerowych funkcji. Pojęcia: zero (miejsce zerowe) funkcji, metoda iteracyjna, przybliżanie wartości dokładnej, metoda połowienia, metoda siecznych, algorytm Newtona. Metody: metoda połowienia przedziału, metoda siecznych, algorytm Newtona. Algorytm 25. Znajdowanie wartości całki oznaczonej, czyli kwadratura (p. II.2.7). Problemy: Obliczanie wartości całki oznaczonej, czyli obliczanie wartości pewnej wielkości geometrycznej (np. pola, długości krzywej, objętości). Pojęcia: kwadratura, czyli wartość całki oznaczonej, przybliżanie. Metody: przybliżanie dokładnej wartości całki oznaczonej, czyli np. wielkości pewnego pola, sumą pól figur prostszych, w przybliżeniu wypełniających to pole. Uwaga: Na liście znajdują się algorytmy dobrze znane w informatyce. Pominięto algorytmy odnoszące się do problemów bardziej szczegółowych. (wg. Informatyka – Poradnik dla nauczycieli Ewa Gurbiel, Maciej Sysło.... WSIP)