Wstęp do programowania

Podobne dokumenty
Programowanie obiektowe

Programowanie obiektowe

Struktury danych: stos, kolejka, lista, drzewo

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

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytmy i Struktury Danych

Wstęp do programowania

Listy, kolejki, stosy

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


Teoretyczne podstawy informatyki

ALGORYTMY I STRUKTURY DANYCH

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Programowanie obiektowe

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

dr inż. Paweł Myszkowski Wykład nr 11 ( )

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)

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Sortowanie - wybrane algorytmy

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

Podstawy Informatyki. Wykład 6. Struktury danych

Teoretyczne podstawy informatyki

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

Wstęp do programowania

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Odwrotna Notacja Polska

Stos LIFO Last In First Out

Ogólne wiadomości o grafach

Sortowanie bąbelkowe

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

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

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Algorytmy i Struktury Danych

Podstawy informatyki 2

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Wstęp do programowania

PODSTAWY INFORMATYKI wykład 6.

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Zadanie 1: Piętnastka

a) 7 b) 19 c) 21 d) 34

Algorytmy i Struktury Danych

Drzewa poszukiwań binarnych

Programowanie i projektowanie obiektowe

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

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

Algorytmy i Struktury Danych.

Wstęp do programowania

TEORETYCZNE PODSTAWY INFORMATYKI

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

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

Wstęp do Programowania potok funkcyjny

ALGORYTMY I STRUKTURY DANYCH

Wstęp do programowania

Metody Kompilacji Wykład 3

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

Abstrakcyjne struktury danych - stos, lista, drzewo

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Wykład 8 - Drzewa i algorytmy ich przetwarzania

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Wstęp do programowania

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

TEORETYCZNE PODSTAWY INFORMATYKI

Lista liniowa dwukierunkowa

Sortowanie. Bartman Jacek Algorytmy i struktury

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

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

Rozwiązywanie problemów metodą przeszukiwania

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

0-0000, , , itd

Wysokość drzewa Głębokość węzła

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

Struktury Danych i Złożoność Obliczeniowa

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Struktury danych (I): kolejka, stos itp.

Algorytmy sortujące i wyszukujące

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Struktury Danych i Złożoność Obliczeniowa

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

Porządek symetryczny: right(x)

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Wstęp do programowania

Algorytmy i Struktury Danych.

Programowanie i struktury danych 1 / 44

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Wstęp do programowania

Wykład 2. Drzewa poszukiwań binarnych (BST)

Abstrakcyjne struktury danych w praktyce

Algorytmy i struktury danych. wykład 5

Wstęp do programowania

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

Programowanie obiektowe

Transkrypt:

Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25

Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie występuje typ sekwencyjny list, który umożliwia wstawianie elementów na dowolną pozycję, usuwanie itd. Każda lista ma dwa końce. LIFO Last In First Out stos wstawianie (push) stos.append(el) pobieranie z usuwaniem (pop) stos.pop() FIFO First In First Out kolejka wstawianie (enqueue) kolejka.append(el) pobieranie z usuwaniem (dequeue) kolejka.pop(0) P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 2 / 25

Stos przykład Odwrotna Notacja Polska (notacja postfiksowa) Forma zapisu wyrażeń arytmetycznych, w której operator następuje po argumentach (a nie pomiędzy). Wygodna bo nie wymaga nawiasów. 2 2 2 + * zamiast 2 * (2 + 2). P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 3 / 25

Stos przykład c.d. Sposób obliczania 3 2 1 + * 1 3 2 3 2 3 3 2 1 4 3 2 1 + 5 3 3 6 3 3 * 7 9 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 4 / 25

