Implementacja algorytmu z powrotami w postaci drzewa

Wielkość: px
Rozpocząć pokaz od strony:

Download "Implementacja algorytmu z powrotami w postaci drzewa"

Transkrypt

1 90 Implementacja algorytmu z powrotami w postaci drzewa Drzewo jest właściwą strukturą do przechowania informacji o możliwych drogach poszukiwania rozwiązania za pomocą algorytmu z powrotami. Poniższy rysunek przedstawia początkową część drzewa, tak zwanego drzewa poszukiwań, w którym wszystkie możliwe ścieżki zaczynające się od korzenia drzewa są możliwymi drogami w labiryncie, zaczynającymi się od pola o numerze 1. Jest to drzewo stopnia czwartego. Znając wszystkie zbiory S i stosunkowo łatwo jest napisać rekurencyjny algorytm generujący takie drzewo. labirynt Rys.49 Początkowa część drzewa poszukiwań dla labiryntu z rys. 47, gdy polem wyjściowym jest pole o numerze 1

2 91 Ponieważ drzewo takie przedstawia wszystkie możliwe ścieżki, jego rozległość, a więc i zajętość pamięci, jest znaczna. Natomiast niewątpliwą zaletą takiej reprezentacji jest możliwość przeglądania drzewa przy użyciu prostych metod, na przykład rozszerzonej metody preorder, w której liczba wywołań rekurencyjnych, jak również głębokość rekurencji, będzie zaledwie równa głębokości drzewa. Jest oczywistym, że kształt drzewa, będzie zależał od uporządkowania wartości w poszczególnych zbiorach S i, powinniśmy więc przyjąć uporządkowanie generujące drzewo o możliwie małej wysokości, co zniweluje głębokość rekursji dla algorytmu przeglądającego drzewo. Pojedyncze drzewo poszukiwań pozwala badać jedynie ścieżki rozpoczynające się w punkcie umieszczonym w korzeniu drzewa. Dlatego dla pełnej reprezentacji labiryntu musimy utworzyć las zawierający drzewa rozpoczynające się od wszystkich punktów labiryntu. Aby więc można było stosować algorytm pozwalający badać ścieżki między dwoma dowolnymi polami labiryntu musimy dysponować strukturą zajmującą ogromny obszar pamięci. Ponieważ zajętość pamięci rośnie tutaj wykładniczo ze wzrostem rozmiarów labiryntu, dla większych labiryntów stosowanie reprezentacji opartej o drzewa może okazać się niemożliwe. Dla porównania zajętość pamięci przy wykorzystaniu reprezentacji w postaci zbiorów jest dla naszego labiryntu nie większa niż 25 x 4 słowa pamięci, a co najważniejsze rośnie liniowo ze wzrostem liczby pól labiryntu. Pozostaje problem złożoności czasowej.

3 92 Ćwiczenia do samodzielnego rozwiązania: 1. Dlaczego stopień drzewa poszukiwań z rys. 49 wynosi cztery? 2. Czy drzewo poszukiwań z rys. 49 zawiera powtarzające się węzły, i dlaczego? 3. Czy oprócz metody preorder do przeglądania drzewa z rys. 49 użyć można innych metod (inorder, postorder) a jeśli tak, to w jakich sytuacjach byłoby to uzasadnione? 4. Zaproponuj rekurencyjne algorytmy oparte o schemat preorder: a) tworzący drzewo poszukiwań dla danego punktu początkowego na podstawie danych zbiorów S i, b) obliczający ilość wszystkich możliwych ścieżek między zadanym punktem początkowym a końcowym, c) podający długość najkrótszej ścieżki między zadanym punktem początkowym a końcowym, wykorzystując wygenerowane drzewo poszukiwań. Metody usprawniania algorytmów o dużej złożoności czasowej Cały szereg dotychczas poznanych algorytmów charakteryzowało się wykładniczą złożonością czasową. Były to algorytmy, w których czas obliczeń wzrastał nieprawdopodobnie szybko ze wzrostem rozmiarów struktury,

4 93 której dotyczyły. Związane to było najczęściej z użyciem rekurencji. Przypomnijmy w tym miejscu takie algorytmy, jak: rekurencyjny algorytm obliczający n-tą liczbę Fibonacciego, algorytm sortowania szybkiego, algorytm szukania w głąb dla grafu, ogólny algorytm z powrotami. Duże zapotrzebowanie na czas obliczeń całkowicie uniemożliwia stosowanie takich algorytmów do rozwiązywania problemów, których rozmiary są dość znaczne. Na szczęście wiele konkretnych problemów posiada specyfikę, pozwalającą na usprawnienie algorytmów, które dotychczas podawaliśmy w czystej postaci. Ogólnie metody usprawniania algorytmów o dużej złożoności czasowej dzielimy na dwie duże grupy: - metody systematyczne, - metody heurystyczne. W kolejnych rozdziałach postaramy się przybliżyć na czym metody te polegają, opierając się na wybranych, charakterystycznych przykładach. Metody systematyczne Cechą charakterystyczną metod systematycznych jest pewność. Ich stosowanie nie wpływa na jakość algorytmu, w szczególności: nie zmniejsza szans na znalezienie rozwiązania, w niczym nie ogranicza ilości rozwiązań, czy ich dokładności. Istnieje bardzo dużo różnego rodzaju metod usprawniania algorytmów w sposób systematyczny. Prawie zawsze zależą on od specyfiki rozwiązywanego problemu. W niniejszym rozdziale omówimy trzy najczęściej spotykane metody.

