Algorytmy – c.d. struktury danych złożoność algorytmów

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

TRADYCYJNE METODY PLANOWANIA I ORGANIZACJI PROCESÓW PRODUKCYJNYCH
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Algorytmy – c.d. złożoność algorytmów struktury danych
Schemat blokowy M START KONIEC
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Wzorce.
Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Filip Andrzejewski Remigiusz Chiluta
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
ALGORYTM Co to jest algorytm?
Badania operacyjne. Wykład 1
Elementarne struktury danych Piotr Prokopowicz
ZŁOŻONOŚĆ OBLICZENIOWA
Opracowała: Elżbieta Fedko
P O D S T A W Y P R O G R A M O W A N I A
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Macierze Maria Guzik.
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Model danych oparty na listach
Tablice Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
Dynamiczne struktury danych 1
Algorytmy grafowe Reprezentacja w pamięci
Algorytmy i struktury danych
Wstęp do interpretacji algorytmów
CO TO JEST ALGORYTM!.
Zapis informacji Dr Anna Kwiatkowska.
ALGORYTMY Opracowała: ELŻBIETA SARKOWICZ
ALGORYTMY.
Podstawy programowania
POJĘCIE ALGORYTMU Pojęcie algorytmu Etapy rozwiązywania zadań
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
Podstawy programowania
Podstawy programowania II
TABLICE C++.
Algorytmy i struktury danych
dr hab. Ryszard Walkowiak prof. nadzw.
Budowanie tabel i relacji
Złożone typy danych Listy Tworzenie elastycznych baz danych
Podstawy programowania w języku C i C++
Jak tworzyć algorytmy.? Sposób krok po kroku..
Algorytmy.
Tablice w Turbo Pascalu.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Spis treści W świecie algortmów -Budowa algorytmu
Podstawy języka Instrukcje - wprowadzenie
ZAPIS BLOKOWY ALGORYTMÓW
Algorytmika.
ALGORYTMY Co to jest algorytm ? Cechy algorytmu Budowa algorytmów
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Algorytmy i Struktury Danych
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
Zapis blokowy algorytmów
Systemy informatyczne wprowadzenie
Algorytmy i struktury danych
Algorytmy- Wprowadzenie do programowania
opracowała: Anna Mikuć
Wstęp do interpretacji algorytmów
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Algorytmy. Co to jest algorytm? Przepis prowadzący do rozwiązania zadania.
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Sposoby zapisu algorytmu
Typy wyliczeniowe, kolekcje
Zbiory rozłączne.
Wstęp do Informatyki - Wykład 6
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Algorytmy – c.d. struktury danych złożoność algorytmów Przy opracowywaniu wykładu wykorzystano m.in.: http://www.algorytm.org/index.php?option=com_frontpage&Itemid=1 Wstęp do informatyki (materiały Wyższej Szkoły Informatyki) J. Sikorski

Przypomnienie Schematy blokowe Służą one do zapisu algorytmu w obrazowy sposób podając kierunek procesu obliczeń. Najważniejsze używane symbole: START, STOP PROCES (CZYNNOŚĆ) BLOK DECYZYJNY ODCZYT LUB ZAPIS DANYCH

Instrukcje złożone Przypomnienie powtarzaj I aż do W; Dopóki W wykonuj I; Dla N:=W1 do W2 wykonuj I;

Wróćmy do definicji… Algorytm to kompletny, jednoznaczny przepis przetworzenia w skończonym czasie pewnych danych wejściowych do pewnych danych wynikowych. Reprezentacja danych ma podstawowe znaczenie w informatyce!!!

Struktury danych Algorytmy wymagają danych początkowych i tworzą nowe dane.

Co to są dane? Ogólnie dane są zdefiniowane jako to wszystko co może być przetwarzane umysłowo lub komputerowo. Są to więc informacje, które posiadają określoną strukturę.

