fibiter( intn)
{ inti,t,fO,fl;
/O«— /I <— 1;
for (i = 2; i < n; i + +)
{« «- /O; /O <- /1; /I — (t + /O) mod c; } return /1;
Algorytm 3. Metoda macierzowa”
Korzystamy z tego, źe
Stąd
(wykonując obliczenia mo-□
Wystarczy więc podnieść macierz do odpowiedniej potęgi duło c) a następnie wynik przemnożyć przez wektor [1,1]T.
Uwagi:
• Będziemy zajmować się tylko problemami określonymi na nieskończonej dziedzinie (zbiorze danych). Dla problemu mnożenia jest nią A/”2, a dla problemu obliczania liczb Fibonacciego M.
• Do zapisu algorytmów będziemy stosować różne formalizmy: od języka C, poprzez pseudopascal do opisu słownego.
Efektywność (złożoność) algorytmów można porównywać empirycznie bądź teoretycznie. Wadą pierwszej metody jest jej zależność od implementacji oraz fakt, źe zwykle można przetestować tylko niewielką grupę danych. Będziemy zajmować się głównie drugą metodą. Złożoność algorytmów będziemy określać funkcją rozmiaru danych.
Przykład 3 Przykłady określenia rozmiaru danych.
Problem
Wyszukiwanie elementu w ciągu Mnożenie macierzy Sortowanie ciągu liczb Przechodzenie drzewa binarnego Rozwiązywanie układu równań Problemy grafowe
Rozmiar danych
# elementów w ciągu Rozmiary macierzy
# elementów w ciągu
# węzłów w drzewie
równań lub # zmiennych lub obie
# wierzchołków lub # krawędzi lub obie.
3