5 94 Metoda obcinania gałęzi Metoda ta polega, mówiąc ogólnie, na rezygnacji z pewnych dużych obszarów potencjalnych rozwiązań w oparciu o stwierdzenia zaprzeczające istnieniu rozwiązań w tych obszarach. Jeśli problem byłby przedstawiony w postaci drzewa ( takiego jak drzewo poszukiwań ), to obcinanie gałęzi będzie polegać na zaniechaniu poszukiwań w gałęzi ( poddrzewie ) zaczynającym się od określonego węzła. Można tego dokonać tylko wtedy, jeśli mamy uzasadnioną pewność, że wybór tego węzła i wszystkich jego następników nie prowadzi do rozwiązań. Do jak dużych usprawnień algorytmu może prowadzić metoda obcinania gałęzi pokażemy posługując się klasycznym przykładem tak zwanego problemu ośmiu hetmanów. Problem ten sprowadza się do odpowiedzi na pytanie: Na ile różnych sposobów można ustawić na szachownicy o rozmiarach 8 x 8 osiem hetmanów, aby się wzajemnie nie szachowały? Algorytm rozwiązania tego problemu w czystej postaci, to jest opartej tylko na regułach szachowania, wymaga dla n=8 astronomicznej liczby badań 4.4 x Stosując metodę obcinania gałęzi wykluczymy przede wszystkim takie ustawienia hetmanów, które zawierają dwie figury w tym samym wierszu, w tej samej kolumnie, na tej samej przekątnej. Taka eliminacja ogranicza liczbę ustawień do zbadania do 2056 ustawień.

6 95 Metoda sklejania gałęzi Metoda sklejania (łączenia) gałęzi jest kolejnym przykładem metody systematycznej. Jeśli szukamy pewnych rozwiązań a w drzewie poszukiwań istnieje więcej poddrzew izomorficznych (takich samych jak badane poddrzewo), to wystarczy zbadać tylko jedno, a otrzymany wynik wykorzystać w innych miejscach wystąpienia takiego poddrzewa. Okazuje się, że zastosowanie metody sklejania gałęzi do algorytmu rozwiązującego problem ośmiu hetmanów, jako kolejnej metody systematycznej po wcześniejszym zastosowaniu metody obcinania gałęzi, pozwala zredukować liczbę badań już tylko do 801 węzłów. Metoda dekompozycji Wśród metod systematycznych szczególnie ważną pozycje zajmuje metoda zwana metodą dekompozycji problemu, lub metodą dziel i zwyciężaj. Jej zasadnicza idea została zastosowana w omawianym już algorytmie sortowania szybkiego Quick Sort dla tablic. Ogólnie mówiąc polega ona na rozłożeniu rozwiązywane problemu na k podproblemów ( jeśli jest to oczywiście możliwe ), rozwiązaniu każdego z nich, a następnie połączeniu rozwiązań cząstkowych w jedną całość. Wzrasta wtedy zapotrzebowanie na pamięć, trzeba bowiem gdzieś przechowywać rozwiązania cząstkowe przed ich zcaleniem, ale może prowadzić do znacznego skrócenia czasu obliczeń.

7 96 Załóżmy, że rozwiązanie wymaga czasu C * 2 n, gdzie n jest rozmiarem zadania, a C - pewną stałą. Po zastosowaniu dekompozycji czas obliczeń skraca się do k *C * 2 n/k + T, gdzie T jest czasem potrzebnym na połączenie wszystkich rozwiązań cząstkowych. Jeśli k nie jest duże i połączenie nie jest zbyt kosztowne, metoda ta może dać znaczne skrócenie czasu obliczeń. Metody heurystyczne Metody heurystyczne stosujemy, gdy nie ma możliwości posłużenia się metodami systematycznymi. Idea tych metod polega na przyjęciu pewnych założeń, co do których nie mamy pewności, lub nawet wiemy, że nie są słuszne w całym obszarze działania algorytmu, ale które bardzo wspomagają poszukiwanie rozwiązań. Postępujemy tak mając świadomość, że w pewnych, chociaż mniej prawdopodobnych sytuacjach, zastosowana metoda heurystyczna może utrudnić szybkie znalezienie rozwiązania, a czasem nawet uniemożliwić w ogóle jego znalezienie. Po metody heurystyczne będziemy więc sięgać, gdy nie zależy nam na znalezieniu wszystkich rozwiązań i możemy zadowolić się jednym rozwiązaniem, które jednak musi być znalezione bardzo szybko (typowa sytuacja z gier komputerowych). W innych jeszcze przypadkach, gdy istnienie rozwiązań jest bardzo wątpliwe, warto skorzystać z metod heurystycznych i być może w krótkim czasie znaleźć jakieś rozwiązanie. Jest bardzo wiele rozwiązań heurystycznych, tak jak wiele jest różnych typów algorytmów wymagających usprawnienia.

