Matematyka Dyskretna. Andrzej Szepietowski. 25 marca 2004 roku
|
|
- Bogumił Domagała
- 8 lat temu
- Przeglądów:
Transkrypt
1 Matematyka Dyskretna Andrzej Szepietowski 25 marca 2004 roku
2
3 Rozdział 1 Stosy, kolejki i drzewa 1.1 Listy Lista to uporządkowany ciąg elementów. Przykładami list są tablice jednowymiarowe. W tablicach mamy dostęp do dowolnego elementu, poprzez podanie indeksu tego elementu. Przykład 1.1 W języku Pascal przykładem typu tablicy jednowymiarowej jest array[1..n] of integer. Jeżeli mamy zmienną tego typu a:array[1..n] of integer, to tablica a zawiera N elementów a[1], a[2],...,a[n]. W programie możemy odwoływać się do całej tablicy, na przykład w instrukcji przypisania a:=b, lub do pojedynczych elementów: a[i]:=a[i+1]. Możemy także używać tablic dwu lub więcej wymiarowych. Przykładem tablicy dwuwymiarowej jest typ array[1..n,1..m] of real. Zmienna c:array[1..n,1..m] of real zawiera N M elementów. Dla każdej pary liczb i, j spełniajacej warunki 1 i N, 1 j M, element c[i,j] zawiera liczbę typu real. 1.2 Stosy i kolejki Czasami wygodniej posługiwać się listami bez używania indeksów. Przykładami list, których można używać bez konieczności odwoływania się do indeksów poszczególnych ele- 3
4 4 Rozdział 1. Stosy, kolejki i drzewa mentów, są kolejki i stosy. Definicja 1.2 Kolejka jest lista z trzema operacjami: dodawania nowego elementu na koniec kolejki, zdejmowania pierwszego elementu z poczatku kolejki, sprawdzania, czy kolejka jest pusta. Taki sposób dodawania i odejmowania elementów jest określany angielskim skrótem FIFO (first in first out, czyli pierwszy, który wszedł, pierwszy wyjdzie). Przykłady kolejek spotykamy w sklepach, gdzie klienci czekający na obsłużenie tworzą kolejki. Definicja 1.3 Stos jest lista z trzema operacjami: dodawania elementu na wierzch stosu, zdejmowania elementu z wierzchu stosu, sprawdzania, czy stos jest pusty. Na stosie dodajemy i odejmujemy elementy z tego samego końca, podobnie jak w stosie talerzy spiętrzonym na stole. Talerze dokładane są na wierzch stosu i zdejmowane z wierzchu stosu. Taka organizacja obsługi listy określana jest angielskim skrótem LIFO (last in first out, czyli ostatni, który wszedł, pierwszy wyjdzie). Niektórzy w ten sposób organizują pracę na biurku. Przychodzące listy układają na stosie i jak mają czas, to zdejmują jeden list i odpowiadają na niego. Przyjrzyjmy się zastosowaniu kolejki lub stosu do szukania. Przypuśćmy, że szukamy przez telefon pewnej informacji (na przykład chcielibyśmy się dowiedzieć, kto z naszych znajomych ma pewną książkę). Algorytm szukania ksiażki wśród znajomych tworzymy STOS, który na początku jest pusty, wkładamy na STOS numery telefonów swoich znajomych, dopóki na stosie są jakieś numery, powtarzamy: zdejmujemy z wierzchu STOSU jeden numer telefonu, dzwonimy pod ten numer, jeżeli osoba, do której się dodzwoniliśmy, posiada szukaną książkę, to koniec poszukiwań, w przeciwnym przypadku pytamy ją o znajomych, którzy mogą mieć książkę numery tych znajomych są dopisywani na STOS. W powyższym algorytmie zamiast stosu może być użyta kolejka.
5 1.3 Implementacja stosu 1.3. Implementacja stosu 5 W wielu językach programowania stosy i kolejki nie występują jako standardowe struktury danych. W tym i następnym podrozdziale pokażemy jak można je utworzyć za pomocą tablic. Tworzymy tablicę ST OS[0..max] oraz zmienna W ierzchstosu. W tablicy przechowujemy elementy stosu. Element ST OS[0] leży na dnie stosu, a kolejne elementy nad nim. Zmienna W ierzchstosu wskazuje na pierwsze wolne miejsce w tablicy ST OS. W pustym stosie W ierzchstosu = 0. Operacja włożenia nowego elementu x na ST OS implementujemy za pomocą instrukcji: ST OS[W ierzchstosu] := x; W ierzchstosu := W ierzchstosu + 1; Tak skonstruowany stos może pomieścić co najwyżej max + 1 elementów. Jeżeli W ierzchstosu = max + 1, to stos jest pełny i nie można na niego wkładać nowych elementów. Operacja zdejmowania elementu z wierzchu ST OSU implementujemy za pomocą instrukcji: W ierzchstosu := W ierzchstosu 1; x := ST OS[W ierzchstosu]; Operację tą można wykonać, jeżeli stos nie jest pusty, to znaczy jeżeli W ierzchstosu > Implementacja kolejki Kolejkę też można utworzyć za pomocą tablicy. W tym celu deklarujemy tablicę KOLEJKA[0...max] oraz dwie zmienne P oczatekkolejki, KoniecKolejki. W tablicy przechowujemy elementy kolejki. Zmienna P oczatekkolejki wskazuje na pierwsze element kolejki, a zmienna KonieckKolejki na pierwsze wolne miejsce za kolejką. Kolejka jest pusta, jeżeli P oczatekkolejki = KonieckKolejki. Operacja włożenia nowego elementu x do KOLEJKI implementujemy za pomocą dwóch instrukcji: KOLEJKA[KoniecKolejki] := x; KoniecKolejki := KoniecKolejki + 1; Operacja zdejmowania elementu z końca KOLEJKI implementujemy za pomocą instrukcji: x := KOLEJKA[P oczatekkolejki]; P oczatekkolejki := P oczatekkolejki + 1;
6 6 Rozdział 1. Stosy, kolejki i drzewa Ta operacja może być wykonana, jeżeli kolejka nie jest pusta, to znaczy jeżeli P oczatekkolejki KoniecKolejki; Aby lepiej wykorzystać tablicę KOLEJKA, należy zapełniać ją cyklicznie. To znaczy po dojściu do końca (miejsca max 1) dalsze elementy wstawiamy na początek (jeżeli zwolniły się tam miejsca po zdjęciu elementów). Trzeba tylko zadbać, żeby za ostatni elementem w kolejce było przynajmniej jedno wolne miejsce. Operacje na kolejce przedstawiają się teraz następująco: Jeżeli (KoniecKolejki+1) mod (max + 1) = P oczatekkolejki, to KOLEJKA jest pełna. Jeżeli KoniecKolejki = P oczatekkolejki, to KOLEJKA jest pusta. Wstawianie nowego elementu x na koniec kolejki implementujemy za pomocą instrukcji: KOLEJKA[KoniecKolejki] := x; KoniecKolejki := (KoniecKolejki + 1) mod (max + 1); Zdejmowanie ostatniego elementu x z początku kolejki implementujemy za pomocą instrukcji: x := KOLEJKA[P oczatekkolejki]; P oczatekkolejki := (P oczatekkolejki + 1) mod (max + 1); 1.5 Drzewa ukorzenione Przypomnijmy, że drzewo ukorzenione to drzewo z wyróżnionym jednym wierzchołkiem, korzeniem. Każdy wierzchołek v różny od korzenia jest z nim połączony dokładnie jedną drogą prostą. Sąsiad leżący na drodze do korzenia nazywamy ojcem wierzchołka v. Pozastali sąsiedzi są synami wierzchołka v. Korzeń drzewa nie ma ojca, wszyscy jego sąsiedzi są jego synami. Wierzchołek, który nie posiada syna nazywamy liściem. 1.6 Drzewa binarne Drzewa binarne to takie drzewa ukorzenione, w których każdy wierzchołek ma co najwyżej dwóch synów. Do oznaczania wierzchołków w drzewie binarnym wygodnie jest używać ciągów zer i jedynek, czyli elementów zbioru {0, 1}. Wierzchołki drzewa oznaczamy w następujący sposób: korzeń drzewa oznaczamy przez λ pusty ciąg, jeżeli jakiś wierzchołek jest oznaczony przez x, to jego synowie oznaczeni są przez x0 i x1.
7 1.6. Drzewa binarne 7 Rysunek 1.1: Przykład drzewa binarnego λ Przy takim oznaczeniu wierzchołków drzewa binarnego nazwa wierzchołka x mówi nam, jaka ścieżka prowadzi od korzenia do x. Na przykład, aby dojść od korzenia do wierzchołka 110 nalezy: pójść w prawo do 1, potem znowu w prawo do 11, a na końcu w lewo do 110. Jeżeli mamy drzewo binarne T, to z każdym wierzchołkiem x możemy skojarzyć poddrzewo T x złożone z wierzchołka x i wszystkich jego potomków. Na przykład w drzewie przedstawionym na rysunku 1.1 wierzchołek x = 1 wyznacza poddrzewo T x przedstawione na rysunku 1.2. Mówimy też, że drzewo T x składa się z korzenia Rysunek 1.2: Poddrzewo T (wierzchołka x), z lewego poddrzewa T x0 i z prawego poddrzewa T x1. Wysokością drzewa nazywamy długość (liczbę krawędzi) najdłuższej ścieżki w drzewie prowadzącej od korzenia do liścia. Na przykład drzewo z rysunku 1.1 jest wysokości 3.
8 8 Rozdział 1. Stosy, kolejki i drzewa 1.7 Drzewa wyrażeń arytmetycznych Przykładem zastosowania drzew binarnych są drzewa wyrażeń arytmetycznych. Najpierw przykład. Na rysunku 1.3 przedstawiono drzewo wyrażenia 2a+3/d. W drzewie tym każdy wierzchołek ma etykietę. Liście etykietowane są stałymi albo zmiennymi. Wierzchołki nie będące liśćmi etykietowane są operacjami arytmetyczymi. Każdemu wierzchołkowi w drzewie możemy przypisać wyrażenie arytmetyczne według następującej zasady: dla liści wyrażeniami są etykiety tych liści (stałe lub zmienne), jeżeli wierzchołek x ma etykietę op, a jego synom przypisano wyrażenia W (x0) i W (x1), to wierzchołkowi x przypisujemy wyrażenie W (x) = (W (x0) op W (x1)). Rysunek 1.3: Drzewo wyrażenia 2a + 3/d + / 2 a 3 d Przykład 1.4 W drzewie z rysunku1.3 wierzchołkowi z etykieta odpowiada wyrażenie 2 a, wierzchołkowi z etykieta / wyrażenie 3/d, a korzeniowi wyrażenie ((2 a) + (3/d)). Wyrażenie to zawiera więcej nawiasów, niż to się zwykle stosuje. Normalnie to samo wyrażenie przedstawiamy bez nawiasów w postaci 2a + 3/d. Opuszczenie nawiasów może prowadzić do niejednoznaczności lub może zmienić sens wyrażenia. Na przykład wyrażenie 2(a + 3/d) po opuszczeniu nawiasów stanie się identyczne z wyrażeniem 2a + 3/d i zmieni sens. Drzewo, które odpowiada wyrażeniu 2(a + 3/d), przedstawiono na rysunku 1.4. Drzewo wyrażenia arytmetycznego oddaje logiczną strukturę i sposób obliczania tego wyrażenia.
9 1.7. Drzewa wyrażeń arytmetycznych 9 Rysunek 1.4: Drzewo wyrażenia 2(a + 3/d) 2 + a / 3 d Istnieje sposób przedstawiania wyrażeń arytmetycznych nie wymagający nawiasów. Jest to tak zwana notacja polska lub Łukasiewicza. Jest ona też nazywana notacją postfixową, ponieważ znak operacji stoi na końcu wyrażenia, za argumentami, czyli wyrażenie w notacji postfixowej ma postać: pierwszy argument drugi argument operacja. Notacja, do jakiej jesteśmy przyzwyczajeni, nazywa się infixowa, ponieważ operacja znajduje się pomiędzy argumentami, czyli wyrażenie w notacji infixowej ma postać: pierwszy argument operacja drugi argument. Przykład 1.5 Wyrażenie w postaci postfixowej 2, a+ ma w postaci infixowej postać a wyrażenie 2 + a, 2, a 3, d/+ jest postfixową postacią wyrażenia 2a + 3/d. W wyrażeniach w postaci postfixowej nie potrzeba nawiasów. Wartość wyrażenia można w sposób jednoznaczny odtworzyć z samego wyrażenia za pomocą następującego algorytmu.:
10 10 Rozdział 1. Stosy, kolejki i drzewa Algorytm obliczania wartości wyrażenia w postaci postfixowej. Dla kolejnych elementów zapisu wyrażenia: jeżeli element jest stałą lub zmienną, to wkładamy jego wartość na stos, jeżeli element jest znakiem operacji, to: zdejmujemy dwie wartości z wierzchu stosu, wykonujemy operację na tych wartościach, obliczoną wartość wkładamy na wierzch stosu. Po przejściu całego wyrażenia jego wartość znajduje się na stosie. Przykład 1.6 Zademonstrujmy ten algorytm na przykładzie wyrażenia: abc + de/+ Załóżmy, że zmienne maja następujące wartości: a = 3, b = 2, c = 1, d = 4, e = 2. Poniższa tabela przedstawia zawartość stosu po przeczytaniu kolejnych elementów wyrażenia. czytany element stos a 3, b 3, 2, c 3, 2, 1, + 3, 3, 9, d 9, 4, e 9, 4, 2, / 9, 2, Przeszukiwanie drzew binarnych Zajmiemy się teraz dwoma algorytmami przeszukiwania drzew (binarnych): przeszukiwanie w głąb i wszerz. Różnią się one rodzajem użytych struktur danych. W algorytmie przeszukiwania w głąb użyjemy stosu, a w algorytmie przeszukiwania wszerz użyjemy kolejki Przeszukiwanie drzewa w głab Algorytm przeszukiwania drzewa w głab. Dane wejściowe: drzewo T. Odwiedzamy korzeń λ i wkładamy go na STOS; dopóki STOS nie jest pusty, powtarzamy: Niech v będzie wierzchołkiem na wierzchu STOSU,
11 1.8. Przeszukiwanie drzew binarnych 11 sprawdzamy, czy istnieje syn u wierzchołka v, który nie był jeszcze odwiedzony, jeżeli takie u się znajdzie, to odwiedzamy u i wkładamy go na wierzch STOSU, jeżeli takiego u nie ma, to zdejmujemy v ze STOSU; cofamy się do wierzchołka będącego na stosie pod spodem. Algorytm powinien dodatkowo zapamiętywać, jaki wierzchołek był ostatnio zdjęty ze stosu. Pozwala to stwierdzić, który z synów wierzchołka znajdującego się na stosie pod spodem należy teraz rozpatrzeć. Przykład 1.7 Poniższa tabela pokazuje jaki wierzchołek jest odwiedzany i jaka jest zawartość stosu po każdej kolejnej iteracji pętli algorytmu, gdy przeszukiwane jest drzewo z rysunku 1.1. Wierzchołek STOS λ λ 0 λ,0 00 λ,0,00 0 λ,0 01 λ,0,01 0 λ,0 λ λ 1 λ,1 10 λ,1,10 1 λ,1 11 λ,1, λ,1,11, λ,1, λ,1,11, λ,1,11 1 λ,1 λ λ W metodzie przeszukiwania w głąb po każdym kroku algorytmu wierzchołki znajdujące się na stosie tworzą ścieżkę od wierzchołka wejściowego do wierzchołka aktualnie odwiedzanego Przeszukiwanie drzewa wszerz Następny algorytm przeszukiwania drzew używa kolejki jako pomocniczej struktury danych. Algorytm przeszukiwania wszerz. Dane wejściowe: drzewo T.
12 12 Rozdział 1. Stosy, kolejki i drzewa Odwiedzamy korzeń drzewa λ i wkładamy go do KOLEJKI. Dopóki KOLEJKA nie jest pusta, powtarzamy: bierzemy jeden wierzchołek v z początku KOLEJKI, odwiedzamy wszystkich synów wierzchołka v każdego wkładamy na koniec kolejki. Poniżej przedstawiono odwiedzane wierzchołki oraz zawartość kolejki po każdej kolejnej iteracji pętli algorytmu przeszukiwania wszerz drzewa przedstawionego na rysunku 1.1. wierzchołki KOLEJKA λ λ 0,1 0,1 00,01 1,00,01 10,11 00,01,10,11-01,10,11-10, , , W metodzie przeszukiwania wszerz wierzchołki są przeszukiwane w kolejności od wierzchołków będących najbliżej wierzchołka początkowego do wierzchołków będących dalej. 1.9 Drzewa decyzyjne Rysunek 1.5 przedstawia drzewo decyzyjne dla pewnego sposobu posortowania trzech elementów a, b, c, które pochodzą z jakiegoś uporządkowanego zbioru. W korzeniu drzewa porównujemy elementy a i b. Jeżeli a < b, to idziemy do następnego wierzchołka w lewo wzdłuż krawędzi z etykietą <. Jeżeli a > b, to idziemy w prawo wzdłuż krawędzi z etykietą >. Podobnie postępujemy w innych wierzchołkach wewnętrznych. Liście drzewa odpowiadają ostatecznym decyzjom i mówią jak należy uporządkować elementy a, b i c, aby tworzyły one ciąg rosnący. Drzewo z rysunku 1.5 opisuje pewien sposób postępowania. Jak widać ten sposób wymaga maksymalnie trzech porównań. Można zadać pytanie, czy istnieje inny schemat postępowania wymagający mniej porównań. Aby odpowiedzieć na to pytanie, przypuśćmy, że na zmienne a, b, c podstawiamy wartości kolejnych permutacji π zbioru {1, 2, 3}. Zauważmy, że każda permutacja π powinna prowadzić do innego liścia. Rzeczywiście, przypuśćmy bowiem, że mamy dwie różne permutacje π i τ, które prowadzą do tego samego liścia. Ponieważ prowadzi je do tego samego liścia, to będą one tak samo posortowane. Ale z drugiej strony, ponieważ są one różne więc istnieją 1 i < j 3 takie, że π(i) < π(j) i τ(i) > τ(j). Z czego wynika, że nie powinny one być tak samo posortowane. Tak więc drzewo dowolnego schematu sortującego trzy elementy musi mieć 6 = 3! liści i głębokość co najmniej 3. Drzewo decyzyjne z rysunku 1.6 przedstawia schemat postępowania w następującym problemie. Mamy trzy monety a, b, c. Jedna z nich jest fałszywa, to znaczy trochę cięższa
13 1.9. Drzewa decyzyjne 13 Rysunek 1.5: Drzewo decyzyjne a?b < > b?c a?c < > < > abc a?c bac b?c < > < > acb cab bca cba Rysunek 1.6: Drzewo decyzyjne a?b < = > a?c a?c a?c < = < > = > a b+ c+ c b a+
14 14 Rozdział 1. Stosy, kolejki i drzewa lub trochę lżejsza od dwóch pozostałych. Schemat pokazuje jak za pomocą wagi szalkowej bez odważników znaleźć fałszywą monetę. W korzeniu na lewej szalce kładziemy monetą a, na prawej b. Jeżeli a okaże się lżejsz od b, to idziemy w dół wzdłuż krawędzi z etykietą <. Jeżeli a jest ciższa od b, idziemy wzdłuż krawędzi >, a jeżeli szalki będą w równowadze, to idziemy wzdłuż krawędzi =. W innych wewnętrznych wierzchołkach postępujemy podobnie. W liściach mamy ostateczne decyzje, która moneta jest fałszywa, oraz czy jest ona cięższa (znak +), czy lżejsza (znak ) Drzewo gry Rozważmy następującą grę. Mamy trzy kupki kamyków. Gracze po kolei zabierają kamienie z kupek, przy czym wolno brać kamienie tylko z jednej kupki i oczywiście jakieś kamienie trzeba zabrać. Gra ta jest podobna do gry rozważanej w rozdziale o funkcjach boolowskich, tylko inna jest zasada, kto wygrywa. Teraz przegrywa gracz, który zabiera ostatnie kamienie. Rysunek 1.7: Drzewo gry 1(2, 1) 2(1, 1) 2(2, 0) 2(0, 1) 1(1, 0) 1(1, 0) 1(0, 0) 1(0, 0) 2(0, 0) 2(0, 0) Rysunek 1.7 przedstawia drzewo dla tej gry. Dla uproszczenia przyjęto, że są tylko dwie kupki, w jednej są dwa kamienie, a w drugiej jeden. Wierzchołki drzewa posiadają etykiety postaci x(y, z); gdzie x oznacza, czyja jest kolej na wykonanie ruchu, pierwszego czy drugiego gracza; y i z oznaczają liczby kamieni w kupkach. W korzeniu pierwszy gracz ma ruch, na kupkach są 2 i 1 kamień. Trzej synowie korzenia odpowiadają sytuacjom po wykonaniu pierwszego ruchu. W liściach mamy puste kupki.
15 1.10. Drzewo gry 15 Rysunek 1.8: Drzewo gry z waluacją 1(2, 1)+ 2(1, 1) 2(2, 0) 2(0, 1)+ 1(1, 0) 1(1, 0) 1(0, 0)+ 1(0, 0)+ 2(0, 0) 2(0, 0) Każdemu wierzchołkowi drzewa przypisujemy teraz wartość 1 lub -1, w zależności czy jest to konfiguracja wygrywająca, czy przegrywająca dla pierwszego gracza. Przypisywanie wartości zaczynamy od liści. Jeżeli w liściu ruch ma pierwszy gracz, to nadajemy mu wartość 1, ponieważ wygrał on grę, przed chwilą drugi gracz zabrał ostatnie kamienie. Jeżeli ruch należy do drugiego gracza, to liść dostaje wartość -1. Następnie nadajemy wartości wewnętrznym wierzchołkom. Jeżeli wszyscy synowie jakiegoś wierzchołka v mają już wartości, to można przypisać wartość wierzchołkowi v. Jeżeli ruch ma pierwszy gracz, to wierzchołkowi v nadajemy wartość równą największej wartości synów v. Jeżeli ruch należy do drugiego gracza, to bierzemy minimum. Na rysunku 1.8 zaznaczono wartości wszystkich wierzchołków. Znak + oznacza wartość +1, znak wartość -1. Korzeń ma wartość +1, co oznacza, że gracz pierwszy może wygrać tą grę. Powinien w pierwszym ruchu przejść do wierzchołka z wartością 1 (w tym wypadku do trzeciego syna) Algorytm waluacji drzewa gry Opiszemy teraz algorytm, który oblicza wartości wszystkich wierzchołków w drzewie gry. Używając stosu będzie on przeszukiwał w głąb drzewo gry. Elementy na stosie są następującej postaci: gdzie x = (cr(x), konf(x), war(x), nr(x)),
16 16 Rozdział 1. Stosy, kolejki i drzewa cr(x) oznacza, czyj ruch, konf(x) oznacza konfigurację kamieni, czyli ile kamieni jest w poszczególnych kupkach. war(x) oznacza wartość wierchołka, nr(x) oznacza, numer następnego do rozpatrzenia ruchu. Algorytmu waluacji drzewa gry Tworzymy elemenet dla konfiguracji rozpoczynaąjcej grę i wkładamy go na stos. Dopóki stos nie jest pusty obrabiamy element x z na wierzchu stosu. Procedura obróbki elementu x z wierzchu stosu Jeżeli element x jest liściem, to: nadajemy mu wartość według zasady: jeżeli cr(x) = 2, to war(x) := 1, jeżeli cr(x) = 1, to war(x) := 1, zdejmujemy x ze stosu. Jeżeli poprzednią operacją na stosie było zdjęcie elementu z, to: uaktualniamy wartość war(x) według zasady: Jeżeli cr(x) = 1, to war(x) := max(war(x), war(z)). Jeżeli cr(x) = 2, to war(x) := min(war(x), war(z)). Jeżeli można wykonać następny ruch (z numerem nr(x)), to tworzymy nowy element y z polami: cr(y) := 3 cr(x); konf(y) := conf(x) po wykonaniu ruchu nr(x); jeżeli cr(y) = 2, to war(y) := 1, jeżeli cr(y) = 1), to war(y) = 1. nr(y) := 1. nr(x) := nr(x) + 1 wkładamy element y na stos (element x nie jest zdejmowany ze stosu i y jest kładzione na nim. Jeżeli ruchu o numerze nr(x) nie można wykonać, to zdejmujemy x ze stosu. Pierwszy element odpowiadający początkowej konfiguracji jest ze stosu zdejmowany na samym końcu. Jego wartość w chwili zdjęcia ze stosu jest końcową wartością. Jeżeli jest ona równa 1, to gracz pierwszy posiada w tej grze strategię wygrywającą. Strategia ta polega na wybieraniu takiego ruchu, który w drzewie gry prowadzi do stanu z największą wartością. W czasie algorytmu waluacji całe drzewo nie jest zapamiętywane. Nawet dla niewielkiej gry może ono być bardzo duże. W każdym momencie pamiętana jest na stosie tylko ścieżka od korzenia do bieżącej konfiguracji. Aby wiedzieć jak pierwszy gracz powinien grać, dobrze jest zapamiętywać numer ruchu, który prowadzi z korzenia do elementu z
17 1.10. Drzewo gry 17 wartością 1. Dla innych elementów taka informacja nie może być zapamiętywana, bo wymagałoby to zbyt duęj pamięci. Dlatego po wykonaniu pierwszego ruchu i po odpowiedzi drugiego gracza pierwszy gracz musi znowu obliczać wartosc dla bieżącej konfiguracji. Przykład 1.8 Zobaczmy jaka będzie zawartość stosu po kolejnych krokach algorytmu waluacji dla gry opisanej wyżej. Zaczynamy od konfiguracji poczatkowej [1, (2, 1), 1, 1], która odpowiada poczatkowi gry. Przypominamy, że pierwsza jedynka oznacza, że ruch należy do pierwszego gracza, para (2, 1) oznacza konfigurację kamieni, 1 jest wstępna waluacją korzenia gry, a ostatnia jedynka oznacza, że następny do rozpatrzenia jest pierwszy syn. Po trzech kolejnych iteracjach głównej pętli algorytmu stos wyglada następująco: [1, (2, 1), 1, 2] [2, (1, 1), +1, 1] [1, (2, 1), 1, 2] [2, (1, 1), +1, 2] [1, (1, 0), 1, 1] [1, (2, 1), 1, 2] [2, (1, 1), +1, 2] [1, (1, 0), 1, 2] [2, (0, 0), +1, 1] Ostatni element na stosie jest liściem. Można teraz obliczyć jego wartość -1. [1, (2, 1), 1, 2] [2, (1, 1), +1, 2] [1, (1, 0), 1, 2] [2, (0, 0), +1, 1] W następnych iteracjach zdejmowane sa kolejne elementy ze stosu: [1, (2, 1), 1, 2] [2, (1, 1), +1, 2] [1, (1, 0), 1, 2] [1, (2, 1), 1, 2] [2, (1, 1), 1, 2] [1, (2, 1), 1, 2] Nastapił powrót do korzenia. Teraz rozważany będzie drugi ruch w konfiguracji poczat- kowej. [1, (2, 1), 1, 3] [2, (2, 0), +1, 1] [1, (2, 1), 1, 3] [2, (2, 0), +1, 2] [1, (1, 0), 1, 1] [1, (2, 1), 1, 3] [2, (2, 0), +1, 2] [1, (1, 0), 1, 2] [2, (0, 0), +1, 1] Ostatni element na stosie jest liściem. Obliczamy jego wartość 1. [1, (2, 1), 1, 3] [2, (2, 0), +1, 2] [1, (1, 0), 1, 2] [2, (0, 0), +1, 1] W następnych krokach zdejmowane sa kolejne elementy ze stosu: [1, (2, 1), 1, 3] [2, (2, 0), +1, 2] [1, (1, 0), 1, 2] [1, (2, 1), 1, 3] [2, (2, 0), 1, 3] Nastapił powrót do drugiego syna konfiguracji poczatkowej. Teraz rozpatywany będzie drugi ruch z tej konfiguracji. [1, (2, 1), 1, 3] [2, (2, 0), 1, 3] [1, (0, 0), 1, 1] Znowu dotarliśmy do liścia; jego wartość wunosi +1. [1, (2, 1), 1, 3] [2, (2, 0), 1, 3] [1, (0, 0), 1, 1] Zdejmujemy dwa elementy ze stosu [1, (2, 1), 1, 3] [2, (2, 0), 1, 3] [1, (2, 1), 1, 3] Znowy jesteśmy w korzeniu drzewa. Do rozpatrzenia został trzeci ruch [1, (2, 1), 1, 4] [2, (1, 0), 1, 1] [1, (2, 1), 1, 4] [2, (1, 0), +1, 1] [1, (0, 0), 1, 1] Znowu dotarliśmy do liścia; jego wartość wynosi +1 [1, (2, 1), 1, 4] [2, (1, 0), +1, 1] [1, (0, 0), 1, 1] Teraz zostana po kolei zdjęte wszystkie elementy ze stosu [1, (2, 1), 1, 4] [2, (1, 0), +1, 1]
18 18 Rozdział 1. Stosy, kolejki i drzewa [1, (2, 1), +1, 4] Koniec pracy algorytmu; ostateczna wartość korzenia wynosi Zadania 1. Ile wierzchołków może mieć drzewo binarne wysokości h? 2. Przeszukaj metodą w głąb ( wszerz ) drzewo z rysunku??. 3. Narysuj drzewo dla wyrażenie 2(a + 3)/(b + 4). Przedstaw to wyrażenie w postaci postfixowej i prefixowej. 4. Narysuj drzewo dla wyrażenie 2, 3+5/7 3, 1. Przedstaw to wyrażenie w postaci infixowej i prefixowej. Oblicz wartość tego wyrażenia. Przedstaw to wyrażenie w postaci infixowej i prefixowej. 5. Udowodnij, że każde pełne drzewo binarne o n liściach ma n 1 wierzchołków wewnętrznych. Drzewo binarne nazywa się pełne, jeżeli każdy jego wierzchołek ma albo dwóch synów, albo nie ma synów wcale (jest liściem). 6. Narysuj drzewo decyzyjne dla sortowania czterech elementów. 7. Jak implementować drzewo binarne za pomocą tablic Problemy Szukanie fałszywej monety 1. Zaprojektuj drzewo decyzyjne dla szukania jednej fałszywej spośród 9 monet, jeżeli wiadomo, że fałszywa moneta jest lżejsza. 2. Opisz jak za pomocą k ważeń wyszukać lżejszą spośród 3 k monet. 3. Zaprojektuj drzewo decyzyjne dla szukania jednej fałszywej (lżejszej lub cięzszej) spośród monet a, b, c i d, jeżeli mamy dodatkowo do dyspozycji dobrą monetę x. 4. Pokaż, że jeżeli mamy dodatkowe dobre monety, to za pomocą k ważeń możemy zidentyfikować fałszywą monetę (i powiedzieć, czy jest lżejsza, czy cięższa) dla co najwyżej (3k 1) 2 monet. 5. Pokaż, że jeżeli nie mamy dodatkowych monet, to za pomocą k ważeń możemy zidentyfikować fałszywą monetę dla co najwyżej (3k 3) 2 monet.
Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku
Matematyka Dyskretna Andrzej Szepietowski 25 czerwca 2002 roku Rozdział 1 Struktury danych 1.1 Listy, stosy i kolejki Lista to uporz adkowany ci ag elementów. Przykładami list s a wektory lub tablice
Bardziej szczegółowoUNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński
UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński kierunek: Informatyka GDAŃSK 2019 Niniejsze materiały powstały
Bardziej szczegółowoAlgorytmiczna teoria grafów
Przedmiot fakultatywny 20h wykładu + 20h ćwiczeń 21 lutego 2014 Zasady zaliczenia 1 ćwiczenia (ocena): kolokwium, zadania programistyczne (implementacje algorytmów), praca na ćwiczeniach. 2 Wykład (egzamin)
Bardziej szczegółowo2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,
2 Arytmetyka Niech b = d r d r 1 d 1 d 0 będzie zapisem liczby w systemie dwójkowym Zamiana zapisu liczby b na system dziesiętny odbywa się poprzez wykonanie dodawania d r 2 r + d r 1 2 r 1 d 1 2 1 + d
Bardziej szczegółowoDynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Bardziej szczegółowoAlgorytmy 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ółowoGrafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz
Grafy (3): drzewa Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków UTP Bydgoszcz 13 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 1 / 107 Drzewo Definicja. Drzewo to graf acykliczny
Bardziej szczegółowoWykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
Bardziej szczegółowoWstęp do programowania
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
Bardziej szczegółowoWykłady z Matematyki Dyskretnej
Wykłady z Matematyki Dyskretnej dla kierunku Informatyka dr Instytut Informatyki Politechnika Krakowska Wykłady na bazie materiałów: dra hab. Andrzeja Karafiata dr hab. Joanny Kołodziej, prof. PK Grafy
Bardziej szczegółowoStruktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Bardziej szczegółowoprowadzą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ółowoWysokość drzewa Głębokość węzła
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoPodstawy Informatyki. Wykład 6. Struktury danych
Podstawy Informatyki Wykład 6 Struktury danych Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą
Bardziej szczegółowoTeoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 6a Model danych oparty na drzewach 1 Model danych oparty na drzewach Istnieje wiele sytuacji w których przetwarzane informacje mają strukturę hierarchiczną lub zagnieżdżoną,
Bardziej szczegółowoListy, kolejki, stosy
Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:
Bardziej szczegółowoNotacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.
1 wyliczanie i transformacja wyrażeń (wersja skrócona) Opis został przygotowany przez: Bogdana Kreczmera 28 kwietnia 2002 Strona 1 z 68 Zakład Podstaw Cybernetyki i Robotyki - trochę historii...............
Bardziej szczegółowo1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.
1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. Algorytmy przeszukiwania w głąb i wszerz są najczęściej stosowanymi algorytmami przeszukiwania. Wykorzystuje się je do zbadania istnienia połączenie
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Bardziej szczegółowoMatematyka 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ółowooperacje 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ółowoALGORYTMY I STRUKTURY DANYCH
LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu
Bardziej szczegółowoAbstrakcyjne struktury danych - stos, lista, drzewo
Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą
Bardziej szczegółowoWykład 2. Drzewa zbalansowane AVL i 2-3-4
Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania
Bardziej szczegółowoKolejka 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ółowoSZTUCZNA INTELIGENCJA
SZTUCZNA INTELIGENCJA WYKŁAD 12. PRZESZUKIWANIE Częstochowa 2014 Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska ROZWIĄZYWANIE PROBLEMÓW JAKO PRZESZUKIWANIE Istotną rolę podczas
Bardziej szczegółowoKażdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.
Drzewa binarne Każdy węzeł w drzewie posiada pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste. Uporządkowanie. Zakładamy, że klucze są różne. Klucze leżące
Bardziej szczegółowoPorządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
Bardziej szczegółowoObliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303
Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp
Bardziej szczegółowoZADANIE 1. Ważenie (14 pkt)
ZADANIE 1. Ważenie (14 pkt) Danych jest n przedmiotów o niewielkich gabarytach i różnych wagach. Jest też do dyspozycji waga z dwiema szalkami, ale nie ma odważników. Kładąc na wadze przedmioty a i b,
Bardziej szczegółowodr inż. Paweł Myszkowski Wykład nr 11 ( )
dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:
Bardziej szczegółowoPodstawy 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ółowoTypy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:
Strona 1 z 17 Typy danych 1. Dane tekstowe rozmaite słowa zapisane w różnych alfabetach: Rozwój metod badawczych pozwala na przesunięcie granicy poznawania otaczającego coraz dalej w głąb materii: 2. Dane
Bardziej szczegółowoDrzewa BST i AVL. Drzewa poszukiwań binarnych (BST)
Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie
Bardziej szczegółowoDrzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:
Drzewa Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną.
Bardziej szczegółowoINFORMATYKA DANE.
INFORMATYKA DANE http://www.infoceram.agh.edu.pl DANE Dane to zbiory liczb, znaków, sygnałów, wykresów, tekstów, itp., które mogą być przetwarzane. Pojęcie danych jest relatywne i istnieje tylko razem
Bardziej szczegółowoWYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA
Rekurencja - zdolność podprogramu (procedury) do wywoływania samego (samej) siebie Wieże Hanoi dane wejściowe - trzy kołki i N krążków o różniących się średnicach wynik - sekwencja ruchów przenosząca krążki
Bardziej szczegółowoPrzypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.
Spis treści 1 Drzewa 1.1 Drzewa binarne 1.1.1 Zadanie 1.1.2 Drzewo BST (Binary Search Tree) 1.1.2.1 Zadanie 1 1.1.2.2 Zadanie 2 1.1.2.3 Zadanie 3 1.1.2.4 Usuwanie węzła w drzewie BST 1.1.2.5 Zadanie 4
Bardziej szczegółowoTeoretyczne podstawy informatyki
Teoretyczne podstawy informatyki Wykład 6b: Model danych oparty na drzewach http://hibiscus.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Model danych oparty na drzewach
Bardziej szczegółowoMetody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2
Metody teorii gier ALP520 - Wykład z Algorytmów Probabilistycznych p.2 Metody teorii gier Cel: Wyprowadzenie oszacowania dolnego na oczekiwany czas działania dowolnego algorytmu losowego dla danego problemu.
Bardziej szczegółowoTadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski
: idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski
Bardziej szczegółowoTwój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).
Powrót Twój wynik: 4 punktów na 6 możliwych do uzyskania (6667 %). Nr Opcja Punkty Poprawna Odpowiedź Rozważmy algorytm AVLSequence postaci: 1 Niech drzewo będzie rezultatem działania algorytmu AVLSequence
Bardziej szczegółowo0-0000, 1-0001, 2-0010, 3-0011 itd... 9-1001.
KODOWANIE Jednym z problemów, z którymi spotykamy się w informatyce, jest problem właściwego wykorzystania pamięci. Konstruując algorytm staramy się zwykle nie tylko o zminimalizowanie kosztów czasowych
Bardziej szczegółowoLista 4. Kamil Matuszewski 22 marca 2016
Lista 4 Kamil Matuszewski 22 marca 2016 1 2 3 4 5 6 7 8 9 10 Zadanie 2 Ułóż algorytm który dla danego n-wierzchołkowego drzewa i liczby k pokoloruje jak najwięcej wierzchołków tak, by na każdej ścieżce
Bardziej szczegółowoAlgorytmy 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ółowoStos LIFO Last In First Out
Stos LIFO Last In First Out Operacje: push - dodanie elementu na stos pop - usunięcie elementu ze stosu empty - sprawdzenie, czy stos jest pusty size - zwrócenie liczby elementów na stosie value (peek)
Bardziej szczegółowoInstrukcje dla zawodników
Instrukcje dla zawodników Nie otwieraj arkusza z zadaniami dopóki nie zostaniesz o to poproszony. Instrukcje poniżej zostaną ci odczytane i wyjaśnione. 1. Arkusz składa się z 3 zadań. 2. Każde zadanie
Bardziej szczegółowoPoprawność 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ółowoMetody Kompilacji Wykład 3
Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy
Bardziej szczegółowoAlgorytmy i struktury danych. wykład 5
Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również
Bardziej szczegółowoMatematyka Dyskretna - zadania
zad. 1. Chcemy zdefiniować rekurencyjnie zbiór Z wszystkich trójkątów równoramiennych ABC, gdzie współrzędne wierzchołków będą liczbami całkowitymi, wierzchołek A zawsze będzie leżeć w początku układu
Bardziej szczegółowoZofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1
Wykład Algorytmy grafowe metoda zachłanna. Właściwości algorytmu zachłannego:. W przeciwieństwie do metody programowania dynamicznego nie występuje etap dzielenia na mniejsze realizacje z wykorzystaniem
Bardziej szczegółowoZnajdowanie 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ółowoa) 7 b) 19 c) 21 d) 34
Zadanie 1. Pytania testowe dotyczące podstawowych własności grafów. Zadanie 2. Przy każdym z zadań może się pojawić polecenie krótkiej charakterystyki algorytmu. Zadanie 3. W zadanym grafie sprawdzenie
Bardziej szczegółowo7a. Teoria drzew - kodowanie i dekodowanie
7a. Teoria drzew - kodowanie i dekodowanie Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2016/2017 rzegorz Kosiorowski (Uniwersytet Ekonomiczny 7a. wteoria Krakowie) drzew - kodowanie i
Bardziej szczegółowoINFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227
INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne Sortowanie Dane wejściowe : trzy liczby w dowolnym porządku Dane wyjściowe: trzy liczby
Bardziej szczegółowoMatematyka Dyskretna Zestaw 2
Materiały dydaktyczne Matematyka Dyskretna (Zestaw ) Matematyka Dyskretna Zestaw 1. Wykazać, że nie istnieje liczba naturalna, która przy dzieleniu przez 18 daje resztę 13, a przy dzieleniu przez 1 daje
Bardziej szczegółowoWyszukiwanie binarne
Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie
Bardziej szczegółowododatkowe operacje dla kopca binarnego: typu min oraz typu max:
ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu
Bardziej szczegółowoWstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel
Wstęp do programowania Drzewa podstawowe techniki Piotr Chrząstowski-Wachtel Drzewa wyszukiwań Drzewa często służą do przechowywania informacji. Jeśli uda sie nam stworzyć drzewo o niewielkiej wysokości
Bardziej szczegółowoE: Rekonstrukcja ewolucji. Algorytmy filogenetyczne
E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne Przypominajka: 152 drzewo filogenetyczne to drzewo, którego liśćmi są istniejące gatunki, a węzły wewnętrzne mają stopień większy niż jeden i reprezentują
Bardziej szczegółowoDrzewa czerwono-czarne.
Binboy at Sphere http://binboy.sphere.p l Drzewa czerwono-czarne. Autor: Jacek Zacharek Wstęp. Pojęcie drzewa czerwono-czarnego (red-black tree) zapoczątkował Rudolf Bayer w książce z 1972 r. pt. Symmetric
Bardziej szczegółowoProjekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie
Bardziej szczegółowoPole wielokąta. Wejście. Wyjście. Przykład
Pole wielokąta Liczba punktów: 60 Limit czasu: 1-3s Limit pamięci: 26MB Oblicz pole wielokąta wypukłego. Wielokąt wypukły jest to wielokąt, który dla dowolnych jego dwóch punktów zawiera również odcinek
Bardziej szczegółowoDrzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.
Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( )) Wielkość drzewa
Bardziej szczegółowoZadanie 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ółowoLista 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ółowoProjekt 4: Programowanie w logice
Języki Programowania Projekt 4: Programowanie w logice Środowisko ECL i PS e W projekcie wykorzystane będzie środowisko ECL i PS e. Dostępne jest ono pod adresem http://eclipseclp.org/. Po zainstalowaniu
Bardziej szczegółowoLuty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl
System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy
Bardziej szczegółowoSortowanie - wybrane algorytmy
Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe
Bardziej szczegółowoGrafem 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ółowoOgólne wiadomości o grafach
Ogólne wiadomości o grafach Algorytmy i struktury danych Wykład 5. Rok akademicki: / Pojęcie grafu Graf zbiór wierzchołków połączonych za pomocą krawędzi. Podstawowe rodzaje grafów: grafy nieskierowane,
Bardziej szczegółowoAlgorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne
Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może
Bardziej szczegółowoTeoria gier. wstęp. 2011-12-07 Teoria gier Zdzisław Dzedzej 1
Teoria gier wstęp 2011-12-07 Teoria gier Zdzisław Dzedzej 1 Teoria gier zajmuje się logiczną analizą sytuacji, gdzie występują konflikty interesów, a także istnieje możliwość kooperacji. Zakładamy zwykle,
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2015 1 / 21 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań
Bardziej szczegółowoAlgorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Bardziej szczegółowoLuty 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ółowoINFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra
INFORMATYKA Podstawy programowania w języku C (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Temat: Struktury dynamiczne Wykład 7 Struktury dynamiczne lista jednokierunkowa,
Bardziej szczegółowoAlgorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych
Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych 1 Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych Alexander Denisjuk Prywatna Wyższa Szkoła Zawodowa w Giżycku
Bardziej szczegółowoRekurencja. 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ółowoDefinicja pliku kratowego
Pliki kratowe Definicja pliku kratowego Plik kratowy (ang grid file) jest strukturą wspierająca realizację zapytań wielowymiarowych Uporządkowanie rekordów, zawierających dane wielowymiarowe w pliku kratowym,
Bardziej szczegółowoGra rodzinna dla 2-4 osób w wieku od 7 do 99 lat
Drogi kliencie! Nasze gry kompletowane są ze szczególną starannością. Jeśli jednak zdarzą się jakieś braki (za co z góry serdecznie przepraszamy), prosimy wypełnić ten kupon i wysłać pod adres: GRANNA,
Bardziej szczegółowoPODSTAWY INFORMATYKI wykład 6.
PODSTAWY INFORMATYKI wykład 6. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE,
Bardziej szczegółowoAnaliza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Bardziej szczegółowoWstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel
Wstęp do programowania Drzewa Piotr Chrząstowski-Wachtel Drzewa Drzewa definiują matematycy, jako spójne nieskierowane grafy bez cykli. Równoważne określenia: Spójne grafy o n wierzchołkach i n-1 krawędziach
Bardziej szczegółowo2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew
0-0-6 PLAN WYKŁADU Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew BAZY DANYCH Wykład 9 dr inż. Agnieszka Bołtuć INDEKSY - DEFINICJE Indeksy to pomocnicze struktury
Bardziej szczegółowo7. Teoria drzew - spinanie i przeszukiwanie
7. Teoria drzew - spinanie i przeszukiwanie Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2016/2017 rzegorz Kosiorowski (Uniwersytet Ekonomiczny 7. wteoria Krakowie) drzew - spinanie i przeszukiwanie
Bardziej szczegółowoZakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska
1 Przykład wyliczania wyrażeń arytmetycznych Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Copyright
Bardziej szczegółowoWykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe
I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom
Bardziej szczegółowoStruktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott
Struktury danych i złożoność obliczeniowa Wykład. Prof. dr hab. inż. Jan Magott Algorytmy grafowe: podstawowe pojęcia, reprezentacja grafów, metody przeszukiwania, minimalne drzewa rozpinające, problemy
Bardziej szczegółowoKoszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych
Koszt zamortyzowany Jeśli mamy ciąg operacji, to koszt zamortyzowany jednej z nich jest sumarycznym kosztem wykonania wszystkich operacji podzielonym przez liczbę operacji. Inaczej mówiąc jest to, dla
Bardziej szczegółowoMatematyczne Podstawy Informatyki
Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 03/0 Przeszukiwanie w głąb i wszerz I Przeszukiwanie metodą
Bardziej szczegółowoKODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F
KODY SYMBOLI Kod Shannona-Fano KODOWANIE DANYCH, A.Przelaskowski Metoda S-F Kod Huffmana Adaptacyjne drzewo Huffmana Problemy implementacji Kod Golomba Podsumowanie Kod drzewa binarnego Na wejściu rozkład:
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Sieci powiązań Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk (Wydział Fizyki) PO w. IX Jesień 2014 1 / 24 Sieci powiązań Można (bardzo zgrubnie) wyróżnić dwa rodzaje powiązań
Bardziej szczegółowoSortowanie topologiczne skierowanych grafów acyklicznych
Sortowanie topologiczne skierowanych grafów acyklicznych Metody boolowskie w informatyce Robert Sulkowski http://robert.brainusers.net 23 stycznia 2010 1 Definicja 1 (Cykl skierowany). Niech C = (V, A)
Bardziej szczegółowoSortowanie. Bartman Jacek Algorytmy i struktury
Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39
Bardziej szczegółowoWSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste
Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej WSTĘP DO INFORMATYKI Adrian Horzyk Drzewa i struktury drzewiaste www.agh.edu.pl DEFINICJA DRZEWA Drzewo
Bardziej szczegółowoREKURENCJA 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ółowoUniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą
Bardziej szczegółowoliniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:
Sortowanie stogowe Drzewo binarne Binary Tree Dotychczas operowaliśmy na prostych strukturach danych, takich jak tablice. W tablicy elementy ułożone są zgodnie z ich numeracją, czyli indeksami. Jeśli za
Bardziej szczegółowo