Pojęcie zmiennej Zmienne to informacje, której nadano strukturę. Związane są z obszarem pamięci przechowującym tę zmienną w postaci ciągu bitów. O sposobie prezentacji tych danych decyduje typ zmiennej. Najbardziej oczywistym typem są zmienne liczbowe (przechowujące liczby). - zmienne całkowite; - zmienne zmiennoprzecinkowe;   Typy zmiennych charakteryzują się: - zakresem (np. od -128 do + 127) - dokładnością (np. maksymalnie do 10 liczb po przecinku) - zbiorem operacji, które można na zmiennych wykonywać (np. dzielenie zmiennoprzecinkowe jest niedozwolone (problematyczne) dla zmiennych całkowitych).

Pojęcie zmiennej   Zmienne w informatyce symbolizowane są przez ciąg znaków i cyfr (ciąg alfanumeryczny), bez odstępów (spacji), bez polskich znaków, z możliwym znakiem podkreślenia, nie zaczynający się od cyfry. Dokładne zasady związane są z przyjęciem konkretnego systemu (np. danego języka programowania). Poprawne ciągi, które mogą symbolizować zmienne to np.: ala, nazwa_zmiennej, zmienna3, malyKotek, pi

Pojęcie zmiennej Najważniejszą cechą zmiennych jest to, że mogą one przechowywać DANE, które musimy przypisać. Bardzo ważne jest określenie tzw. instrukcji przypisania, symbolizowana najczęściej przez symbol := (dwukropek i równa się). Kompletne instrukcje na ogół kończy się znakiem ; (średnik).   Na przykład: Liczba := 5; // przypisaliśmy zmiennej o nazwie Liczba wartość 5 Liczba := 10; // zmieniliśmy zdanie i teraz ma wartość 10 Liczba := Liczba + 2; // Teraz do poprzedniej wartości dodaliśmy 2, więc Razem 12

Struktury danych Jedna z gałęzi informatyki zajmuje się strukturami danych, czyli organizacją danych różnych typów w logicznie powiązane ze sobą struktury.

Sposoby reprezentacji danych Przykład drzewa Przykład kolejki Dane numeryczne: całkowite, „rzeczywiste” posiadają określony zakres i dokładność Tablice Listy Stosy Kolejki Drzewa Grafy Przykłady list Przykład grafu Przykłady tablic Przykład stosu

Tablice Tablicą nazywamy złożoną strukturę danych, która zawiera zbiór elementów tego samego typu. Wyróżniamy: tablice jednowymiarowe tablice wielowymiarowe

Tablice jednowymiarowe Elementy tego samego typu znajdują się pod wspólną nazwą. Konkretny element wskazujemy za pomocą tzw. indeksu. Tablica o nazwie TAB, 8 elementów (liczby całkowite, ze znakiem), numerowane od 1 15 [0] 5 [1] -1 [2] 20 [3] 55 [4] 51 [5] 8 [6] 12 [7] 15 [0] 5 [1] -1 [2] 12 [3] 55 [4] 51 [5] 8 [6] [7] Jeśli chcemy w polu o indeksie [3] wpisać inną wartość (np. 20), to piszemy: TAB[3] := 20;

Tablice jednowymiarowe – wyszukiwanie minimum 15 [0] 5 [1] -1 [2] 12 [3] 55 [4] 51 [5] 8 [6] [7] min:=tablica[0]; i:=1; START Do zastanowienia: Jak wyglądałoby wyszukiwanie maksymalnego (minimalnego) elementu w tablicy uporządkowanej rosnąco? i >= N TAK NIE WYPISZ min min>tablica[i] TAK min:=tablica[i]; NIE STOP i:=i+1;

Tablice wielowymiarowe Np. jeśli chcemy zapisać tzw. „tabliczkę mnożenia” możemy utworzyć tablicę dwuwymiarową (macierz) 10 na 10 1 2 3 4 5 6 7 8 9 10 20 56 Do poszczególnych elementów odwołujemy się poprzez podanie indeksu kolumny i wiersza. Np.: TAB_2D[4][5] := 20; TAB_2D[7][8] := 56;

Tablice wielowymiarowe Tablice wielowymiarowe nie muszą ograniczać się do dwuwymiarowych. Mogą posiadać także nieregularne kształty. Przykłady tablic wielowymiarowych

Drzewa Struktury drzewiaste są stosowane, gdy chcemy uporządkować dane zgodnie z ich hierarchiczną strukturą. Przykłady drzew: Drzewo genealogiczne Układ plików na dysku