8 97 W odniesieniu do algorytmu poszukującego drogi w labiryncie od pola a do pola b, jeśli wartość a jest mała, a wartość b duża, stosowanie heurystyki mogłoby polegać na ustawieniu wartości we wszystkich zbiorach S i w porządku malejącym. W ten sposób zapewnilibyśmy wybory pól o dużych wartościach w pierwszej kolejności i większe prawdopodobieństwo poruszania się po krótszej ścieżce a co za tym idzie szybsze osiągnięcie celu. Przyjmując taką heurystykę musimy mieć świadomość, że przy pewnych szczególnych ograniczeniach, występujących w labiryncie, przyjęcie takiej heurystyki może utrudnić znalezienie rozwiązania. Szacowanie złożoności obliczeniowej algorytmów Wykonanie każdego algorytmu wymaga określonego czasu pracy komputera i określonej ilości pamięci. Jak to już podkreślaliśmy, dla pewnych klas algorytmów, czas ich działania lub rozmiar potrzebnej pamięci zwiększa się bardzo szybko ze wzrostem rozmiaru zadania. Pojęcie rozmiaru zadania, jak również innych pojęć, zdefiniujemy sobie w dalszej części tego rozdziału dokładniej. Na razie założymy, są one albo intuicyjnie dość zrozumiałe, albo ich znaczenie zostało już wcześniej zasygnalizowane. Załóżmy, że dysponujemy komputerem, który pracuje bez przerwy przez 24 godz. wykonując tylko 10 5 operacji jednostkowych na sekundę.

9 98 Algorytm A 1 A 2 A 3 A 4 A 5 A 6 Klasa algorytmu O(N) O(N*log N) O(N 2 ) O(N 3 ) O(2 N ) O(N!) Maksymalny rozmiar zadania n 1 =864*10 7 n 2 =250*10 6 n 3 =900*10 2 n 4 =200*10 1 n 5 = 33 n 6 = 13 Maksymalny rozmiar zadania po 10-krotnym zwiększeniu szybkości 10* n 1 ok. 10* n 2 dla n 2 >>1 3.16* n * n 4 n Rys. 50 Tabela maksymalnych rozmiarów zadania, które można rozwiązać w czasie 24 godz. dysponując algorytmami różnych klas. Trzecia kolumna powyższej tabeli pokazuje, jakie mogą być maksymalne rozmiary zadania, które można rozwiązać w czasie 24 godz. dla algorytmów różnych klas. Ostania kolumna natomiast, jak zwiększy się maksymalny rozmiar zadania po 10-krotnym zwiększeniu szybkości obliczeń przez komputer. Wyniki zamieszczone w tej tabeli pozwalają ocenić, jak ważną sprawą jest dysponowanie algorytmem odpowiedniej klasy. Widać, że dostatecznie satysfakcjonujące są algorytmy klasy O(N) i O(N * log N), niestety bardzo często zmuszeni jesteśmy sięgać po algorytmy klasy O(N 2 ). Szokująco niskie wyniki dają natomiast algorytmy A 5 i A 6, to jest algorytmy o wykładniczej złożoności obliczeniowej. Trzeba tu bowiem aż całej doby, aby doczekać się na wynik działania algorytmu, gdy rozmiar rozwiązywanego zadania wynosi zaledwie kilkadziesiąt, lub nawet kilkanaście.

10 99 Ostania kolumna tej tabeli uzmysławia nam, że rozwój sprzętu (coraz szybsze procesory i pamięci) niewiele poprawiają sytuację, zwłaszcza dla algorytmów o dużej złożoności obliczeniowej, dla których maksymalny rozmiar zadania nawet nie wzrasta liniowo ze wzrostem mocy obliczeniowej (algorytm A 5 ), lub nawet jest tak mały, że trudno go uchwycić (algorytm A 6 ). Tak więc ogromny postęp w rozwoju sprzętu komputerowego, jaki cały czas obserwujemy, nie wpłynie w zasadniczy sposób na czas obliczeń, jeśli do rozwiązywania problemów stosować będziemy nieodpowiednie algorytmy. Rola algorytmiki, dziedziny informatyki teoretycznej, zajmującej się opracowywaniem nowych algorytmów i doskonaleniem już istniejących, jest ogromna. Odwróćmy teraz sytuacje i załóżmy, że dysponujemy komputerem, który wykonuje 10 6 operacji jednostkowych na sekundę i podajmy czasy wykonywania się programów opartych o algorytmy różnych klas, gdy rozmiary zadania wynoszą: 10, 20 i 30. Algorytm A 1 A 2 A 3 A 4 A 5 A 6 Klasa algorytmu O(N) O(N 2 ) O(N 3 ) O(2 N ) O(3 N ) O(N!) N=10 N=20 N=30 1*10-5 sek 1*10-4 sek 1*10-3 sek 1*10-3 sek 0.59 sek 3.6 sek 2*10-5 sek 4*10-4 sek 8*10-3 sek 1 sek 58 min 768 wieków 3*10-5 sek 9*10-5 sek 2.7*10-2 sek 17.9 min 6.5 lat 8.4 *10 16 wieków Rys. 51 Czasy wykonywania się programów oparte o algorytmy różnych klas.

