270 likes | 450 Views
Równania rekurencyjne. Złożoność obliczeniowa – miara efektywności algorytmu. Złożoność obliczeniowa wyraża zależność czasu „t” wykonywania algorytmu (tj. liczby operacji niezbędnych do wykonania algorytmu) od liczby elementów „n” zbioru (n) na którym działa algorytm. t=f(n)
E N D
Złożoność obliczeniowa – miara efektywności algorytmu • Złożoność obliczeniowa wyraża zależność czasu „t” wykonywania algorytmu (tj. liczby operacji niezbędnych do wykonania algorytmu) od liczby elementów „n” zbioru (n) na którym działa algorytm. • t=f(n) • Ponieważ często trudno określić dokładną postać funkcji, stosuje się więc, postać asymptotyczną
Notacja Θ • Dla danej funkcji g(n) oznaczamy przez Θ (g(n)) zbiór funkcji Θ(g(n))={f(n): istnieją dodatnie stałe c1, c2 i n0 takie, że 0≤c1g(n) ≤f(n) ≤c2g(n) dla wszystkich n ≥n0} • Mówimy, że g(n) jest asymptotycznie dokładnym oszacowaniem dla f(n) • Do oznaczenia wartości stałej lub funkcji stałej względem pewnej zmiennej będziemy używać Θ(1).
c2g(n) f(n) c1g(n) n n0 Notacja Θ
Notacja O • Dla danej funkcji g(n) oznaczamy przez O (g(n)) zbiór funkcji O(g(n))={f(n): istnieją dodatnie stałe c i n0 takie, że 0≤ f(n) ≤cg(n) dla wszystkich n ≥n0} • Notacja O określa asymptotyczną granicę górną.
cg(n) f(n) n n0 Notacja O
Notacja Ω • Dla danej funkcji g(n) oznaczamy przez Ω (g(n)) zbiór funkcji Ω (g(n))={f(n): istnieją dodatnie stałe c i n0 takie, że 0≤cg(n) ≤f(n) dla wszystkich n ≥n0} • Notacja Ω określa asymptotyczną granice dolną. • Twierdzenie Dla każdych dwóch funkcji f(n) i g(n) zachodzi zależność f(n)= Θ(g(n)) wtedy i tylko wtedy gdy f(n)=O(g(n)) i f(n)= Ω(g(n)).
f(n) cg(n) n n0 Notacja Ω
Notacja o • Dla danej funkcji g(n) oznaczamy przez o (g(n)) zbiór funkcji o(g(n))={f(n): dla każdej dodatniej stałej c istnieje stała n0 >0 taka, że 0≤f(n)<cg(n) dla wszystkich n ≥n0} • Dla danej funkcji g(n) oznaczamy przez ω (g(n)) zbiór funkcji ω (g(n))={f(n): dla każdej dodatniej stałej c>0 istnieje stała n0 >0 taka, że 0≤cg(n) <f(n) dla wszystkich n ≥n0} Notacja ω
Zależności rekurencyjne • Czas algorytmu, który odwołuje się rekurencyjnie do samego siebie, można opisać zależnością rekurencyjną , która wyraża czas dla podproblemów rozmiaru n za pomocą czasu dla podproblemów mniejszych rozmiarów. • Przykład funkcji rekurencyjnej – funkcja potęga:
Rekurencje • Rekurencja jest równaniem lub nierównością opisującą funkcję złożoności w zależności od jej wartości dla danych wejściowych o mniejszych rozmiarach. • Można wyróżnić trzy metody rozwiązywanie rekurencji: • metoda podstawiania • metoda iteracyjna • metoda rekurencji uniwersalnej
Metoda podstawiania • Metoda ta najpierw wymaga odgadnięcia postaci rozwiązania a następnie wykazania przez indukcję, że jest ono poprawne. Konieczne tez jest znalezienie odpowiednich stałych. • Metoda ta może być używana do określenia górnego albo dolnego oszacowania na wartości rozwiązania rekurencji.
Metoda podstawianiaPrzykład 1 Obliczyć ograniczenie górne funkcji zadanej zależności rekurencyjną Rozwiązanie: Zgadujemy, ze rozwiązaniem będzie T(nO(nlgn). Udowodnimy, że T(n)≤cnlgn dla dobrze wybranej stałej c>0. Zakładamy, ze ograniczenie zachodzi dla tzn. gdzie lg to log2
Metoda podstawianiaPrzykład 1 Mamy: T(n) ≤cnlg(n/2)+n =cnlgn-cnlg2+n =cnlgn-cn+n ≤cnlgn spełnione dla c≥1
Zgadywanie rozwiązania • Jeżeli rekurencja jest podobna do innej, dla której znamy rozwiązanie, można spróbować podstawić postać rozwiązania tej innej funkcji. • Można też udowodnić najpierw zgrubne górne oraz dolne oszacowanie a następnie zmniejszać błąd oszacowania aż się dojdzie do poprawnego rozwiązania
Przykład 2Zamiana zmiennych • Czasami stosując zabiegi algebraiczne można upodobnić rekurencją do innej wcześniej znanej. • Niech będzie dana równanie rekurencyjne: Dla wygodny nie przejmujemy się czy zaokrągleniami wartości takich jak√n. Podstawiając m=lgn otrzymujemy: T(2m)=2T(2m/2)+m Możemy teraz podstawić S(m)=T(2m), otrzymując rekurencję S(m)=2S(m/2)+m podobną do rekurencji w przykładzie 1 i mająca takie samo rozwiązanie: S(m)=O(mlgm). Zamieniając ponownie S(m) na T(n) otrzymujemy T(n)=T(2m)=S(m)=O(mlgm)=O(lgnlglgn).
Metoda iteracyjna • Polega na rozwijaniu (iterowaniu) rekurencji i wyrażeniu jej jako sumy składników zależnych tylko od n oraz warunków brzegowcyh. Następnie można użyć technik sumowania do oszacowania rozwiązania.
Metoda rekurencji uniwersalnejTwierdzenie o rekurencji uniwersalnej
Bibliografia • Th.H. Cormen, Ch.E. Leiserson, R. L. Rivest,, „Wprowadzenie do algorytmów”, Wydawnictwa Naukowo-Techniczne, Warszawa 2001;