Algorytmy i Struktury Danych. (c) Marcin Sydow. Wst p. Linked Lists. Abstrakcyjne Struktury Danych. Podsumowanie. Stos, Kolejka

Podobne dokumenty
Programowanie i struktury danych 1 / 44

Listy i operacje pytania

Lab. 02: Algorytm Schrage

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1


Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

1 Stos: Stack i Stack<T>

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Struktury danych: stos, kolejka, lista, drzewo

Rekurencyjne struktury danych

Wzorce projektowe strukturalne cz. 1

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

1 Bª dy i arytmetyka zmiennopozycyjna

STRUKTURY DANYCH. dane wej±ciowe problemu, ewentualne dane po±rednie, dane wynikowe (czyli rozwi zanie problemu).

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

x y x y x y x + y x y

Programowanie wspóªbie»ne

Minimalne drzewa rozpinaj ce

Matematyka wykªad 1. Macierze (1) Andrzej Torój. 17 wrze±nia Wy»sza Szkoªa Zarz dzania i Prawa im. H. Chodkowskiej

Podstawy modelowania w j zyku UML

Interpolacja Lagrange'a, bazy wielomianów

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Podstawowe struktury danych

Szeregowanie zada« Wykªad nr 5. dr Hanna Furma«czyk. 4 kwietnia 2013

Paradygmaty programowania. Paradygmaty programowania

Programowanie wspóªbie»ne

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Listy, kolejki, stosy

Struktury Danych i Złożoność Obliczeniowa

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Metody numeryczne. Wst p do metod numerycznych. Dawid Rasaªa. January 9, Dawid Rasaªa Metody numeryczne 1 / 9

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Programowanie obiektowe

c Marcin Sydow Spójno± Grafy i Zastosowania Grafy Eulerowskie 2: Drogi i Cykle Grafy Hamiltonowskie Podsumowanie

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Metodydowodzenia twierdzeń

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Logika dla matematyków i informatyków Wykªad 1

2 Liczby rzeczywiste - cz. 2

Metody dowodzenia twierdze«

Wyszukiwanie. Algorytmy i Struktury Danych. (c) Marcin Sydow. Dziel i rz d¹. Wyszukiwanie. Statystyki pozycyjne. Podsumowanie

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Wykªad 4. Funkcje wielu zmiennych.

Podstawowe algorytmy grafowe i ich zastosowania

Edycja geometrii w Solid Edge ST

Podstawy modelowania w j zyku UML

Ukªady równa«liniowych

Aplikacje bazodanowe. Laboratorium 1. Dawid Poªap Aplikacje bazodanowe - laboratorium 1 Luty, 22, / 37

Podstawowe algorytmy grafowe i ich zastosowania

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

POLITECHNIKA WROCŠAWSKA WYDZIAŠ ELEKTRONIKI PRACA DYPLOMOWA MAGISTERSKA

Algorytmy i struktury danych (7, 8)

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Przetwarzanie sygnaªów

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

Dynamiczne struktury danych

X WARMI SKO-MAZURSKIE ZAWODY MATEMATYCZNE 18 maja 2012 (szkoªy ponadgimnazjalne)

Wzorce projektowe kreacyjne

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Przykªady problemów optymalizacji kombinatorycznej

Metody numeryczne i statystyka dla in»ynierów

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

O pewnym zadaniu olimpijskim

Model obiektu w JavaScript

Teoria grafów i jej zastosowania. 1 / 126

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Matematyka 1 (Wydziaª Architektury) Lista 1 - funkcje elmenetarne. 2. Rozwi za nast puj ce równania lub nierówno±ci:

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Uczenie Wielowarstwowych Sieci Neuronów o

Elementy Modelowania Matematycznego Wykªad 9 Systemy kolejkowe

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

istnienie elementu neutralnego dodawania (zera): 0 K a K a + 0 = a, istnienie elementu neutralnego mno»enia (jedynki): 1 K a K a 1 = a,

