• Nie Znaleziono Wyników

Algorytmy i Struktury Danych, 5. ¢wiczenia

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i Struktury Danych, 5. ¢wiczenia"

Copied!
2
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 5. ¢wiczenia

2009-11-10

1 Plan zaj¦¢

• izomorzm drzew,

• d-kopce,

2 Izomorzm drzew

Algorytm:

TreeIsomorphism(T1,T2,depth)

1: if T 1.height > depth then

2: return (T 1.height = T 2.height);

3: end if

4: if not TreeIsomorphism(T1,T2,depth+1) then

5: return false;

6: end if

7: for v ∈ T 1.nodes[depth + 1] ∪ T 2.nodes[depth + 1] do

8: {w porz¡dku rosn¡cych etykiet}

9: dodaj value(v) do listy wierzchoªka parent(v)

10: end for

11: posortuj leksykogracznie listy value(v) dla v ∈ T 1.nodes[depth]

12: posortuj leksykogracznie listy value(v) dla v ∈ T 2.nodes[depth]

13: porównaj czy listy s¡ identyczne, je±li nie to return false

14: zamie« etykiety value(v) na liczby z zakresu 1, . . . , n

15: return true

3 Izomorzm drzew  algorytm dla drzew nie- skierowanych

Znajd¹ w drzewach centroidy (ka»de drzewo zawiera co najwy»ej 2 centroidy), dla ka»dej kombinacji ukorze« drzewa w centroidach i uruchom poprzedni algo- rytm.

Niech w(x) = max{|subtree(ti)| : ti ∈ adj(x)}. Centroid  wierzchoªek o minimalnej wadze w(x).

Find(v)

1: niech c1, . . . , ck synowie wierzchoªka v,

1

(2)

2: je±li subtree(ci) ≤ n/2dla 1 ≤ i ≤ k, to return v,

3: wpp. niech cj wierzchoªek, taki, »e subtree(cj) > n/2(jest tylko jeden o tej wªasno±ci),

4: return Find(cj) FindCentroid(v)

1: ukorze« drzew w dowolnym wierzchoªku r,

2: oblicz warto±ci subtree(v) dla wszystkich wierzchoªków,

3: return Find(r)

4 d-kopce

dkopiec do drzewo zupeªne o stopniu d z porz¡dkiem kopcowym (min w korze- niu). Nale»y pokaza¢, »e poszczególne operacje wykonuje si¦ w czasie:

• Min  O(1)

• DeleteMin  O(d · logd(n))

• DecreaseKey  O(logd(n))

Koszt implementacji algorytmu Dijkstry, przy u»yciu dkopców: O(nd · logd(n) + m · logd(n)).

Zanalizowa¢ jak nale»y dobra¢ d w zale»no±ci od m i n (je±li za d we¹miemy max(2, dm/ne)to dostajemy O(log m/nm log n)).

5 Rozgªaszanie komunikatów

Dane drzewo T , nale»y obliczy¢ czas potrzebny na przesªanie komunikatów do wszystkich w¦zªów drzewa. Przesªanie komunikatu po jednej kraw¦dzi zajmuje 1 jednostk¦ czasu.

Algorytm O(n log n):

• je±li wierzchoªek jest li±ciem to czas = 0,

• wpp. rekurencyjnie oblicz czas potrzebny na rozgªoszenie w poddrzewach,

• posortuj malej¡co otrzymane czasy: t1, . . . , tk

• czas = max{i + ti: 1 ≤ i ≤ k}

Aby otrzyma¢ algorytm O(n) trzeba sprytnie oblicza¢ warto±ci atrybutu czas.

• Q = {li±cie T },

• while root 6∈ Q do

 x = Q.extractMin()

 dodaj x.czas do kolejki parent(x),

 je±li parent(x) ma ju» peªn¡ list¦ poddrzew, to policz parent(x).czas i dodaj parent(x) do kolejki.

Kolejk¦ Q mo»na zaimplementowa¢ w tablicy (ity element tablicy zawiera list¦

wierzchoªków o warto±ci x.czas = i). Sumarycznie operacje extractMin zajm¡

czas O(n). Dodawanie do kolejki zajmuje czas O(1).

2

Cytaty

Powiązane dokumenty

Dodatkowo ka»dy w¦zeª ma dodatkowy atrybut suma oznaczaj¡cy sum¦ warto±ci z

[r]

Jeden z tych grafów zawiera mniej zªych kraw¦dzi (takich które powstaªy z M), dokªadniej zawiera co najwy»ej nβ/4 < nk/4 zªych kraw¦dzi.. Po t krokach znajdziemy skojarzenie w

Powiemy, że algorytm Alg działający w strukturze danych S jest całkowicie poprawny ze względu na specyfikację <wp,wk> wttw dla wszystkich danych w strukturze S

Problem Dany jest ciąg rosnący e[1],..,e[n] oraz element x pewnej przestrzeni liniowo uporządkowanej <E, >. Następnie porównujemy x z kolejnymi elementami ciągu

(3) Jeżeli tak otrzymane drzewo nie jest częściowo uporządkowane, to przechodząc wzdłuż drogi od liścia x do korzenia, poprawić etykiety zamieniając etykietę ojca z

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Każde drzewo decyzyjne dla algorytmu sortującego ciąg n- elementowy przez porównywanie elementów, ma co najmniej wysokość log