Drzewa Dla każdego drzewa wyróżniony jest jeden, charakterystyczny element- korzeń. Korzeń nie posiada elementów poprzednich. Dla każdego innego elementu określony jest dokładnie jeden element poprzedni. Dla każdego elementu oprócz ostatnich, tzw. liści istnieje co najmniej jeden element następny (jest to węzeł). Jeżeli liczba następnych elementów wynosi dokładnie 2 to drzewo nazywamy binarnym. Znaczenie drzew jest bardzo duże i ze względu na swoje własności drzewa są stosowane praktycznie w każdej dziedzinie informatyki. Dla każdego drzewa można określić: długość drogi u (głębokość) - liczba wierzchołków, przez które należy przejść od korzenia do wierzchołka u wysokość u - maksymalna liczba wierzchołków na drodze od u do pewnego liścia wysokość drzewa = głębokość = wysokość korzenia +1 ścieżka z u do v - zbiór wierzchołków, przez które należy przejść z wierzchołka u do v droga - ścieżka skierowana stopień wierzchołka - liczba jego bezpośrednich następników stopień drzewa - maksymalny stopień wierzchołka

Grafy W informatyce grafem nazywamy strukturę składającą się z węzłów (wierzchołków, oznaczanych przez V) wzajemnie połączonych za pomocą krawędzi (oznaczonych przez E). Grafy dzielimy na grafy skierowane i nieskierowane: Jak można się domyślić, drzewa są szczególnym przypadkiem grafów. Grafy są bardzo popularne we współczesne algorytmice. Graf nieskierowany Graf skierowany

Przykłady grafów Sieć komputerowa

Schemat metra w Moskwie Przykłady grafów Schemat metra w Moskwie

Przykłady grafów Drzewo genealogiczne

Przykłady grafów Pajęczyna

Historia systemu LINUX Przykłady grafów Historia systemu LINUX

STOS Struktury takie jak stosy, listy i kolejki Stos to struktura umożliwiająca wstawianie i usuwanie danych dostępnych jedynie w tzw. wierzchołku stosu. Czyli w wierzchołku stosu znajdują się zawsze dane, które zostały wstawione do stosu w trakcie ostatnio wykonanej operacji wstawiania. Struktury takie jak stosy, listy i kolejki mogą być różnie realizowane. Jedną z możliwości jest wykorzystanie tablic, inną struktur dynamicznych. Operacje to: POP (pobierz ze stosu) PUSH (połóż na stosie)

KOLEJKA Kolejka, to struktura w której można wstawić element za tym, który trafił do struktury jako ostatni, a usuwać ten, który został wstawiony jako pierwszy. POBIERZ WSTAW Operacje to: WSTAW(na koniec kolejki) POBIERZ(z początku kolejki)

LISTY LISTY to uogólniony przypadek kolejek, stosów i podobnych struktur. Opisuje ona liniową strukturę elementów, powiązanych ze sobą. Przykłady list

Przykłady…

Wyszukiwanie najmniejszego elementu w zbiorze Zbiór danych (tablica) Wyszukiwanie najmniejszego elementu w zbiorze

Sortowanie bąbelkowe

Złożoność algorytmów

Który algorytm jest „lepszy”? Do danego rozwiązania prowadzi zwykle więcej niż jedna droga. Jak więc oceniać alternatywne sposoby rozwiązania problemu? Podstawowym parametrem algorytmu jest jego złożoność.

Złożoność Algorytmy efektywne dają rozwiązania w „rozsądnym” czasie oraz zużywają „rozsądną ilość zasobów”. Co to jest rozsądny czas? Milisekunda, godzina, rok…?

Złożoność Złożoność czasowa mówi, ile kroków obliczeniowych trzeba wykonać dla zakończenia algorytmu. Za podstawę określania złożoności przyjmuje się najbardziej operację, której trzeba wykonać najwięcej. Np. mnożenie, dzielenie, pierwiastek… Jest to OPERACJA PODSTAWOWA Złożoność jest to ilość zasobów potrzebnych do działania algorytmu. W zależności od rozważanego zasobu mówimy o złożoności czasowej lub pamięciowej. Ilość potrzebnych zasobów będzie się różnić w zależności od konkretnego przypadku. Złożoność pamięciowa mówi, jaką maksymalnie część danych i wyników pośrednich trzeba w ramach danego algorytmu przechowywać w pamięci operacyjnej.