11 100 Wyniki zamieszczone w tej tabeli potwierdzają wnioski wynikające z analizy wyników zamieszczonych w poprzedniej tabeli i jeszcze bardziej utwierdzają w przekonaniu, że sięganie po algorytmy o wykładniczej złożoności obliczeniowej dla zadań o rozmiarze przekraczającym kilkanaście mija się z celem. Uściślimy teraz, stosowane dotychczas w sposób dość intuicyjny, pojęcia. Zobaczymy też, jak w prosty sposób, nie uciekając się do rozbudowanego aparatu matematycznego, szacować można złożoność obliczeniową algorytmów. Następujące operacje, zapisane w języku wysokiego poziomu, uważać będziemy dla celów szacowania złożoności obliczeniowej, za operacje jednostkowe: - wykonanie operatora numerycznego, relacyjnego lub logicznego, - nadanie wartości zmiennej typu prostego, - obliczenie wartości zmiennej indeksowanej, wskazywanej lub pola struktury, - inicjowanie procedury lub funkcji, - przekazanie wartości parametru aktualnego, - wykonanie operacji wejścia lub wyjścia. Dla celów szacowania złożoności obliczeniowej założyć można, że czas wykonywania wszystkich tych operacji jest taki sam. Załóżmy teraz, że mamy algorytm K, dla którego dla każdego zestawu danych wejściowych d D (D jest zbiorem zestawów danych wejściowych), obliczenia algorytmu dochodzą do punktu końcowego. Przez T(d) oznaczać

12 101 będziemy liczbę operacji jednostkowych wykonywanych przez algorytm K dla d D. Funkcję T(d) nazywamy pełną funkcją kosztu. Jest to funkcja T: D N ze zbioru danych wejściowych w zbiór liczb naturalnych (liczbę operacji jednostkowych). Zwykle bardzo trudno jest ustalić i opisać pełną funkcję kosztu, jest ona bowiem trudna do wyznaczenia i zapisania w jednolity, czytelny sposób dla każdego z możliwych zestawów danych wejściowych. Z powyższych powodów określamy zwykle tylko rząd wielkości funkcji. Z praktycznego punktu widzenia jest zresztą niecelowe wyznaczanie pełnej funkcji kosztu. Niewiele informacji daje nam bowiem opis zachowania się algorytmu w sytuacjach najlepszego przypadku, czy nawet średnie zachowanie się algorytmu. Natomiast interesujące są sytuacje najgorszego przypadku, gdyż tutaj tkwi niebezpieczeństwo znacznego wydłużenia czasu obliczeń. Określmy teraz pojęcie rzędu funkcji. Niech X będzie dowolnym zbiorem. Dysponujemy dwiema funkcjami f: X R oraz g: X R. Definicja: Powiemy, że funkcja f jest co najwyżej rzędu funkcji g, co zapiszemy f=o(g), jeśli istnieje stała c>0, takie że relacja f(x) c * g(x) zachodzi dla prawie wszystkich wartości x X (to jest dla wszystkich, za wyjątkiem pewnego, niewielkiego, skończonego, być może pustego, podzbioru X). Tym niewielkim, skończonym podzbiorem będą, w przypadku szacowania złożoności obliczeniowej, te zbiory

13 102 danych, dla których pełna funkcja kosztu T(d) nie da się dokładnie oszacować przez jakąś prostą funkcję g(n). Sytuacja ta zresztą dotyczy zwykle niewielkich wartości N, a ponieważ jesteśmy zainteresowani szacowaniem złożoności obliczeniowej dla dużych N, możemy pominąć te niewielkie zbiory danych wejściowych i szacować T(d) przez g(n) jako O(g(N)) mówiąc o funkcji kosztu niepomyślnego przypadku lub po prostu o funkcji kosztu. W literaturze spotkać można jeszcze inne określenia dla funkcji kosztu: funkcja złożoności czasowej (lub złożoność czasowa), pesymistyczna złożoność czasowa, klasa algorytmu. Teraz zdefiniujemy sobie pojęcie rozmiaru danych. Ponieważ uzależnianie funkcji kosztu od wszystkich danych komplikuje sprawę konstruowania tej funkcji, wyróżnia się spośród danych te, które mają największy wpływ na wartość funkcji kosztu. Na przykład, w algorytmie wykonującym mnożenie macierzy, gdzie D = < A, B, m, n, k >, macierz A ma rozmiar m*n a macierz B ma rozmiar n*k, wpływ na funkcje kosztu mają tylko rozmiary obu macierzy, to jest m, n i k. Chociaż w szeregu algorytmów również postać samych danych (ich wartość, sposób uporządkowania, itd.) wpływa na czas działania algorytmów, dla algorytmu mnożenia macierzy można przyjąć, że rozmiarem danych, oznaczmy go przez d, jest d =max(m,n,k). Algorytm mnożenie macierzy jest jednak algorytmem pod tym względem trochę nietypowym. Na ogół łatwo jest określić, co jest rozmiarem danych. Są to: rozmiar