ONP w Pythonie def add ( a, b ) : r e t u r n a+b def sub ( a, b ) : r e t u r n a b def mul ( a, b ) : r e t u r n a b def d i v ( a, b ) : r e t u r n a/b def compute_onp ( l ) : ops={ + : add, : sub, : mul, / : d i v } s t a c k =[] f o r symbol i n l : i f symbol i n ops : a=s t a c k. pop ( ) b=s t a c k. pop ( ) s t a c k. append ( ops [ symbol ] ( a, b ) ) e l s e : s t a c k. append ( symbol ) i f l e n ( s t a c k )! = 1 : p r i n t " E r r o r : ", s t a c k r e t u r n s t a c k [ 0 ] P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 5 / 25

Typowe zastosowania stosów i kolejek Zastosowania stosów analiza składniowa eksploracja ze ścieżką powrotu obchodzenie drzew i grafów (DFS) strategia dziel i zwyciężaj Zastosowania kolejek kolejki zadań buforowanie danych obchodzenie drzew i grafów (BFS) Kolejki priorytetowe Szczególnym przypadkiem kolejek są kolejki priorytetowe, w których operacja dequeue pobiera element o najwyższym priorytecie, który wcale nie musi być najdłużej oczekującym. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 6 / 25

Drzewa binarne Drzewo binarne jest strukturą danych, w której każdy węzeł ma co najwyżej dwa węzły potomne, każdy węzeł z wyjątkiem korzenia ma rodzica oraz żaden węzeł nie może być swoim przodkiem. Ważne pojęcia korzeń poddrzewo (lewe, prawe) potomek rodzic przodek P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 7 / 25

Naiwna implementacja w Pythonie Na potrzeby tego wykładu posłużymy się implementacją drzew binarnych przy pomocy krotek. ( 8, ( 3, ( 1, None, None ), ( 6, ( 4, None, None ), ( 7, None, None ) ) ), ( 1 0, None, ( 1 4, ( 1 3, None, None ), None ) ) ) P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 8 / 25

Obchodzenie drzewa Większość algorytmów operujących na drzewach wymaga sprawdzenia zawartości wierzchołków. Można to robić na wiele sposobów. Wyróżnia się dwa podstawowe: Depth First Search (DFS) i Breadth First Search (BFS). DFS Polega na schodzeniu wgłąb. Po odwiedzeniu wierzchołka, odwiedza się wszystkie wierzchołki w lewym poddrzewie, następnie wszystkie wierzchołki w prawym poddrzewie. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 9 / 25

Obchodzenie drzewa Większość algorytmów operujących na drzewach wymaga sprawdzenia zawartości wierzchołków. Można to robić na wiele sposobów. Wyróżnia się dwa podstawowe: Depth First Search (DFS) i Breadth First Search (BFS). BFS Polega na odwiedzaniu wierzchołków według odległości od korzenia. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 10 / 25

Obchodzenie drzewa DFS Stos 0 1 1 8 7 2 2 8 7 6 3 3 8 7 6 5 4 4 8 7 6 5 5 8 7 6 6 8 7 7 8 8 12 9 9 12 11 10 10 12 11 11 12 12 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 11 / 25

Obchodzenie drzewa BFS Kolejka 0 1 1 2 3 4 2 3 4 5 6 3 4 5 6 4 5 6 7 8 5 6 7 8 9 10 6 7 8 9 10 7 8 9 10 11 12 8 9 10 11 12 9 10 11 12 10 11 12 11 12 12 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 12 / 25

DFS implementacja w Pythonie def t r e e _ d f s ( t r e e ) : i f t r e e==none : return s t a c k =[ t r e e ] while l e n ( s t a c k ) >0: t=s t a c k. pop ( ) p r i n t v a l ( t ) i f r i g h t ( t )!= None : s t a c k. append ( r i g h t ( t ) ) i f l e f t ( t )!= None : s t a c k. append ( l e f t ( t ) ) P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 13 / 25

DFS implementacja rekurencyjna def t r e e _ d f s ( t r e e ) : i f t r e e==none : return p r i n t v a l ( t ) t r e e _ d f s ( l e f t ( t r e e ) ) t r e e _ d f s ( r i g h t ( t r e e ) ) Gdzie tutaj jest stos? P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 14 / 25

