Matematyka dyskretna 2002 08 Struktury danych

background image

Matematyka Dyskretna

Andrzej Szepietowski

25 czerwca 2002 roku

background image
background image

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 jednowy-
miarowe. W wektorach mamy dost¸ep do dowolnego elementu, poprzez podanie indeksu
tego elementu.

Przykład 1.1 W j¸ezyku Pascal przykładem typu tablicy jednowymiarowej jest

array[1..N] of integer.

Je˙zeli mamy zmienn¸a tego typu

a:array[1..N] of integer,

to tablica

a

zawiera

N

elementów

a[1], a[2], ... ,a[N].

W programie mo˙zemy odwoływa´c si¸e do całej tablicy, na przykład w instrukcji przypisania

a:=b,

lub do pojedynczych elementów:

a[i]:=a[i+1].

Mo˙zemy tak˙ze u˙zywa´c tablic dwu lub wi¸ecej wymiarowych. Przykładem tablicy dwuwy-
miarowej jest typ

array[1..N,1..M] of real.

Zmienna

c:array[1..N,1..M] of real

zawiera

elementów. Dla ka˙zdej pary liczb

spełniaj¸acej warunki

,

, element

c[i,j]

zawiera liczb¸e typu

real.

Czasami wygodniej posługiwa´c si¸e listami bez u˙zywania indeksów. Przykładami list,

których mo˙zna u˙zywa´c bez konieczno´sci odwoływania si¸e do indeksów poszczególnych
elementów, s¸a kolejki i stosy.

3

background image

4

Rozdział 1. Struktury danych

Definicja 1.2 Kolejka jest list¸a z trzema operacjami:

dodawania nowego elementu na koniec kolejki,

zdejmowania pierwszego elementu z pocz¸atku kolejki,

sprawdzania, czy kolejka jest pusta.

Taki sposób dodawania i odejmowania elementów jest okre´slany angielskim skrótem

FIFO (first in first out, czyli pierwszy wszedł — pierwszy wyjdzie). Przykłady kolejek
spotykamy w sklepach, gdzie klienci czekaj¸acy na obsłu˙zenie tworz¸a kolejki.

Definicja 1.3 Stos jest list¸a 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 ´nca, podobnie jak w

stosie talerzy spi¸etrzonym na stole. Talerze dokładane s¸a na wierzch stosu i zdejmowa-
ne z wierzchu stosu. Taka organizacja obsługi listy okre´slana jest angielskim skrótem
LIFO (last in first out, czyli ostatni wszedł – pierwszy wyjdzie). Niektórzy w ten spo-
sób organizuj¸a prac¸e na biurku. Przychodz¸ace listy układaj¸a na stosie i jak maj¸a czas, to
zdejmuj¸a jeden list i odpowiadaj¸a na niego.

Przyjrzyjmy si¸e zastosowaniu kolejki lub stosu do szukania. Przypu´s´cmy, ˙ze szukamy

przez telefon pewnej informacji (na przykład chcieliby´smy si¸e dowiedzie´c, kto z naszych
znajomych ma pewn¸a ksi¸a˙zk¸e).

Algorytm szukania ksi¸a˙zki w´sród znajomych

tworzymy STOS, który na pocz¸atku jest pusty,

wkładamy na STOS numer telefonu swojego znajomego,

powtarzamy dopóki na stosie s¸a jakie´s numery:

zdejmujemy z wierzchu STOSU jeden numer telefonu,

dzwonimy pod ten numer,

je˙zeli osoba, do której si¸e dodzwonili´smy, posiada szukan¸a ksi¸a˙zk¸e, to ko-

niec poszukiwa ´n,

je˙zeli nie posiada ksi¸a˙zki, to pytamy j¸a o numery telefonów jej znajomych,

którzy mog¸a mie´c ksi¸a˙zk¸e (lub zna´c kogo´s kto j¸a ma); ka˙zdy nowy numer zostaje
dopisany do STOSU.