14 103 jednowymiarowej tablicy, liczba elementów w liście liniowej jednokierunkowej, liczba węzłów w drzewie, lub jego wysokość, liczba węzłów i/lub liczba krawędzi w grafie. Podobnie, przy szacowaniu złożoności obliczeniowej algorytmów rozważa się tylko pewne wyróżnione operacje jednostkowe, zwane operacjami dominującymi algorytmu. W algorytmach wykorzystujących iterację są to zwykle warunki kontrolujące pętle iteracyjne. Ilość wykonanych badań takiego warunku jest w przybliżeniu równa ilości wykonań wnętrza pętli iteracyjnej. Instrukcje wewnętrzne pętli, o ile same nie są pętlami lub wywołaniami iteracyjnymi, nie mają wpływu na szacowanie kosztu algorytmu, bowiem od ich ilości zależy tylko wartość stałej przez którą mnożymy ilość wykonań pętli. Ponieważ wyznaczamy tylko rząd funkcji, nie ma to żadnego znaczenia dla szacowania złożoności czasowej algorytmu. Tak więc otrzymaliśmy bardzo prosty przepis na szacowania złożoności obliczeniowej algorytmów iteracyjnych pod warunkiem, że potrafimy dobrze zidentyfikować rozmiar danych a także wskazać wszystkie operacje dominujące algorytmu. O wiele trudniej jest szacować funkcje kosztu dla algorytmów rekurencyjnych. To jednak przekracza ramy naszego wykładu. Poniższy przykład zilustruje, jak szacować złożoność obliczeniową algorytmów iteracyjnych. Zadanie polega na oszacowaniu funkcji kosztu dla algorytmu na podstawie fragmentów programu, zapisanego w języku C

15 104 int a[n];..... for (int i:=2; i<= n; i++) 1: if (a[i-1]>a[i]) then { v:=a[i]; j:=i-1; do { a[j+1]:=a[j]; j:=j-1; } 2: while( a[j] <= v ); a[j+1]:=v; } Badanie warunku zapisanego w linii 1 wykona się dokładnie n-1 razy, w linii 2 co najwyżej i-1 razy (tzn. dla j=i-1, i-2,..., 0). Tak więc ogólna liczba porównań jest ograniczona od od góry przez n (i-1) + (i-1) = n-1 + n*(n+1)/2 1 (n-1) = = 0.5*n *n 1 i=2 Ponieważ otrzymana funkcja może być ograniczona przez funkcję n 2 możemy stwierdzić, że złożoność obliczeniowa tego algorytmu wynosi O(n 2 ). Na koniec tego rozdziału zdefiniujemy jeszcze w sposób ostateczny pojęcia algorytmu o wielomianowej i wykładniczej złożoności czasowej. Definicja: Algorytmem wielomianowym nazywać będziemy algorytm, którego funkcją złożoności czasowej jest O(p(N)), gdzie p jest pewnym wielomianem a N rozmiarem danych. Definicja: Każdy algorytm, którego funkcja złożoności czasowej nie może być ograniczona wielomianem, nazywamy algorytmem

16 105 wykładniczym (chociaż jego funkcja złożoności czasowej niekoniecznie musi być funkcją wykładniczą). Ćwiczenia do samodzielnego rozwiązywania: 1. Spróbuj oszacować funkcje złożoności obliczeniowej dla algorytmów omówionych w treści wykładu. Problemy algorytmicznie trudne Już od bardzo dawna ludzie zajmujący się algorytmami starali się odpowiedzieć sobie na pytanie: Czy dla problemów, dla których nie znaleziono dotychczas rozwiązujących je w wielomianowym czasie algorytmów, takie algorytmy w ogóle istnieją? Dzisiaj można stwierdzić, że odpowiedź na to pytanie jest bardzo złożona. Wszystkie omówione w trakcie wykładu algorytmy rozwiązywały problemy należące do wielkiej rodziny problemów, nazwanej problemami decyzyjnymi. Odrębna rodzinę stanowią, na przykład, problemy zwane problemami optymalizacyjnymi. Problemami z tego zakresu nie zajmowaliśmy się. Klasę problemów decyzyjnych nazwano NP. W klasie tej zawarta jest klasa problemów nazwana klasą P. Definicja: Klasę problemów P tworzą wszystkie problemy decyzyjne, dla których istnieją rozwiązujące je w wielomianowym czasie algorytmy.

17 106 Najbardziej interesującą klasą jest klasa tzw. problemów NP zupełnych, do której należą klasycznie trudne problemy decyzyjne i dla których, mimo usiłowań, nie udało się znaleźć algorytmów wielomianowych. Prawdopodobnie można je rozwiązywać tylko przy pomocy algorytmów wykładniczych. Aktualna lista problemów NP zupełnych obejmuje już kilka tysięcy problemów z różnych dziedzin. Oznaczałoby to, że klasa problemów P jest właściwą podklasą NP, a ponadto, że klasy problemów P i NP - zupełnych są rozłączne. klasa NP klasa P problemy NP- zupełne Rys. 52 Podział klas problemów z punktu widzenia istnienia dla nich algorytm wielomianowych. K o n i e c w y k ł a d u

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

Podstawy Informatyki. Sprawność algorytmów

Podstawy Informatyki. Sprawność algorytmów Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Algorytm 1. Termin algorytm jest używany w informatyce

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Więcej o sprawności algorytmów Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie Załóżmy, że możemy wykonać dane zadanie przy użyciu dwóch algorytmów: jednego o złożoności czasowej