DFS implementacja rekurencyjna def t r e e _ d f s ( t r e e ) : i f t r e e==none : return p r i n t v a l ( t ) t r e e _ d f s ( l e f t ( t r e e ) ) t r e e _ d f s ( r i g h t ( t r e e ) ) Gdzie tutaj jest stos? Podczas wykonywania programu jest utrzymywany stos (call stack), który utrzymuje aktualnie wykonywane funkcje w kolejności wywołania. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 14 / 25

Kopce Kopce są szczególnym przypadkiem drzew, w których spełniony jest warunek, że element w korzeniu drzewa (i każdego poddrzewa) jest największym elementem w tym drzewie (poddrzewie). Włożenie nowego elementu do kopca może wymagać jego reorganizacji, ale za to wyjmowanie elementu nawiększego jest łatwe. Kopce dobrze nadają się do implementowania kolejek priorytetowych. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 15 / 25

Sortowanie przez kopcowanie Heapsort P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 16 / 25

Sortowanie przez kopcowanie Heapsort (aspekty praktyczne) Dane przechowywane są w tablicy. left(i) i*2+1 right(i) i*2+2 parent(i) (i-1)/2 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 17 / 25

Sortowanie przez kopcowanie Heapsort (algorytm) 1 Zrób kopiec 1 Dla każdego elementu w tablicy począwszy od pierwszego przenoś w górę kopca na właściwe miejsce 2 Posortuj 1 Zamień pierwszy element tablicy z ostatnim nieposortowanym 2 Odtwórz warunek kopca P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 18 / 25

Kilka słów o modułach Niewygodnie jest umieszczać wszystkie funkcje i inne elementy dużego programu w jednym pliku. Jeżeli zachodzi potrzeba skorzystania z funkcji, które znajdują się w innym pliku, należy użyć instrukcji import. import import nazwa Ładuje zawartość pliku nazwa.py. Elementy modułu są dostępne poprzez nazwa.el. from nazwa import f Ładuje funkcję f z pliku nazwa.py. Funkcja f jest dostępna bezpośrednio. Ta konstrukcja jest niezalecana. reload(nazwa) Przeładowuje ponownie moduł nazwa. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 19 / 25

Kilka słów o modułach test.py #! / u s r / b i n / python def f ( ) : p r i n t " Funkcja f. " Przykład >>> import test >>> test.f() Funkcja f. >>> from test import f >>> f() Funkcja f. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 20 / 25

Zadanie 1 wyrażenia nawiasowe Napisz program, który wczytuje ze standardowego wejścia linię tekstu zawierającą wyrażenie nawiasowe (ciąg nawiasów okrągłych) i rozstrzyga, czy jest ono poprawne. Przykład wyrażenia poprawnego (()()(()())) Przykład wyrażenia niepoprawnego (() P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 21 / 25

Zadanie 2 obchodzenie drzew Zaimplementuj obchodzenie drzewa binarnego (w reprezentacji krotkowej) metodami DFS i BFS. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 22 / 25

Zadanie 3 sortowanie przez kopcowanie Zaimplementuj algorytm Heapsort. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 23 / 25

Zadanie 4 pasjans Napisz program, który generuje losową sekwencję kart i sprawdza, czy pasjans o poniższych zasadach daje się ułożyć. 1 Karty rozkładane są na przemian na dwie drabinki. 2 Jeżeli na którejś z drabinek pojawią się leżące na sobie karty tego samego rodzaju (różniące się kolorem) są one usuwane z gry. Karta z sąsiedniej drabinki jest przenoszona, aby wyrównać wysokość. 3 Pasjans jest udany jeżeli wszystkie karty zostaną usunięte z gry. P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 24 / 25

Strona wykładu http://bioexploratorium.pl/wiki/wstęp_do_programowania 2013z P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 25 / 25