W powy˙zszym algorytmie zamiast stosu mo˙ze by´c u˙zyta kolejka.

background image

1.2. Drzewa binarne

5

1.2

Drzewa binarne

Drzewo jest hierarchiczn¸a struktur¸a danych. Jeden element drzewa, zwany korzeniem, jest
wyró˙zniony. Inne elementy drzewa s¸a jego potomstwem lub potomstwem jego potomstwa
itd. Terminologia u˙zywana do opisu drzew jest mieszanin¸a terminów z teorii grafów, bo-
taniki i stosunków rodzinnych. Elementy drzewa nazywa si¸e wierzchołkami lub w¸ezłami.
Li´scie to wierzchołki nie maj¸ace potomstwa. Drzewa cz¸esto przedstawia si¸e w formie
grafu, gdzie ka˙zdy wierzchołek jest poł¸aczony kraw¸edzi¸a ze swoim ojcem i ze swoimi
dzie´cmi (swoim potomstwem). Dla ka˙zdego elementu w drzewie istnieje dokładnie jedna
´scie˙zka prowadz¸aca od korzenia do tego wierzchołka.

Drzewa binarne to takie drzewa, w których ka˙zdy wierzchołek ma co najwy˙zej dwóch

synów. Do oznaczania wierzchołków w drzewie binarnym wygodnie jest u˙zywa ´c ci¸agów
zer i jedynek. Niech

oznacza zbiór wszystkich sko ´nczonych ci¸agów zer i jedy-

nek. Zbiór ten zawiera ci¸ag pusty (długo´sci 0), oznaczany przez

. Wierzchołki drzewa

oznaczamy w nast¸epuj¸acy sposób:

korze´n drzewa oznaczamy przez

— pusty ci¸ag,

je˙zeli jaki´s wierzchołek jest oznaczony przez

, to jego synowie oznaczeni s¸a przez

i

.

Rysunek 1.1: Przykład drzewa binarnego

Przy takim oznaczeniu wierzchołków drzewa binarnego nazwa wierzchołka

mówi

nam, jaka ´scie˙zka prowadzi od korzenia do

. Na przykład, aby doj´s´c od korzenia do

wierzchołka

nalezy: pój´s´c w prawo do

, potem znowu w prawo do

, a na ko ´ncu w

lewo do

.

background image

6

Rozdział 1. Struktury danych

Je˙zeli mamy drzewo binarne

, to z ka˙zdym wierzchołkiem

mo˙zemy skojarzy ´c

poddrzewo

zło˙zone z wierzchołka

i wszystkich jego potomków. Na przykład w

drzewie przedstawionym na rysunku 1.1 wierzchołek

wyznacza poddrzewo

przedstawione na rysunku 1.2.

Rysunek 1.2: Poddrzewo

Mówimy te˙z, ˙ze drzewo

składa si¸e z korzenia (wierzchołka

), z lewego poddrzewa

i z prawego poddrzewa

.

Wysoko´sci¸a drzewa nazywamy długo´s´c (liczb˛e kraw˛edzi) najdłu˙zszej ´scie˙zki w drze-

wie prowadz¸acej od korzenia do li´scia. Na przykład drzewo z rysunku 1.1 jest wysoko´sci
3.

1.3

Drzewa wyra˙ze ´n arytmetycznych

Przykładem zastosowania drzew binarnych s¸a drzewa wyra˙ze ´n arytmetycznych. Najpierw
przykład. Na rysunku 1.3 przedstawiono drzewo wyra˙zenia

. W drzewie tym ka˙z-

dy wierzchołek ma etykiet¸e. Li´scie etykietowane s¸a stałymi albo zmiennymi. Wierzchołki
nie b¸ed¸ace li´s´cmi etykietowane s¸a operacjami arytmetyczymi. Ka˙zdemu wierzchołkowi
w drzewie mo˙zemy przypisa´c wyra˙zenie arytmetyczne według nast¸epuj¸acej zasady:

dla li´sci wyra˙zeniami s¸a etykiety tych li´sci (stałe lub zmienne),

je˙zeli wierzchołek

ma etykiet¸e

, a jego synom przypisano wyra˙zenia

i

, to wierzchołkowi

przypisujemy wyra˙zenie

!

.

Przykład 1.4 W drzewie z rysunku1.3 wierzchołkowi z etykiet ˛

a

odpowiada wyra˙zenie

, wierzchołkowi z etykiet ˛

a

wyra˙zenie

"

, a korzeniowi wyra˙zenie

#

$%"

!'&

Wyra˙zenie to zawiera wi¸ecej nawiasów, ni˙z to si¸e zwykle stosuje. Normalnie to samo wy-
ra˙zenie przedstawiamy bez nawiasów w postaci

()

.

background image

1.3. Drzewa wyra˙ze ´n arytmetycznych

7

Rysunek 1.3: Drzewo wyra˙zenia

)

Opuszczenie nawiasów mo˙ze prowadzi´c do niejednoznaczno´sci lub mo˙ze zmieni´c

sens wyra˙zenia. Na przykład wyra˙zenie

%

po opuszczeniu nawiasów stanie si¸e identyczne z wyra˙zeniem

"$"

i zmieni sens.

Drzewo, które odpowiada wyra˙zeniu

%

, przedstawiono na rysunku 1.4.

Rysunek 1.4: Drzewo wyra˙zenia

()

Drzewo wyra˙zenia arytmetycznego oddaje logiczn¸a struktur¸e i sposób obliczania tego

wyra˙zenia.

background image

8

Rozdział 1. Struktury danych

Istnieje sposób przedstawiania wyra˙ze ´n arytmetycznych nie wymagaj¸acy nawiasów.

Jest to tak zwana notacja polska lub Łukasiewicza. Jest ona te˙z nazywana notacj¸a postfixow¸a,
poniewa˙z znak operacji stoi na ko ´ncu wyra˙zenia, za argumentami, czyli wyra˙zenie w no-
tacji postfixowej ma posta´c:

pierwszy argument — drugi argument — operacja.

Notacja, do jakiej jeste´smy przyzwyczajeni, nazywa si¸e infixowa, poniewa˙z operacja znaj-
duje si¸e pomi¸edzy argumentami, czyli wyra˙zenie w notacji infixowej ma posta ´c:

pierwszy argument — operacja — drugi argument.

Przykład 1.5 Wyra˙zenie w postaci postfixowej

!

ma w postaci infixowej posta´c

a wyra˙zenie

!

jest postfixow¸a postaci¸a wyra˙zenia

()

&

W wyra˙zeniach w postaci postfixowej nie potrzeba nawiasów. Warto´s´c wyra˙zenia mo˙zna
w sposób jednoznaczny odtworzy´c z samego wyra˙zenia za pomoc¸a nast˛epuj ˛

acego algo-

rytmu.:

Algorytm obliczania warto´sci wyra˙zenia w postaci postfixowej.

Dla kolejnych elementów zapisu wyra˙zenia:

je˙zeli element jest stał¸a lub zmienn¸a, to wkładamy jego warto´s´c na stos,

je˙zeli element jest znakiem operacji, to:

zdejmujemy dwie warto´sci z wierzchu stosu,

wykonujemy operacj¸e na tych warto´sciach,

obliczon¸a warto´s´c wkładamy na wierzch stosu,

po przej´sciu całego wyra˙zenia jego warto´s´c znajduje si¸e na stosie.

Przykład 1.6 Zademonstrujmy ten algorytm na przykładzie wyra˙zenia:

"

Załó˙zmy, ˙ze zmienne maj¸a nast¸epuj¸ace warto´sci:

,

,

,

,

.

Poni˙zsza tabela przedstawia zawarto´s´c stosu po przeczytaniu kolejnych elementów wyra-
˙zenia.

background image

1.4. Przeszukiwanie drzew binarnych

9

czytany element

stos

a

3,

b

3, 2,