Bardziej szczegółowo

Zasady analizy algorytmów

Zasady analizy algorytmów Zasady analizy algorytmów A więc dziś w programie: - Kilka ważnych definicji i opisów formalnych - Złożoność: czasowa i pamięciowa - Kategorie problemów - Jakieś przykłady Problem: Zadanie możliwe do rozwiązania

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa). Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z

Bardziej szczegółowo

Znajdowanie wyjścia z labiryntu

Znajdowanie wyjścia z labiryntu Znajdowanie wyjścia z labiryntu Zadanie to wraz z problemem pakowania najcenniejszego plecaka należy do problemów optymalizacji, które dotyczą znajdowania najlepszego rozwiązania wśród wielu możliwych

Bardziej szczegółowo

5. Podstawowe algorytmy i ich cechy.

5. Podstawowe algorytmy i ich cechy. 23 5. Podstawowe algorytmy i ich cechy. 5.1. Wyszukiwanie liniowe i binarne 5.1.1. Wyszukiwanie liniowe Wyszukiwanie jest jedną z najczęściej wykonywanych operacji na strukturach danych i dotyczy wszystkich,

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie. Sortowanie Dane wejściowe: ciąg n-liczb (kluczy) (a 1, a 2, a 3,..., a n 1, a n ) Dane wyjściowe: permutacja ciągu wejściowego (a 1, a 2, a 3,..., a n 1, a n) taka, że a 1 a 2 a 3... a n 1 a n. Będziemy

Bardziej szczegółowo

Poprawność semantyczna

Poprawność semantyczna Poprawność składniowa Poprawność semantyczna Poprawność algorytmu Wypisywanie zdań z języka poprawnych składniowo Poprawne wartościowanie zdań języka, np. w języku programowania skutki wystąpienia wyróżnionych

Bardziej szczegółowo

Programowanie dynamiczne cz. 2

Programowanie dynamiczne cz. 2 Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz. 2 16 kwietnia 2019 1 / 19 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325

prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325 PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325 DRZEWA Drzewa to rodzaj

Bardziej szczegółowo

Złożoność algorytmów. Wstęp do Informatyki

Złożoność algorytmów. Wstęp do Informatyki Złożoność algorytmów Złożoność pamięciowa - liczba i rozmiar struktur danych wykorzystywanych w algorytmie Złożoność czasowa - liczba operacji elementarnych wykonywanych w trakcie przebiegu algorytmu Złożoność

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 3 2 Złożoność obliczeniowa algorytmów Notacja wielkie 0 Notacja Ω i Θ Algorytm Hornera Przykłady rzędów

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Złożoność obliczeniowa, poprawność programów Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XII Jesień 2013 1 / 20 Złożoność obliczeniowa Problem Ile czasu

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to wprowadzili J. Hartmanis i R. Stearns. Najczęściej przez zasób rozumie się czas oraz pamięć dlatego

Bardziej szczegółowo

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Przeszukiwanie przestrzeni rozwiązań, szukanie na ślepo, wszerz, w głąb. Spis treści: 1. Wprowadzenie 3. str. 1.1 Krótki Wstęp

Bardziej szczegółowo

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH Transport, studia niestacjonarne I stopnia, semestr I Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Adam Wosatko Postać układu równań liniowych Układ liniowych równań algebraicznych

Bardziej szczegółowo

Heurystyki. Strategie poszukiwań

Heurystyki. Strategie poszukiwań Sztuczna inteligencja Heurystyki. Strategie poszukiwań Jacek Bartman Zakład Elektrotechniki i Informatyki Instytut Techniki Uniwersytet Rzeszowski DLACZEGO METODY PRZESZUKIWANIA? Sztuczna Inteligencja

Bardziej szczegółowo

Informatyka 1. Złożoność obliczeniowa

Informatyka 1. Złożoność obliczeniowa Informatyka 1 Wykład XI Złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: efektywność programów/algorytmów, sposoby zwiększania efektywności algorytmów, zasada 80 20, ocena efektywności

Bardziej szczegółowo

Metody numeryczne w przykładach

Metody numeryczne w przykładach Metody numeryczne w przykładach Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK, Toruń Regionalne Koło Matematyczne 8 kwietnia 2010 r. Bartosz Ziemkiewicz (WMiI UMK) Metody numeryczne w przykładach

Bardziej szczegółowo

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, Oznaczenia: Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze, to interesuje nas złożoność obliczeniowa

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych ĆWICZENIE 2 - WYBRANE ZŁOŻONE STRUKTURY DANYCH - (12.3.212) Prowadząca: dr hab. inż. Małgorzata Sterna Informatyka i3, poniedziałek godz. 11:45 Adam Matuszewski, nr 1655 Oliver

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 5 Prof. dr hab. inż. Jan Magott DMT rozwiązuje problem decyzyjny π przy kodowaniu e w co najwyżej wielomianowym czasie, jeśli dla wszystkich łańcuchów wejściowych

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące. Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące. Łukasz Kuszner pokój 209, WETI http://www.sphere.pl/ kuszner/ kuszner@sphere.pl Oficjalna strona wykładu http://www.sphere.pl/