czyli uporządkować rosnąco. Przykład 3 liczby – a, b, c zapisane w trzech komórkach pamięci (zmiennych) x, y, z Zadanie: Przemieścić liczby tak, aby spełnione było (x) <= (y) <= (z) czyli uporządkować rosnąco. Np. (1, 5, 2); (2, 6, 1) itp.

Przykład Jakie są więc wszystkie możliwości uporządkowania? Aby rozwiązać zadanie będą nam potrzebne operacje testu oraz zamiany

Przykład Przedstawmy sekwencje testów, które pozwolą stwierdzić, z jakim przypadkiem mamy do czynienia?

Przykład Teraz, w zależności od konkretnego przypadku, wybieramy odpowiednią sekwencję zamian.

Przykład Ile wykonamy poszczególnych operacji? Najlepiej Najgorzej Testy Zamiany Najlepiej Najgorzej

Dla algorytmów szacuje się złożoność optymistyczną, pesymistyczną oraz średnią. Dla określonej klasy algorytmów można także oszacować dolne ograniczenie złożoności. Niektóre problemy algorytmiczne są zamknięte, inne stanowią tzw. luki algorytmiczne.

Dla większości algorytmów rozmiar danych też może się zmieniać. Przykład Czas wykonania tego zadania zależy więc od ułożenia danych wejściowych. Możemy określić przypadki najgorszego ułożenia i najlepszego ułożenia. Mówi się o pesymistycznej i optymistycznej złożoności. Dla algorytmów najczęściej przyjmuje się tzw. złożoność średnią (2,7 testów, 1,2 permutacji) W przykładzie rozmiar danych zawsze był taki sam (3 liczby). Zmieniła się konfiguracja danych. Dla większości algorytmów rozmiar danych też może się zmieniać. Problemem jest wówczas określenia złożoności w zależności od rozmiaru danych.

Przykład Na przyjęciu dyplomatycznym bawi się N ambasadorów. Ich uściski rąk są rejestro-wane przez fotografa po kolei. Ile czasu zajmie taka sesja zdjęciowa? Algorytm: Ambasador 1 podaje rękę amba-sadorom 2, 3, 4... aż do N. Ambasador 2 po-daje rękę ambasadorom 3,4,...,N. W ten spo-sób dochodzimy do ambasadorów N-1 i N, którzy jako ostatni wymieniają uścisk. Złożoność czasowa: N(N-1)/2 jednostek (suma ciągu arytmetycznego)

Złożoność Problemy do których rozwiązania potrzebna jest podobna ilość zasobów łączymy w klasy złożoności.

Złożoność Bierzemy pod uwagę asymptotyczne tempo wzrostu, czyli to jak zachowuje się funkcja określająca złożoność dla odpowiednio dużych, granicznych rozmiarów danych wejściowych, ignorując zachowanie dla małych danych.