c

3, 2, 1,

3, 3,

9,

d

9, 4,

e

9, 4, 2,

9, 2,

11.

1.4

Przeszukiwanie drzew binarnych

Zajmiemy si¸e teraz dwoma algorytmami przeszukiwania drzew (binarnych): przeszuki-
wanie w gł¸ab i wszerz. Ró˙zni¸a si¸e one rodzajem u˙zytych struktur danych. W algorytmie
przeszukiwania w gł¸ab u˙zyjemy stosu, a w algorytmie przeszukiwania wszerz u˙zyjemy
kolejki.

1.4.1

Przeszukiwanie drzewa w gł ˛

ab

Algorytm przeszukiwania drzewa w gł¸ab.

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n

i wkładamy go na STOS; zaznaczamy

jako wierzchołek

odwiedzony,

dopóki STOS nie jest pusty, powtarzamy:

je˙zeli

jest wierzchołkiem na wierzchu STOSU, to sprawdzamy, czy istnieje

syn

wierzchołka , który nie był jeszcze odwiedzony, najpierw sprawdzamy

,

a potem

.

je˙zeli takie

si¸e znajdzie, to odwiedzamy

, wkładamy go na wierzch STO-

SU i zaznaczamy jako wierzchołek odwiedzony,

je˙zeli takiego

nie ma, to zdejmujemy

ze STOSU i cofamy si¸e do wierz-

chołka b¸ed¸acego na stosie pod spodem.

Przykład 1.7 Poni˙zsza tabela pokazuje jaki wierzchołek jest odwiedzany i jaka jest za-
warto´s´c stosu po ka˙zdej kolejnej iteracji p¸etli algorytmu, gdy przeszukiwane jest drzewo
z rysunku 1.1.

background image

10

Rozdział 1. Struktury danych

Wierzchołek

STOS

0

,0

00

,0,00

0

,0

01

,0,01

0

,0

1

,1

10

,1,10

1

,1

11

,1,11

110

,1,11,110

11

,1,11

111

,1,11,111

11

,1,11

1

,1

W metodzie przeszukiwania w gł¸ab po ka˙zdym kroku algorytmu wierzchołki znajduj¸ace
si¸e na stosie tworz¸a ´scie˙zk¸e od wierzchołka wej´sciowego do wierzchołka aktualnie od-
wiedzanego. Zauwa˙zmy, ˙ze nazwa ka˙zdego wierzchołka na stosie jest prefiksem (przed-
rostkiem) nazwy nast¸epnego wierzchołka. Dlatego wystarczy przechowywa ´c ostatnie bity
wierzchołków na stosie. Nie jest te˙z konieczne zaznaczanie, które wierzchołki były ju˙z
odwiedzone, wystarczy zauwa˙zy´c, ˙ze:

je˙zeli przyszli´smy do wierzchołka

od jego ojca, to ˙zaden z synów

nie był jeszcze

odwiedzany,

je˙zeli przyszli´smy do wierzchołka

od lewego syna

(po zdj¸eciu

ze stosu), to

odwiedzony był tylko lewy syn,

je˙zeli przyszli´smy do wierzchołka

od prawego syna

(po zdj¸eciu

ze stosu), to

odwiedzeni ju˙z byli obaj synowie.

Oto prostsza wersja algorytmu przeszukiwania w gł¸ab:

Algorytm przeszukiwania drzewa w gł¸ab (druga wersja).

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n

i wkładamy go na STOS,

dopóki STOS nie jest pusty, powtarzamy:

Je˙zeli

jest aktualnie odwiedzanym wierzchołkiem i

Je˙zeli ostatni¸a operacj¸a na stosi było wło˙zenie nowego elementu, to:

Je˙zeli

, to przejd´z do

i włó˙z 0 na stos,

Je˙zeli

ale

, to przejd´z do

i włó˙z 1 na stos,

background image

1.4. Przeszukiwanie drzew binarnych

11

Je˙zeli

oraz