Rozwi zania klasycznych problemów w Rendezvous

Wektory w przestrzeni

Hotel Hilberta. Zdumiewaj cy ±wiat niesko«czono±ci. Marcin Kysiak. Festiwal Nauki, Instytut Matematyki Uniwersytetu Warszawskiego

Struktury danych (I): kolejka, stos itp.

Równania ró»niczkowe I rz du (RRIR) Twierdzenie Picarda. Anna D browska. WFTiMS. 23 marca 2010

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Baza danych - Access. 2 Budowa bazy danych

Egzaminy i inne zadania. Semestr II.

Wykorzystanie lokalnej geometrii danych w Maszynie Wektorów No±nych

1 Metody iteracyjne rozwi zywania równania f(x)=0

Funkcje, wielomiany. Informacje pomocnicze

c Marcin Sydow Planarno± Grafy i Zastosowania Tw. Eulera 7: Planarno± Inne powierzchnie Dualno± Podsumowanie

1. Odcienie szaro±ci. Materiaªy na wiczenia z Wprowadzenia do graki maszynowej dla kierunku Informatyka, rok III, sem. 5, rok akadem.

Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2

2 Podstawowe obiekty kombinatoryczne

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska

Wst p teoretyczny do wiczenia nr 3 - Elementy kombinatoryki

W zadaniach na procenty wyró»niamy trzy typy czynno±ci: obliczanie, jakim procentem jednej liczby jest druga liczba,

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Transkrypt:

Zawarto± wykªadu: Typy operacji na ci gach Listy dowi zaniowe (ang. linked lists): lista jednokierunkowa lista dwukierunkowa Stos Kolejka przykªad rozszerzenia: kolejka dwustronna

Ci gi Ci gi elementów s najcz ±ciej wyst puj c w algorytmach struktur danych. W±ród operacji wykonywanych na ci gach mo»na wyodr bni m.in. dwa typy: dost p absolutny (identykowany przez bezwzgl dny adres (indeks) w ci gu) modykacja (w miejscu identykowanym przez konkretny element ci gu)

Tablice jako reprezentacja ci gów Najprostsz konkretn struktur danych do reprezentowania ci gów s tablice. Zapewniaj one bardzo szybki dost p absolutny (po indeksie) - w czasie staªym. Jednak operacje modykacji (np. wstawianie elementów w ±rodku tablicy) wymagaj liniowej zªo»ono± i czasowej (gdy» trzeba najpierw zrobi miejsce, przesuwaj c inne elementy) Wtedy przydaj si inne struktury danych np.: listy dowi zaniowe.

Motywacja dla u»ycia list dowi zaniowych Alternatywn konkretn struktur danych do reprezentowania ci gów s listy dowi zaniowe. Potra one zapewni szybkie operacje typu modykuj cego, w tym wewn trz ci gu, np: dodaj/usu«pierwszy lub ostatni element dodaj/usu«element za/przed wskazanym (np. przez wska¹nik) konkretnym elementem wstaw/usu«caªy podci g elementów pomi dzy wskazanymi elementami poª cz kilka ci gów w jeden odwró ci g

Listy dowi zaniowe Lista dowi zaniowa jest konkretn struktur danych typu zªo»onego, zrealizowan za pomoc : tzw. w zªów (ang. nodes), przechowuj cych elementy ci gu poª czonych za pomoc tzw. dowi za«(ang. links), zrealizowanych jako wska¹niki Jest kilka wariantów, np: listy jednokierunkowe (ang. singly linked lists) listy dwukierunkowe (ang. doubly linked lists) listy cykliczne (jedno i dwukierunkowe)