Bardziej szczegółowo

Efektywność algorytmów

Efektywność algorytmów Efektywność algorytmów Algorytmika Algorytmika to dział informatyki zajmujący się poszukiwaniem, konstruowaniem i badaniem własności algorytmów, w kontekście ich przydatności do rozwiązywania problemów

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Algorytmy Równoległe i Rozproszone Część V - Model PRAM II Łukasz Kuszner pokój 209, WETI http://www.sphere.pl/ kuszner/ kuszner@sphere.pl Oficjalna strona wykładu http://www.sphere.pl/ kuszner/arir/ 2005/06

Bardziej szczegółowo

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott Struktury danych i złozoność obliczeniowa Prof. dr hab. inż. Jan Magott Formy zajęć: Wykład 1 godz., Ćwiczenia 1 godz., Projekt 2 godz.. Adres strony z materiałami do wykładu: http://www.zio.iiar.pwr.wroc.pl/sdizo.html

Bardziej szczegółowo

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.

Bardziej szczegółowo

Rekurencja. Przykład. Rozważmy ciąg

Rekurencja. Przykład. Rozważmy ciąg Rekurencja Definicje rekurencyjne Definicja: Mówimy, iż ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów tego ciągu, zwykle jest to pierwszy wyraz tego ciągu

Bardziej szczegółowo

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: Rekurencje Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie: T(n) = Θ(1) (dla n = 1) T(n) = 2 T(n/2) + Θ(n) (dla n

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Matematyka dyskretna dla informatyków

Matematyka dyskretna dla informatyków Matematyka dyskretna dla informatyków Część I: Elementy kombinatoryki Jerzy Jaworski Zbigniew Palka Jerzy Szymański Uniwersytet im. Adama Mickiewicza Poznań 2007 4 Zależności rekurencyjne Wiele zależności

Bardziej szczegółowo

5. Rozwiązywanie układów równań liniowych

5. Rozwiązywanie układów równań liniowych 5. Rozwiązywanie układów równań liniowych Wprowadzenie (5.1) Układ n równań z n niewiadomymi: a 11 +a 12 x 2 +...+a 1n x n =a 10, a 21 +a 22 x 2 +...+a 2n x n =a 20,..., a n1 +a n2 x 2 +...+a nn x n =a

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytm selekcji Hoare a. Łukasz Miemus Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego

Bardziej szczegółowo

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 3a: Złożoność obliczeniowa algorytmów http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Złożoność obliczeniowa i asymptotyczna

Bardziej szczegółowo

Maciej Piotr Jankowski

Maciej Piotr Jankowski Reduced Adder Graph Implementacja algorytmu RAG Maciej Piotr Jankowski 2005.12.22 Maciej Piotr Jankowski 1 Plan prezentacji 1. Wstęp 2. Implementacja 3. Usprawnienia optymalizacyjne 3.1. Tablica ekspansji

Bardziej szczegółowo

Metody numeryczne. materiały do wykładu dla studentów. 7. Całkowanie numeryczne

Metody numeryczne. materiały do wykładu dla studentów. 7. Całkowanie numeryczne Metody numeryczne materiały do wykładu dla studentów 7. Całkowanie numeryczne 7.1. Całkowanie numeryczne 7.2. Metoda trapezów 7.3. Metoda Simpsona 7.4. Metoda 3/8 Newtona 7.5. Ogólna postać wzorów kwadratur

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

Sortowanie przez scalanie

Sortowanie przez scalanie Sortowanie przez scalanie Wykład 2 12 marca 2019 (Wykład 2) Sortowanie przez scalanie 12 marca 2019 1 / 17 Outline 1 Metoda dziel i zwyciężaj 2 Scalanie Niezmiennik pętli - poprawność algorytmu 3 Sortowanie

Bardziej szczegółowo

Układy równań liniowych. Krzysztof Patan

Układy równań liniowych. Krzysztof Patan Układy równań liniowych Krzysztof Patan Motywacje Zagadnienie kluczowe dla przetwarzania numerycznego Wiele innych zadań redukuje się do problemu rozwiązania układu równań liniowych, często o bardzo dużych

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

Wykład 3. Metoda dziel i zwyciężaj

Wykład 3. Metoda dziel i zwyciężaj Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000

Bardziej szczegółowo

Efektywna metoda sortowania sortowanie przez scalanie

Efektywna metoda sortowania sortowanie przez scalanie Efektywna metoda sortowania sortowanie przez scalanie Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Metoda dziel i zwycięŝaj Dzielimy

Bardziej szczegółowo

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

Algorytmy w teorii liczb

Algorytmy w teorii liczb Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi,

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 20.11.2002 Algorytmy i Struktury Danych PIŁA ZŁOŻONE STRUKTURY DANYCH C za s tw or ze nia s tr uk tur y (m s ) TWORZENIE ZŁOŻONYCH STRUKTUR DANYCH: 00 0

Bardziej szczegółowo

Luty 2001 Algorytmy (4) 2000/2001

Luty 2001 Algorytmy (4) 2000/2001 Mając dany zbiór elementów, chcemy znaleźć w nim element największy (maksimum), bądź najmniejszy (minimum). We wszystkich naturalnych metodach znajdywania najmniejszego i największego elementu obecne jest

Bardziej szczegółowo

Podstawy Informatyki. Metody dostępu do danych

Podstawy Informatyki. Metody dostępu do danych Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s]. Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