, to zdejmij ostatni element ze stosu i przejd´z do

ojca wierzchołka .

Je˙zeli ostatni¸a operacj¸a na stosie było zdj¸ecie 0 to:

Je˙zeli

, to przejd´z do

i włó˙z 1 na stos,

Je˙zeli

, to zdejmij ostatni element ze stosu i przejd´z do ojca wierz-

chołka .

Je˙zeli ostatni¸a operacj¸a na stosie było zdj¸ecie 1 to: zdejmij ostatni element ze stosu
i przejd´z do ojca wierzchołka .

Przykład 1.8 Poni˙zsza tabela pokazuje jaki wierzchołek jest odwiedzany i jaka jest za-
warto´s´c stosu po ka˙zdej kolejnej iteracji p¸etli drugiego algorytmu, gdy przeszukiwane jest
drzewo z rysunku 1.1.

Wierzchołek

STOS

0

,0

00

,0,0

0

,0

01

,0,1

0

,0

1

,1

10

,1,0

1

,1

11

,1,1

110

,1,1,0

11

,1,1

111

,1,1,1

11

,1,1

1

,1

Zauwa˙zmy, ˙ze etykiety na stosie zł¸aczone razem tworz¸a nazw¸e aktualnie odwiedzanego
wierzchołka.

1.4.2

Przeszukiwanie drzewa wszerz

Nast¸epny algorytm przeszukiwania drzew u˙zywa kolejki jako pomocniczej struktury da-
nych.

Algorytm przeszukiwania wszerz.

Dane wej´sciowe: drzewo

.

odwiedzamy korze ´n drzewa

i wkładamy go do KOLEJKI.

background image

12

Rozdział 1. Struktury danych

dopóki KOLEJKA nie jest pusta, powtarzamy:

bierzemy jeden wierzchołek

z pocz¸atku KOLEJKI,

odwiedzamy wszystkiech synów wierzchołka

i wkładamy je na koniec

kolejki.

Poni˙zej przedstawiono odwiedzane wierzchołki oraz zawarto´s´c kolejki po ka˙zdej kolejnej
iteracji p¸etli 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,11

-

11

110,111

110,111

-

111

-

-

W metodzie przeszukiwania wszerz wierzchołki s¸a przeszukiwane w kolejno´sci od wierz-
chołków b¸ed¸acych najbli˙zej wierzchołka pocz¸atkowego do wierzchołków b¸ed¸acych dalej.

1.4.3

Rekurencyjne algorytmy przeszukiwania drzew

Istnieje prosty i ciekawy sposób uzyskiwania postaci postfixowej wyra˙zenia arytmetycz-
nego z drzewa tego wyra˙zenia. Aby uzyska´c posta´c postfixow¸a wyra˙zenia, nale˙zy prze-
szuka´c drzewo tego wyra˙zenia w pewien okre´slony sposób, zwany przeszukiwaniem po-
storder.

Przeszukiwanie postorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierz-
chołku

:

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

przeszukujemy jego prawe poddrzewo (z korzeniem w

),

odwiedzamy wierzchołek

(korze ´n drzewa).

Algorytm ten mo˙zemy krótko przedstawi´c w schemacie:

lewe poddrzewo — prawe poddrzewo — korze ´n.

Przykład 1.9 Je˙zeli przeszukamy drzewo z rysunku 1.4 i wypiszemy po kolei etykiety od-
wiedzanych wierzchołków, to otrzymamy ci¸ag:

który jest postaci¸a postfixow¸a wyra˙zenia

()

.

background image

1.5. Drzewa poszukiwa ´n binarnych

13

Istniej¸a jeszcze dwie inne pokrewne metody przeszukiwania drzew binarnych: inorder

i preorder:

Przeszukiwanie inorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierzchoł-
ku

:

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

odwiedzamy wierzchołek

(korze ´n drzewa),

przeszukujemy jego prawe poddrzewo (z korzeniem w

).