Implementacja listy jednokierunkowej Najprostsza implementacja klasy w zªa listy jednokierunkowej (gdzie Type jest dowolnym typem przechowywanych elementów ci gu) i klasy listy jednokierunkowej: Class SLNode<Type>{ Type element SLNode<Type> next //wskazuje kolejny w zeª w li±cie } Class SList<Type>{ SLNode<Type> head //wskazuje pocz tek listy (jedyny dost p do listy) } przykªad (4 w zªy): head-> (2)-> (3)-> (5)-> (8)-> null Ostatni wska¹nik zawsze pokazuje na NULL. W pustej li±cie wska¹nik head (czoªo) wskazuje na NULL

Przykªad prostego algorytmu na li±cie jednokierunkowej Przykªad: wydrukowanie ci gu elementów przechowywanych w li±cie b d cej argumentem: print(slist l){ node = l.head while(node not null) print node.element node = node.next } Bardzo charakterystyczna dla algorytmów sekwencyjnie pracuj cych na listach dowi zaniowych jest instrukcja while(node not null) (przegl danie listy do ko«ca - zauwa»my,»e dzi ki takiemu warunkowi algorytm dziaªa równie» na pustej li±cie) oraz ostatnia linia node=node.next, oznaczaj ca przej±cie do kolejnego w zªa. Listy jednokierunkowe wystarczaj dokªadnie w tych zadaniach, gdzie wystarcza jednokierunkowa nawigacja (np. wyszukiwanie w ci gu nieuporz dkowanym). Czasami jednak niezb dne s np. listy dwukierunkowe.

Lista dwukierunkowa Przykªad najprostszej implementacji listy dwukierunkowej (klasy: w zeª i lista): Class DLNode<Type>{ Type element DLNode<Type> next // wskazuje na nast pny w zeª DLNode<Type> prev // wskazuje na poprzedni w zeª } Class DLList<Type>{ DLNode<Type> head // wskazuje na pierwszy element listy } (czasami u»yteczny jest te» dodatkowy wska¹nik do ostatniego elementu takiej listy) Lista dwukierunkowa zu»ywa na dowi zania 2 razy wi cej pami ci ni» jednokierunkowa, ale zapewnia szybk dwustronn nawigacj, co jest niezb dne w niektórych algorytmach. Pytanie kontrolne: jaki typ listy powinien by u»yty do dowi zaniowej wersji algorytmu InsertionSort?

Listy Cykliczne W niektórych zastosowaniach najwygodniejsz konkretn struktur danych jest lista cykliczna. W li±cie takiej nie ma ostatniego lub pierwszego w zªa (równowa»nie: ostatni jest dowi zany do pierwszego, tworz c zamkni ty cykl) Mo»e wyst pi zarówno wariant jednokierunkowy jak i dwukierunkowy (w zale»no±ci od potrzeb) W dwukierunkowej li±cie cyklicznej, dla ka»dego w zªa zachodzi nast puj cy niezminnik (w innym sensie ni» dla p tli): (next.prev) == (prev.next) == this W niektórych przypadkach stosuje si podobnie tzw. cykliczne tablice, gdzie arytmetyka indeksów jest modulo n, gdzie n to dªugo± tablicy. Stosuje si je np. w bardziej wyranowanych szybkich kolejkach priorytetowych lub w implementacji kolejki na tablicy.

Operacje na ci gach Przykªady operacji na ci gach: isempty (daje odpowied¹ logiczn prawda tylko dla pustego ci gu) rst (zwraca pierwszy element ci gu) last (zwraca ostatni element ci gu) insertafter/insertbefore (wstaw element za/przed inny element) moveafter/movebefore (przenie± element za/przed inny element) removeafter/removebefore pushback/pushfront (doª cz element na ko«cu/pocz tku ci gu) popback/popfront (zdejmij element z ko«ca/pocz tku ci gu) concat (poª cz dwa ci gi w jeden) splice (techniczna operacja pomocnicza, opisana pó¹niej) size (zwró liczb elementów w ci gu) ndnext (zwró nast pny element do podanego), etc. Powy»sze operacje na ci gach mog by ró»nie zaimplementowanie w zale»no±ci np. od tego przez jak konkretn struktur danych reprezentowany jest ci g (np. tablic, list jednokierunkow, dwukierunkow, etc.).

Operacja pomocnicza Splice Wi kszo± modykuj cych operacji na listach jest specjalnym przypadkiem ogólnej technicznej operacji splice: INPUT: a,b,t - a,b: wska¹niki do w zªów w jednej li±cie, t: wska¹nik do w zªa w innej li±cie (obie listy mog by to»same, ale wtedy t nie mo»e by pomi dzy a i b) OUTPUT: wycina podlist (a,...,b) i wstawia tu» za t Przykªad implementacji operacji splice na li±cie dwukierunkowej: (zauwa»my,»e operacja ma staª zªo»ono± czasow, niezale»nie od dªugo±ci list!) splice(a,b,t){ // cut out (a,...,b): a' = a.prev; b' = b.next; a'.next = b'; b'.prev = a' // insert (a,...,b) after t: t'= t.next; b.next = t'; a.prev = t; t.next = a; t'.prev = b } Prosz sprawdzi,»e wi kszo± operacji modykuj cych listy jest specjalnym przypadkiem splice, np: moveafter(a,b){ splice(a,a,b)}

: listy dowi zaniowe a tablice Listy dowi zaniowe, jako reprezentacja ci gów, maj zarówno zalety jak i wady w porównaniu z tablicami: (compared with arrays): pozytywne: szybkie (czas staªy) w porównaniu z tablicami (czas liniowy) operacje modykuj ce ci g pozytywne: dynamiczny rozmiar listy w porównaniu z tablicami, który maj sztywno ustalony rozmiar negatywne: dodatkowy narzut pami ci na dowi zania (zwykle tyle co na wska¹nik, czyli max. 8 bajtów na ka»de dowi zanie dla 64-bitowej architektury) negatywne: wolny (liniowy czas) dost p absolutny do elementów (w porównaniu ze staªym dla tablic)

Bardzo wa»ne poj cie w projektowaniu algorytmów i programowaniu. Abstrakcyjna Struktura zdeniowana jest przez zestaw operacji, które mo»na wykona na danych, nie wnikaj c w ich sposób implementacji. Opakowuje wi c ona niejako implementacj zrealizowan m.in. za pomoc konkretnych struktur danych (np. list dowi zaniowych, tablic, drzew, etc.) ukrywaj c t implementacj a eksponuj c jedynie interfejs do danych. Przykªady abstrakcyjnych struktur danych: stos, kolejka

Stos Jeden z najbardziej podstawowych przykªadów abstrakcyjnej struktury danych. Stos zdeniowany jest poprzez nast puj cy zestaw operacji (interfejs): Interfejs stosu (elementów typu Type): push(type e) (dodaj do stosu element e) Type pop() (zdejmij i zwró ze stosu element ostatnio dodany - operacja modykuj ca) Type top() (zwró bez zdejmowania element ostatnio dodany - operacja niemodykuj ca) Ze wzgl du na powy»sze zdeniowanie wzajemnych relacji pomi dzy push a pop i top stos nazywany jest te» struktur LIFO (od ang. last in - rst out), gdy» efekt stosu jest taki,»e elementy wyjmowane s ze stosu w odwrotnej kolejno±ci do tej w jakiej byªy do niego dodawane.

Kolejka Zdeniowana za pomoc nast puj cego zestawu operacji (interfejsu): Kolejka (elementów typu Type): inject(type e) (wstaw nowy element do kolejki) Type out() (wyjmij i zwró element najdawniej dodany do kolejki - operacja modykuj ca) Type front() (zwró bez wyjmowania element najdawniej dodany do kolejki - operacja niemodykuj ca) uwaga: nazwy operacji kolejki nie s tak tradycyjnie ustalone jak w przypadku stosu i mog by ró»ne (np. in zamiast inject, etc.), ale zawsze maj powy»sze znaczenie. Kolejka ma wi c t wªasno±,»e elementy wyjmowane s z niej w tej samej kolejno±ci w jakiej byªy do niej dodane. St d czasami u»ywana nazwa FIFO (ang. rst in - rst out). Kolejki maj rozliczne zastosowania jako wszelkiego rodzaju bufory operacji wej±cia/wyj±cia (sieciowe, strumieniowe, plikowe, etc.), oraz np. do przechowywania kolejno±ci zada«do wykonywania.

Kolejka dwustronna Kolejka dwustronna (elementów typu Type) jest abstrakcyjn struktur danych, która odwoªuje si do poj cia dwóch ko«ców ci gu (albo pocz tku i ko«ca) (ang. Dequeue od Double Ended Queue (wymawiane tak jak deck)) Jej interfejs jest nast puj cy: Type rst() (poka» element z pierwszego ko«ca) Type last() (poka» element z drugiego ko«ca) pushfront(type) (dodaj element do pierwszego ko«ca) pushback(type) (dodaj element do drugiego ko«ca) Type popfront() (zwró i zdejmij element z pierwszego ko«ca) Type popback() (zwró i zdejmij element z drugiego ko«ca) Jest to relatywnie nieco rzadziej u»ywana abstrakcyjna struktura danych, b d ca skrzy»owaniem (uogólnieniem) stosu z kolejk (tzn. mo»na na niej naturalnie symulowa zachowanie zarówno stosu jak i kolejki)

Implementacja abstrakcyjnych struktur danych Zauwa»my,»e denicja abstrakcyjnej struktury danych wogóle nie precyzuje jak jest ona zaimplementowana. W istocie, jest to pozostawione do wyboru programi±cie i mo»liwe s ró»ne implementacje np. stosu, kolejki, etc. jednak zawsze spodziewany jest taki sam interfejs i jego zachowanie. Nale»y te» zauwa»y,»e ±wiadomy wybór takiej czy innej implementacji mo»e istotnie wpªywa na zªo»ono± czasow czy pami ciow okre±lonych operacji danej abstrakcyjnej struktury danych. Np. abstrakcyjn struktur danych: stos czy kolejk mo»na zaimplementowa u»ywaj c jako konkretnej struktury danych zarówno listy dowi zaniowej jak i tablicy. Bardzo dobrym wiczeniem jest implementacja wszystkich mo»liwych kombinacji wg poni»szej tabelki: abstrakcyjna str. danych Stos Kolejka Kolejka dwustronna implementacja: lista jednokierunkowa, tablica (dlaczego?) lista jednokierunkowa, tablica cykliczna (dlaczego?) lista dwukierunkowa (dlaczego?), tablica cykliczna We wszystkich powy»szych implementacjach mo»na zapewni staª zªo»ono± czasow (czyli niezale»n od liczby przechowywanych elementów)

Przykªadowe zadania: opisz list dowi zaniow jedno- i dwukierunkow, oraz cykliczn podaj pseudokod klas listy jedno- i dwukierunkowej napisz pseudokod prostych funkcji operuj cych na powy»szych (np. dodaj element na ko«cu listy, zwró liczb elementów) podaj przykªady algorytmów, gdzie lista jednokierunkowa wystarcza i takie, gdzie dwukierunkowa jest niezb dna, dokonaj analizy zªo»nono±ci czasowej porównaj zalety i wady list dowi zaniowych i tablic zaimplementuj kolejk i stos zarówno na li±cie dowi zaniowej, jak i na tablicy, dokonaj porównawcznej analizy tych implementacji (zªo»ono±, inne wady/zalety) zaprojektuj i zaimplementuj abstrakcyjn struktur danych b d c kolejk z dodatkow szybk operacj odwracania kolejno±ci.

Dzi kuj za uwag.