Bardziej szczegółowo

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Piotr Modliński Wydział Geodezji i Kartografii PW 13 stycznia 2012 P. Modliński, GiK PW Rozw.

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

Matematyka dyskretna - 7.Drzewa Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja

Bardziej szczegółowo

Wykład 10 Grafy, algorytmy grafowe

Wykład 10 Grafy, algorytmy grafowe . Typy złożoności obliczeniowej Wykład Grafy, algorytmy grafowe Typ złożoności oznaczenie n Jedna operacja trwa µs 5 logarytmiczna lgn. s. s.7 s liniowa n. s.5 s. s Logarytmicznoliniowa nlgn. s.8 s.4 s

Bardziej szczegółowo

Lista liniowa dwukierunkowa

Lista liniowa dwukierunkowa 53 Lista liniowa dwukierunkowa Jest to lista złożona z elementów, z których każdy posiada, oprócz wskaźnika na element następny, również wskaźnik na element poprzedni. Zdefiniujmy element listy dwukierunkowej

Bardziej szczegółowo

AiSD zadanie trzecie

AiSD zadanie trzecie AiSD zadanie trzecie Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5 5 czerwca 2008 1 Wstęp Celem postawionym przez zadanie trzecie było tzw. sortowanie topologiczne. Jest to typ sortowania

Bardziej szczegółowo

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego. Kolejki Kolejka priorytetowa Kolejka priorytetowa (ang. priority queue) to struktura danych pozwalająca efektywnie realizować następujące operacje na zbiorze dynamicznym, którego elementy pochodzą z określonego

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA WYDZIAŁ INŻYNIERII ELEKTRYCZNEJ i KOMPUTEROWEJ Katedra Automatyki i Technik Informacyjnych Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew

Bardziej szczegółowo

składa się z m + 1 uporządkowanych niemalejąco liczb nieujemnych. Pomiędzy p, n i m zachodzi następująca zależność:

składa się z m + 1 uporządkowanych niemalejąco liczb nieujemnych. Pomiędzy p, n i m zachodzi następująca zależność: TEMATYKA: Krzywe typu Splajn (Krzywe B sklejane) Ćwiczenia nr 8 Krzywe Bezier a mają istotne ograniczenie. Aby uzyskać kształt zawierający wiele punktów przegięcia niezbędna jest krzywa wysokiego stopnia.

Bardziej szczegółowo

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH Transport, studia I stopnia rok akademicki 2011/2012 Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Adam Wosatko Uwagi wstępne Układ liniowych równań algebraicznych można

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 13 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Złożoność algorytmów czy to istotne, skoro

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy

Bardziej szczegółowo

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na

Bardziej szczegółowo

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.

Bardziej szczegółowo

Wykład 2. Poprawność algorytmów

Wykład 2. Poprawność algorytmów Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane: Wykład 4 grafy Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, E zbiór krawędzi, Grafy dzielimy na grafy skierowane i nieskierowane: Formalnie, w grafach skierowanych E jest podzbiorem

Bardziej szczegółowo

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych. Grafy Graf Graf (ang. graph) to zbiór wierzchołków (ang. vertices), które mogą być połączone krawędziami (ang. edges) w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków. Graf

Bardziej szczegółowo

Spacery losowe generowanie realizacji procesu losowego

Spacery losowe generowanie realizacji procesu losowego Spacery losowe generowanie realizacji procesu losowego Michał Krzemiński Streszczenie Omówimy metodę generowania trajektorii spacerów losowych (błądzenia losowego), tj. szczególnych procesów Markowa z

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy: Temat: Powtórzenie wiadomości z PODSTAW INFORMATYKI I: Pojęcia: złożoność czasowa algorytmu, rząd funkcji kosztu. Algorytmy. Metody programistyczne. Struktury danych. Literatura. A. V. Aho, J.E. Hopcroft,

Bardziej szczegółowo

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego

Bardziej szczegółowo

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 > Typy indeksów Indeks jest zakładany na atrybucie relacji atrybucie indeksowym (ang. indexing field). Indeks zawiera wartości atrybutu indeksowego wraz ze wskaźnikami do wszystkich bloków dyskowych zawierających

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Informacje podstawowe 1. Konsultacje: pokój

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Rozwiązywanie problemów metodą przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania Rozwiązywanie problemów metodą przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Reprezentacja problemu w przestrzeni stanów Jedną z ważniejszych metod sztucznej

Bardziej szczegółowo

Wykład z równań różnicowych

Wykład z równań różnicowych Wykład z równań różnicowych 1 Wiadomości wstępne Umówmy się, że na czas tego wykładu zrezygnujemy z oznaczania n-tego wyrazu ciągu symbolem typu x n, y n itp. Zamiast tego pisać będziemy x (n), y (n) itp.

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Rekurencja Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)! Pseudokod: silnia(n): jeżeli n == 0 silnia = 1 w przeciwnym

Bardziej szczegółowo