Przeszukiwanie preorder. Aby przeszuka´c (pod)drzewo maj¸ace swój korze ´n w wierz-
chołku

:

odwiedzamy wierzchołek

(korze ´n drzewa),

przeszukujemy jego lewe poddrzewo (z korzeniem w

),

przeszukujemy jego prawe poddrzewo (z korzeniem w

).

Przykład 1.10 Je˙zeli przeszukamy drzewo z rysunku 1.4 metod¸a inorder, to etykiety utworz¸a
ci¸ag:

czyli wyra˙zenie w postaci infixowej, ale bez nawiasów. Przeszukanie tego samego drzewa
metod¸a preorder da ci¸ag etykiet:

)

Jest to tak zwana posta´c prefixowa wyra˙zenia. Znak operacji wyst¸epuje w niej przed ar-
gumentami. Podobne jak w postaci postfixowej, posta´c prefixowa da si¸e jednoznacznie
rozkłada´c i nie wymaga nawiasów.

1.5

Drzewa poszukiwa ´n binarnych

Drzewa s¸a podstawow¸a struktur¸a przy budowie du˙zych baz danych. Jed¸a z najprostszych
takich struktur s¸a drzewa poszukiwa ´n binarnych. Aby utworzy´c drzewo poszukiwa ´n bi-
narnych, zaczynamy od pustego drzewa, a nast¸epnie wstawiamy po kolei elementy, któ-
re maj¸a by´c przechowywane w drzewie. Wstawiane elementy powinny by ´c z jakiego´s
uporz¸adkowanego zbioru. Poni˙zej przedstawiamy algorytmu wstawiania elementów do
drzewa.

oznacza warto´s´c przechowywan¸a w wierzchołku

. Pami¸etajmy, ˙ze

oznacza poddrzewo o korzeniu w wierzchołku

.

Algorytm wstawiania elementu do drzewa poszukiwa ´n binarnych.

Aby wstawi´c element

do drzewa

:

je˙zeli drzewo

jest puste, to

(wstaw

do korzenia

),

background image

14

Rozdział 1. Struktury danych

w przeciwnym razie porównaj

z zawarto´sci¸a korzenia

:

je˙zeli

, to wstaw

do poddrzewa

,

je˙zeli

, to wstaw

do poddrzewa

.

Przykład 1.11 Przypu´s´cmy, ˙ze mamy ci¸ag liczb naturalnych:

#

!

&

Utworzymy dla tego ci¸agu drzewo poszukiwa´n binarnych.

Rysunek 1.5: Drzewo poszukiwa ´n po wstawieniu elementów: 128, 76, 106, 402

Po wstawieniu pierwszych czterech elementów ci¸agu otrzymamy drzewo, które jest

przedstawione na rysunku 1.5, a po wstawieniu całego ci¸agu otrzymamy drzewo, które
jest przedstawione na rysunku 1.6. Je˙zeli teraz przeszukamy to drzewo metod¸a inorder, to
otrzymamy ten sam ci¸ag, ale uporz¸adkowany:

!

!

&

Je˙zeli mamy ju˙z drzewo poszukiwa ´n binarnych

, to dla ka˙zdego wierzchołka

zachodzi

dla ka˙zdego

,

,

dla ka˙zdego

,

.

Czyli wszystkie wierzchołki w lewym poddrzewie

zawieraj ˛

a warto´sci mniejsze

od warto´sci w

, a wszystkie wierzchołki w prawym poddrzewie

zawieraj ˛

a warto´sci

mniejsze od warto´sci w

.

Aby stwierdzi´c, czy jaki´s element

znajduje si¸e na tym drzewie. Post¸epujemy podob-

nie jak przy wstawianiu elementów. Zaczynamy od korzenia drzewa

i szukamy

elementu

za pomoc¸a poni˙zszego algorytmu.

background image

1.6. Zadania

15

Rysunek 1.6: Drzewo dla ci¸agu: 128,76,106,402,100,46,354,1018,112,28, 396,35

Algorytm szukania elementu

na drzewie

