Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 2008/2009 Wykład nr 5 (22.11.2008)
Rok akademicki 2008/2009, Wykład nr 5 2/26 Plan wykładu nr 5 Dynamiczne struktury danych przykład zastosowania stosu - notacja polska i odwrotna notacja polska kolejka lista (jednokierunkowa, dwukierunkowa, cykliczna) drzewo (binarne) Metody numeryczne obliczanie prognozy pogody
Rok akademicki 2008/2009, Wykład nr 5 3/26 Notacja polska notacja polska (zapis przedrostkowy, Notacja Łukasiewicza) jest to sposób zapisu wyraŝeń arytmetycznych, podający najpierw operator, a następnie argumenty wyraŝenie arytmetyczne: 4 / (1 + 3) ma w notacji polskiej postać: / 4 + 1 3 wyraŝenie w notacji polskiej nie wymaga nawiasów, poniewaŝ przypisanie argumentów do operatorów wynika wprost z ich kolejności w zapisie notacja polska jest bliska naturalnemu sposobowi wyraŝania działań, w którym zazwyczaj najpierw podaje się czynność, a następnie dopełnia wyraŝenia wskazaniem rzeczy, do których czynność się odnosi, np. podziel cztery przez sumę jednego i trzech notację polską przedstawił w 1920 roku polski matematyk Jan Łukasiewicz zapis wyraŝeń w notacji polskiej stał się podstawą języków: Logo, Tcl i LISP notacja polska była podstawą opracowania tzw. odwrotnej notacji polskiej
Rok akademicki 2008/2009, Wykład nr 5 4/26 Odwrotna notacja polska odwrotna notacja polska - ONP (ang. Reverse Polish Notation, RPN) jest sposobem zapisu wyraŝeń arytmetycznych, w którym znak wykonywanej operacji umieszczany jest po argumentach, a nie pomiędzy nimi jak w konwencjonalnym zapisie algebraicznym wyraŝenie arytmetyczne: (1 + 3) / 2 ma w odwrotnej notacji polskiej postać: 1 3 + 2 / ONP została opracowana przez australijskiego naukowca Charlesa Hamblina jako odwrócenie beznawiasowej notacji polskiej Jana Łukasiewicza na potrzeby zastosowań informatycznych zapis wyraŝenia w ONP pozwala na całkowita rezygnację z uŝycia nawiasów w wyraŝeniach, gdyŝ jednoznacznie określa kolejność wykonywania działań ONP uŝywana jest w niektórych językach programowania (FORTH, Postscript) oraz w kalkulatorach naukowych HP
Rok akademicki 2008/2009, Wykład nr 5 5/26 Odwrotna notacja polska obliczenie wartości wyraŝenia arytmetycznego przy zastosowaniu odwrotnej notacji polskiej wymaga wykonania dwóch operacji: zamiany notacji konwencjonalnej (nawiasowej) na odwrotną notację polską obliczenia wartości wyraŝenia arytmetycznego zapisanego w odwrotnej notacji polskiej Zamiana wyraŝenia z notacji konwencjonalnej na ONP: zamiana wykonywana jest przy zastosowaniu algorytmu Dijkstry nazywanego stacją rozrządową czytając wyraŝenie arytmetyczne od strony lewej do strony prawej operatory odkładamy na stos a liczby na wyjście wyjście naleŝy traktować jako kolejkę, która po zakończeniu algorytmu będzie zawierała wyraŝenie w odwrotnej notacji polskiej
Rok akademicki 2008/2009, Wykład nr 5 6/26 Odwrotna notacja polska Zamiana wyraŝenia z notacji konwencjonalnej na ONP: wykonując powyŝsze operacje trzeba stosować następujące reguły: operator moŝemy odłoŝyć na stos tylko wtedy, jeśli ostatnim elementem stosu jest operator o niŝszym priorytecie jeŝeli ma on wyŝszy lub równy priorytet to zdejmujemy ze stosu dotąd elementy i wysyłamy na wyjście, aŝ ostatni operator będzie miał niŝszy priorytet lub stos będzie pusty jeśli kolejnym elementem jest nawias otwierający (, to odkładamy go na stos, bez względu na to co znajduje się w danym momencie na stosie i bez względu na to czy stos jest pusty powyŝszy nawias traktujemy jak dno stosu i odczytujemy kolejne elementy wyraŝenia według standardowego algorytmu jeśli dojdziemy do nawiasu zamykającego ), to nigdzie go nie odkładamy, tylko zdejmujemy kolejne operatory ze stosu i wysyłamy na wyjście, aŝ dojdziemy do nawiasu otwierającego, który równieŝ zdejmujemy ze stosu i wysyłamy na wyjście jeśli dojdziemy do końca wyraŝenia arytmetycznego, to zdejmujemy ze stosu pozostałe operatory i wysyłamy je na wyjście
Rok akademicki 2008/2009, Wykład nr 5 7/26 Odwrotna notacja polska Zamiana wyraŝenia z notacji konwencjonalnej na ONP - przykład: równanie w notacji konwencjonalnej: (2+1)*3-4*(7+4) Krok 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Wejście ( 2 + 1 ) * 3-4 * ( 7 + 4 ) Koniec Stos ( NULL ( NULL + ( NULL + ( NULL * NULL * NULL - NULL - NULL * - NULL ( * - NULL ( * - NULL + ( * - NULL + ( * - NULL * - NULL - NULL równanie w ONP: 2 1 + 3 * 4 7 4 + * - NULL NULL Wyjście 2 1 + 3 * 4 7 4 + * -
Rok akademicki 2008/2009, Wykład nr 5 8/26 Odwrotna notacja polska Obliczenie wartości wyraŝenia arytmetycznego w ONP: w algorytmie obliczania wartości wyraŝenia arytmetycznego zapisanego w odwrotnej notacji polskiej wykonujemy następujące operacje: pobieramy kolejny element wyraŝenia jeśli elementem jest liczba to odkładamy ją na stos jeśli elementem jest operator, to pobieramy ze stosu tyle liczb, aby moŝna było zastosować operator na tych liczbach, np. dla dodawania, odejmowania, mnoŝenia i dzielenia są to dwie kolejne liczby, zaś dla negacji - jedna liczba wykonujemy operację na liczbach i jej wynik odkładamy na stos jeśli dotrzemy do końca wyraŝenia, to pobieramy wynik ze stosu, który jest wartością wyraŝenia arytmetycznego jeśli nie ma jeszcze końca, to wracamy na początek algorytmu Uwaga: jeśli np. stos ma postać: 2 4 NULL i mamy wykonać operację dzielenia /, to operacja ta ma postać: 4 / 2, czyli do wykonania operacji argumenty brane są w odwrotnej kolejności
Rok akademicki 2008/2009, Wykład nr 5 9/26 Odwrotna notacja polska Obliczenie wartości wyraŝenia arytmetycznego w ONP - przykład: równanie w ONP: 2 1 + 3 * 4 7 4 + * - Krok 1 2 3 4 5 6 7 8 9 10 11 12 Wejście 2 1 + 3 * 4 7 4 + * - Koniec Stos 2 NULL 1 2 NULL 3 NULL 3 3 NULL 9 NULL 4 9 NULL 7 4 9 NULL 4 7 4 9 NULL 11 4 9 NULL 44 9 NULL -35 NULL NULL Działanie 2 + 1 3 * 3 7 + 4 4 * 11 9 44 wynik: -35 wynik: -35
Rok akademicki 2008/2009, Wykład nr 5 10/26 Kolejka kolejka (ang. queue) jest strukturą danych składającą się z liniowo uporządkowanych elementów, do której moŝna dołączać elementy tylko w jednym końcu (na końcu kolejki), a usuwać tylko w drugim końcu (na początku kolejki) kolejka często określana jest jako stos FIFO (ang. First In First Out - pierwszy wchodzi, pierwszy wychodzi) powiązanie między elementami kolejki jest takie samo, jak w przypadku stosu head - wskaźniki na pierwszy element kolejki (początek kolejki) tail - wskaźnik na ostatni element kolejki (koniec kolejki)
Rok akademicki 2008/2009, Wykład nr 5 11/26 Kolejka korzystając z poprzedniej analogii, stosu kartek, moŝemy powiedzieć, Ŝe kładziemy kartki na wierzchołku stosu, zaś wyjmujemy ze spodu kolejkę moŝna takŝe wyobraŝać sobie jako typową kolejkę sklepową podstawowe operacje dotyczące kolejki to: dołączenie elementu do kolejki - Insert() lub enqueue() usunięcie elementu z kolejki - Remove() lub dequeue() źródło: A. Zalewski: Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++
Rok akademicki 2008/2009, Wykład nr 5 12/26 Lista listą (liniową) nazywamy liniowo uporządkowany zbiór elementów, z którego w dowolnym miejscu moŝna usunąć element, jak równieŝ dołączyć nowy element elementy moŝna wstawiać do listy na początku, na końcu lub w dowolnym innym miejscu w zaleŝności od powiązań pomiędzy elementami wyróŝniamy listy: jednokierunkowe dwukierunkowe cykliczne, jednokierunkowe cykliczne, dwukierunkowe
Rok akademicki 2008/2009, Wykład nr 5 13/26 Lista jednokierunkowa i dwukierunkowa w liście jednokierunkowej dla kaŝdego składnika (poza ostatnim) jest określony następny lub poprzedni składnik (zaleŝnie od implementacji) zapamiętywany jest wskaźnik tylko na pierwszy element listy lub wskaźniki na pierwszy i ostatni element listy w liście dwukierunkowej kaŝdy węzeł posiada adres następnika, jak i poprzednika
Rok akademicki 2008/2009, Wykład nr 5 14/26 Lista cykliczna listę cykliczną moŝna utworzyć z listy jednokierunkowej lub dwukierunkowej, jeśli ostatni element tej struktury połączymy z pierwszym Jednokierunkowa: Dwukierunkowa:
Rok akademicki 2008/2009, Wykład nr 5 15/26 Drzewo drzewo jest najbardziej ogólną dynamiczną strukturą danych i moŝe być reprezentowane graficznie na róŝne sposoby korzeń drzewa jest umieszczony u góry skojarzone z korzeniem poddrzewa połączone są z korzeniem liniami zwanymi gałęziami drzewa potomkiem węzła w nazywamy kaŝdy, róŝny od w, węzeł naleŝący do drzewa, w którym w jest korzeniem węzeł, który nie ma potomków, to liść drzewa
Rok akademicki 2008/2009, Wykład nr 5 16/26 Drzewo binarne drzewo binarne jest szczególnym przypadkiem ogólnej struktury zwanej drzewem kaŝdy wierzchołek drzewa ma co najwyŝej dwóch potomków
Rok akademicki 2008/2009, Wykład nr 5 17/26 Binarne drzewo wyszukiwawcze jest to drzewo binarne, w którym dla kaŝdego węzła w i wszystkie klucze (przechowywane wartości) w lewym poddrzewie węzła w i są mniejsze od klucza w węźle w i, a wszystkie klucze w prawym poddrzewie węzła w i są większe od klucza w węźle w i największą zaletą takiej struktury jest szybkość wyszukiwania informacji
Rok akademicki 2008/2009, Wykład nr 5 18/26 Metody numeryczne metody numeryczne - dział matematyki stosowanej, w ramach którego rozwiązuje się problemy matematyczne za pomocą operacji arytmetycznych i logicznych obecnie częściej korzysta się z gotowych procedur lub programów komputerowych niŝ opracowuje własne istnieje bardzo duŝo programów komputerowych i procedur dostępnych bezpłatnie lub odpłatnie (programy komercyjne), w których zaimplementowane są poszczególne metody numeryczne: programy typowo matematyczne: Matlab, MathCAD, Mathematica, Maple, Derive programy specjalizowane, np. do symulacji numerycznej róŝnych zjawisk biblioteki funkcji i procedur (tzw. solvery) znajomość podstaw teoretycznych i własności metod numerycznych pozwala na lepsze i efektywniejsze stosowanie ich w praktyce
Rok akademicki 2008/2009, Wykład nr 5 19/26 Metody numeryczne rozwiązanie problemu obliczeniowego z zastosowaniem metody numerycznej wymaga wykonania następujących kroków: 1. Określenie modelu matematycznego zjawiska lub procesu i odpowiadającego mu modelu numerycznego 2. Wybrania metody numerycznej w celu dokonania obliczeń 3. Implementacji metody zastosowany model matematyczny oraz odpowiadający mu model numeryczny muszą być dostosowane do dostępnego sprzętu komputerowego, na którym będą wykonywane obliczenia zbyt szczegółowa interpretacja analizowanego zjawiska moŝe doprowadzić do stworzenia modelu niemoŝliwego w implementacji
Rok akademicki 2008/2009, Wykład nr 5 20/26 Metody numeryczne - obliczanie prognozy pogody Przykład - obliczanie prognozy pogody moŝna przyjąć w duŝym uproszczeniu, Ŝe pogoda w dowolnym punkcie Ziemi jest funkcją czterech argumentów: Pogoda(dł_geograficzna, szer_geograficzna, wysokość, czas) wartością funkcji Pogoda() jest wektor sześciu liczb: temperatura, ciśnienie, wilgotność, prędkość wiatru (3 liczby) w pamięci komputera funkcja ciągła reprezentowana jest w postaci zdyskretyzowanej, co oznacza, Ŝe obliczamy jej wartości w węzłach siatki: Pogoda(i,j,l,k) gdzie: i, j, l - odpowiada komórkom w przestrzeni, zaś k - czasowi, obliczanie pogody polega na rozwiązywaniu układu równań róŝniczkowych cząstkowych Naviera-Stokesa, opisujących przepływy gazów w atmosferze źródło: Praca zbiorowa pod redakcją A. Karbowskiego i E. Niewiadomskiej-Szynkiewicz: Obliczenia równoległe i rozproszone. Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2001.
Rok akademicki 2008/2009, Wykład nr 5 21/26 Metody numeryczne - obliczanie prognozy pogody Przykład - obliczanie prognozy pogody zakładamy podział warstwy atmosfery (ok. 15 km n.p.m.) nad powierzchnią Polski na komórki sześcienne o krawędzi 100 m zakładamy przybliŝenie obszaru Polski kwadratem o boku 700 km - otrzymujemy wtedy: (700 10) 2 15 10 = 7,35 10 9 - elementarnych komórek przyjmijmy, Ŝe obliczenie wartości w kolejnej chwili czasowej dla jednego punktu przestrzeni wymaga wykonania 100 operacji zmiennoprzecinkowych chcemy obliczyć 4-dniową prognozę pogody, całkując z krokiem czasowym równym 5 minut - wymaga to wykonania: 7,35 10 9 4 24 12 100 = 0,847 10 15 - operacji zmiennoprzecinkowych dysponując procesorem wykonującym 10 9 operacji zmiennoprzecinkowych na sekundę (1 Gflops) obliczenia trwałyby 0,847 10 6 s = 235,2 godz. = ok. 10 dni
Rok akademicki 2008/2009, Wykład nr 5 22/26 Metody numeryczne - obliczanie prognozy pogody Przykład - obliczanie prognozy pogody wyznaczenie prognozy pogody w ciągu 15 minut wymagałoby procesora o mocy obliczeniowej ok. 1 Tflops, 0,847 10 15 /(15 60) = 0,94 10 12 - operacji zmiennoprzecinkowych na sekundę zakładając, Ŝe kaŝda z 6 liczb charakteryzujących pogodę w komórce wymaga 8 bajtów, na zapamiętanie pogody we wszystkich komórkach potrzeba: 7,35 10 9 6 8 = 350 GB = 0,35 TB - pamięci operacyjnej
Rok akademicki 2008/2009, Wykład nr 5 23/26 Metody numeryczne - obliczanie prognozy pogody ICM - Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego, Uniwersytet Warszawski http://weather.icm.edu.pl http://new.meteo.pl modele numeryczne: UM 6.1 - siatka 4 km, długość prognozy 48h COAMPS - siatka 13 km, długość prognozy 84h UM 4.5 (UMPL) - siatka 17 km (w likwidacji...) model numeryczny UMPL 4.5 (Unified Model for Poland Area) mezoskalowa (o ograniczonym obszarze) wersja opracowanego w Wielkiej Brytanii modelu prognostycznego Unified Model (UM) prognozowanie pogody od 1997 r. obliczenia są wykonywane na 16-procesorowym komputerze Cray J916 numeryczne prognozy pogody obliczane są dwa razy na dobę (dla danych początkowych z godz. 00 oraz 06 GMT)
Rok akademicki 2008/2009, Wykład nr 5 24/26 Numeryczna prognoza pogody (Białystok)
Rok akademicki 2008/2009, Wykład nr 5 25/26 Numeryczna prognoza pogody (Białystok) (model COAMPS)
Rok akademicki 2008/2009, Wykład nr 5 26/26 Koniec wykładu nr 5 Dziękuj kuję za uwagę!