Złożoność W algorytmice najczęściej pojawia się tzw. O-notacja. Jeśli F(N) jest funkcją złożoności algorytmu to spełnienie zależności oznacza, że algorytm ma złożoność rzędu f(N) (O (f(N) )

Złożoność IDEAŁ TO ZŁOŻONOŚĆ LINIOWA – funkcja f(x) jest ograniczona                       – funkcja f(x) jest ograniczona przez funkcję logarytmiczną                  – funkcja f(x) jest ograniczona przez funkcję liniową                                           – funkcja f(x) jest ograniczona przez funkcję potęgową lub wielomian                   – funkcja f(x) jest ograniczona przez funkcję wykładniczą                   – funkcja f(x) jest ograniczona przez silnię

Czy komputery są naprawdę szybkie? Układający 64 krążki Tybetańczycy przykładają jeden krążek dziennie. Gdyby z pomocą komputera robili to milion razy na minutę i tak zajęło by to im… około 500 000 lat.

Porównanie niektórych złożoności:

Zapotrzebowanie na czas

Trudne zadania Dla pierwszoklasisty: 7 * 8 = ??? Dla faceta: Jak umówić się z Dodą? Dla studenta: wszystko jest łatwe…

Trudne zadania Czy istnieją zadania trudne dla komputerów? Wiele prostych w sformułowaniu zagadnień należy do zagadnień trudnych, np. „problem wędrującego komiwojażera”: jak znaleźć najkrótszą drogę, łączącą N miast odwiedzając każde tylko jeden raz.

Baaardzo trudne zadania - NP Problem P to problem decyzyjny, dla którego rozwiązanie można znaleźć w czasie wielomianowym. Problem NP to problem decyzyjny, dla którego rozwiązanie można zweryfikować w czasie wielomianowym. (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Baaardzo trudne zadania - NP Przykłady problemów NP. – układanki 2D (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Baaardzo trudne zadania - NP Przykłady problemów NP. – problem komiwojażera (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Baaardzo trudne zadania - NP Przykłady problemów NP. – droga Hamiltona (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Baaardzo trudne zadania - NP Przykłady problemów NP. – przydział ograniczonego miejsca (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial) 56

Baaardzo trudne zadania - NP Przykłady problemów NP. – przydział ograniczonego miejsca (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Baaardzo trudne zadania - NP Pytanie, czy klasa P jest tym samym, co NP jest prawdopodobnie najważniejszym otwartym problemem w całej teorii informatyki. Dla pierwszej osoby, która rozwiąże ten problem przewidziano nagrodę w wysokości miliona dolarów (ang. deterministic polynomial - deterministycznie wielomianowy) NP. (niedeterministycznie wielomianowy, ang. nondeterministic polynomial)

Stabilność numeryczna Określa ona wrażliwość wyniku końcowego na błędy zaokrągleń w trakcie obliczeń oraz na dokładność danych początkowych. Przykłady: Komputer wykonuje operacje liczbowe ze skończoną precyzją. Może się okazać, że wynik działania 10 000 000 000 + 1 to dalej 10 000 000 000. Podobnie, realizacja dzielenia jako mnożenie przez odwrotność jest mało stabilna numerycznie dla argumentów bliskich zeru.

Problem STOPU Problemem stopu nazywamy sytuację, gdy dla danego algorytmu należy stwierdzić, czy program realizujący dany algorytm zatrzyma się. Pytanie może odnosić się albo do konkretnych danych wejściowych, albo do wszystkich możliwych danych. Jeśli program zatrzymuje się dla wszystkich danych, to mówimy, że ma własność stopu. Problem stopu jest często bardzo trudny do rozstrzygnięcia dla niektórych algorytmów.

Świat nie jest czarno-biały… W latach 60-tych naszego stulecia logikę rozszerzono na pojęcia logiki rozmytej (fuzzy logic) oraz zbiorów przybliżonych. W obu przypadkach chodzi o opis wiedzy niepewnej, nieprecyzyjnej. W klasycznej teorii zbiorów obiekty należą do zbioru lub nie. W teorii zbiorów rozmytych możliwa jest częściowa przynależność do zbioru, np. zbiór osób określanych jako „wysokie” nie jest precyzyjnie określony i można o kimś powiedzieć, że jest „w pewnym stopniu wysoki”. Wnioski wyciągane w oparciu o logikę rozmytą nie mają takiego stopnia pewności jak wnioski oparte o logikę klasyczną, możliwe jest jednakże rozumowanie w warunkach niepewnej czy nieprecyzyjnie określonej informacji. W oparciu o logikę rozmytą działa coraz więcej urządzeń technicznych. Sposób „rozumowania” tych urządzeń i sposób komunikacji z nimi jest z punktu widzenia człowieka bardziej naturalny, gdyż logika rozmyta oprócz stwierdzeń „tak” i „nie” pozwala na używanie takich określeń, jak „być może”, „chyba tak”, „prawie na pewno”. Teoria zbiorów przybliżonych stworzona została przez profesora Zdzisława Pawlaka.

Podsumowanie, wnioski ?