.

Aby stwierdzi´c, czy element

znajduje si¸e na drzewie

:

je˙zeli

jest puste, to koniec, elementu

nie ma na drzewie,

je˙zeli

nie jest puste, to porównujemy

z warto´sci¸a

:

je˙zeli

(

, to koniec, znale´zli´smy element

na drzewie,

je˙zeli

, to szukamy

w lewym poddrzewie

,

je˙zeli

, to szukamy

w prawym poddrzewie

.

W drzewie poszukiwa ´n binarnych czas wyszukiwania lub wstawiania elementu jest

, gdzie

jest wysoko´sci¸a drzewa. W obu algorytmach tylko raz przechodzimy od

korzenia w dół do li´scia. Najlepiej by było, gdyby wysoko´s´c drzewa była rz¸edu logarytm
od liczby wierzchołków, ale nie w ka˙zdym drzewie poszukiwa ´n binarnych tak musi by´c.

1.6

Zadania

1. Ile wierzchołków mo˙ze mie´c drzewo binarne wysoko´sci

?

2. Przeszukaj metod¸a „w gł¸ab” („wszerz”) drzewo z rysunku 1.7.

3. Narysuj drzewo dla wyra˙zenie

. Przedstaw to wyra˙zenie w postaci

postfixowej i prefixowej.

background image

16

Rozdział 1. Struktury danych

4. Narysuj drzewo dla wyra˙zenie

. Przedstaw to wyra˙zenie w postaci

infixowej i prefixowej. Oblicz warto´s´c tego wyra˙zenia. Przedstaw to wyra˙zenie w
postaci infixowej i prefixowej.

5. Wypisz w postaci infixowej, prefixowej i postfixowej wyra˙zenie przedstawione na

rysunku 7.

Rysunek 1.7: Drzewo wyra˙zenia

6. Narysuj drzewo poszukiwa ´n binarnych dla nast¸epuj¸acego ci¸agu liczb: 30, 43, 13, 8,

50, 40, 20, 19, 22.

7. Narysuj drzewo poszukiwa ´n binarnych dla nast¸epuj¸acego ci¸agu słów: słowik, wró-

bel, kos, jaskółka, kogut, dzi¸ecioł, gil, kukułka, szczygieł, sowa, kruk, czubatka.

[Fragment wiersza Ptasie radio Juliana Tuwima]

8. Udowodnij, ˙ze ka˙zde drzewo o

werzchołkach ma

kraw¸edzi.

9. Udowodnij, ˙ze ka˙zde pełne drzewo binarne o

li´sciach ma

wierzchołków

wewn¸etrznych.

Wskazówka. Drzewo binarne nazywa si¸e pełne, je˙zeli ka˙zdy jego wierzchołek ma
albo dwóch synów, albo nie ma synów wcale (jest li´sciem).


Wyszukiwarka

Podobne podstrony:
Matematyka dyskretna 2002 07 Rekurencja
Matematyka dyskretna 2002 04 Rachunek prawdopodobieństwa
Matematyka dyskretna 2002 01 Oznaczenia
Matematyka dyskretna 2002 11 Poprawność programów
Matematyka dyskretna 2002 10 Grafy skierowane
Matematyka dyskretna 2002 04 Rachunek prawdopodobieństwa
Matematyka dyskretna 2002 07 Rekurencja
Matematyka dyskretna 2002 01 Oznaczenia
Matematyka dyskretna 2002 03 Kombinatoryka
Matematyka dyskretna 2002 05 Funkcje boolowskie
Matematyka dyskretna 2002 11 Poprawność programów
Matematyka dyskretna 2002 02 Arytmetyka
Matematyka dyskretna 2002 06 Teoria liczb
Algorytmy i struktury danych 08 Algorytmy geometryczne
2002, ASD k1 11.12.2002, Kolokwium ALGORYTMY I STRUKTURY DANYCH
Algorytmy i struktury danych 08 Algorytmy geometryczne

więcej podobnych podstron