• Nie Znaleziono Wyników

Wstęp do programowania Drzewa

N/A
N/A
Protected

Academic year: 2021

Share "Wstęp do programowania Drzewa"

Copied!
18
0
0

Pełen tekst

(1)

Wstęp do programowania

Drzewa

(2)

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

Grafy, w których miedzy każdymi dwoma węzłami istnieje dokładnie jedna ścieżka

Dla informatyków drzewa w zasadzie są takie same, ale zawsze dodatkowo wskazujemy węzeł początkowy, przez który „wchodzimy” na drzewo – korzeń drzewa. Ponadto wszystkie krawędzie w naturalny sposób są zorientowane od korzenia do

(3)

Definicja drzewa formalnie

Podobnie, jak z listami, zdefiniujemy zbiór D drzew o wartościach w zbiorze A rekurencyjnie, jako

najmniejszy zbiór spełniający dwa warunki:

nil D, czyli drzewo puste należy do D;

jeśli a A oraz ciąg D=D1,...Dm składa się z drzew ze zbioru D, to para T=(a,D) jest drzewem ze zbioru D.

Mówimy wtedy, że T jest ojcem dla każdego z drzew Dk, zaś te z kolei są jego synami.

(4)

Pojęcia związane z drzewami

x

d korzeń

liść węzeł wewnętrzny

ojciec węzła x

krawędź

1

2

3 0

poziomy syn x-a

(5)

Definicje

Głębokość węzła – poziom, na którym się znajduje Wysokość drzewa – max z głębokości węzłów

Stopień węzła – liczba synów

Stopień drzewa – max z liczby synów Drzewo binarne – drzewo stopnia <=2 Liść – węzeł stopnia 0

Węzeł wewnętrzny – węzeł stopnia >0

Przodek x – każdy węzeł na ścieżce od korzenia do x Potomek x – każdy węzeł którego przodkiem jest x

(6)

Drzewa nieuporządkowane

Jeśli w definicji drzewa przyjmiemy, że kolejność synów nie ma znaczenia, czyli zamiast ciągu synów weźmiemy ich zbiór, to dostaniemy drzewo

nieuporządkowane. Zdarzają sie też drzewa hybrydowe, w których niektóre węzły mają

uporządkowanych synów, a inne nie. Nie będziemy się nimi zajmowali.

(7)

Drzewa binarne

type drzewo = ^węzeł;

węzeł = record

w : typ;

lsyn,psyn : drzewo end;

var

d:drzewo; 5

d

(8)

Wyszukiwanie wartości w drzewie

function jest(x:typ; d:drzewo):Boolean;

begin

if d=nil then jest := false

else if d^.w=x then jest := true

else jest := jest(x,d^.lsyn) or jest(x,d^.psyn)

end;

{leniwie}

(9)

Wyszukiwanie wartości w drzewie

function jest(x:typ; d:drzewo):Boolean;

begin

if d=nil then jest := false

else if d^.w=x then jest := true

else if jest(x,d^.lsyn) then jest:=true

else jest:= jest(x,d^.psyn) end;

{nie leniwie}

(10)

Liczymy liczbę liści w drzewie

function LiczbaLisci(d: drzewo): integer;

var lewo, prawo: integer;

begin

if d = nil then LiczbaLisci:=0

else if d^.lsyn=nil and d^.psyn=nil then LiczbaLisci:=1 else begin

lewo := LiczbaLisci(d^.lsyn);

prawo := LiczbaLisci(d^.psyn);

LiczbaLisci := lewo + prawo;

end

(11)

Obieg prefiksowy

Często chcemy odwiedzić każdy węzeł drzewa.

Sposób, w jaki to zrobimy może nam pomóc w rozwiązaniu konkretnego problemu.

Poza omawianymi algorytmami przechodzenia grafów w przypadku drzew mamy możliwość zastosowania specyficznych procedur

Od tej pory zajmujemy się drzewami binarnymi.

(12)

Obieg prefiksowy

procedure wypiszPreLP(d:drzewo);

begin

if d<>nil then begin

Write(d^.w);

wypiszpreLP(d^.lsyn);

wypiszpreLP(d^.psyn) end

end;

(13)

Obieg prefiksowy - PL

procedure wypiszPrePL(d:drzewo);

begin

if d<>nil then begin

Write(d^.w);

wypiszprePL(d^.psyn);

wypiszprePL(d^.lsyn) end

end;

(14)

Obieg infiksowy

procedure wypiszInLP(d:drzewo);

begin

if d<>nil then begin

wypiszInLP(d^.lsyn);

Write(d^.w);

wypiszInLP(d^.psyn) end

end;

(15)

Obieg infiksowy - PL

procedure wypiszInPL(d:drzewo);

begin

if d<>nil then begin

wypiszInPL(d^.psyn);

Write(d^.w);

wypiszInPL(d^.lsyn) end

end;

(16)

Obieg postfiksowy

procedure wypiszPostLP(d:drzewo);

begin

if d<>nil then begin

wypiszpostLP(d^.lsyn);

wypiszpostLP(d^.psyn) Write(d^.w);

end end;

(17)

Obieg postfiksowy - PL

procedure wypiszPostPL(d:drzewo);

begin

if d<>nil then begin

wypiszpostPL(d^.psyn);

wypiszpostPL(d^.lsyn) Write(d^.w);

end end;

(18)

Twierdzenia o obiegach

Jeśli porządki w prezentowanych obiegach, to odpowiednio PreLP, PrePL, InLP, InPL, PostLP, PostPL, to

PreLP=PostPL-1

PostLP=PrePL-1

InLP=InPL-1

Cytaty

Powiązane dokumenty

Teraz jednak, kiedy wizja powstania tam Centrum Spotkania Kultur staje się coraz wyraźniejsza, dy- sputa staje się coraz gorętsza.. Jako pierwsi prezentujemy ogól- ny zarys

FN (false negative) - liczba nieprawidłowych klasyfikacji stanu patologicznego jako normalnego. TP (true positive) - liczba prawidłowych klasyfikacji

FN (false negative) - liczba nieprawidłowych klasyfikacji stanu patologicznego jako normalnego. TP (true positive) - liczba prawidłowych klasyfikacji stanu

• Podział drzewa kończy się gdy liczba obiektów do podziału jest już mniejsza niż pewna wartości progowa.. • Przycinanie drzew jest możliwe już po

Klasyfikacja odbywa się poprzez przeglądanie drzewa od korzenia do liści przez krawędzie opisane wartościami atrybutów... Przykład: automatyczny podział kierowców na

Do moich synów Synkowie moi, poszedłem w bój, jako wasz dziadek, a ojciec mój, jak ojca ojciec i ojca dziad, co z Legionami przemierzył świat, szukając drogi przez krew i blizny

2) Z papieru do pieczenia zgniećcie kulę. Taki papier na namięka ale można go &#34;ubrudzić&#34; wodną farbą.. 3) Rozwodnioną farbę można rozlać

• wykonać klasyfikację dla wybranych danych wielowymiarowych ze strony uci za pomocą metody drzewa klasyfikacyjnego, porównać jakość klasyfikacji na danych testowych z