• Nie Znaleziono Wyników

Algorytmy i Struktury Danych, 8. ¢wiczenia

N/A
N/A
Protected

Academic year: 2021

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

Copied!
3
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 8. ¢wiczenia

2008-12-01

1 Plan zaj¦¢

• zadania 3.24-3.29 z ksiazki z ASD

• drzewa przedzialowe z Cormena.

2 ASD Zadania  wzbogacanie struktur danych

Zadanie 3.24

Zaprojektuj struktur¦ danych umo»liwiaj¡c¡ wykonywanie w czasie O(log n) nast¦puj¡cych operacji na zbiorze S:

• makeset(S):: S := ∅

• insert((x, y), S):: S := S ∪ {(x, y)}

• minx(S):: usuni¦cie z S pary (x, y) o najmniejszej pierwszej skªadowej,

• miny(S):: usuni¦cie z S pary (x, y) o najmniejszej drugiej skªadowej,

• searchx(x, S):: wyznaczenie takiej pary (a, b) ∈ S, »e x = a,

• searchy(y, S):: wyznaczenie takiej pary (a, b) ∈ S, »e y = b.

Rozwi¡zanie: dwa drzewa AVL (jedno ze wspóªrz¦dnymi x, drugie ze wspóª- rz¦dnymi y), dodatkowo ka»dy w¦zeª trzyma dowi¡zanie do odpowiadaj¡cego mu w¦zªa w drugim drzewie.

Zadanie 3.25

Zaprojektuj struktur¦ danych umo»liwiaj¡c¡ wykonywanie w czasie O(log n) nast¦puj¡cych operacji na zbiorze S:

• construct(S):: utworzenie ci¡gu pustego S,

• insert(S, x):: S := S ∪ {(x)},

• delete(S, x):: S := S − {(x)},

• search(S, x):: sprawdzenie, czy x znajduje si¦ w zbiorze S,

• elem(S, i):: wyznaczenie itego co do wielko±ci elementu zbioru S, 1

(2)

• numb(S, x) :: wyznaczenie numeru elementu x w zbiorze S (wzgl¦dem wielko±ci).

Rozwi¡zanie: drzewo AVL z atrybutami rozmiar poddrzewa.

Zadanie 3.26

Zaprojektuj struktur¦ danych do wykonywania ci¡gów nast¦puj¡cych operacji (dla elementów x pochodz¡cych z dowolnego zbioru liniowo uporz¡dkowanego):

• initialization:: Si= ∅dla i = 1, 2, . . . , n,

• insert(Si, x) :: Si := Si∪ {(x)}, pod warunkiem, »e x nie wyst¦puje w

»adnym zbiorze Sj, 1 ≤ j ≤ n,

• deletemin(Si):: usuni¦cie ze zbioru Si najmniejszego elementu,

• f ind(x):: wyznaczenie numeru zbioru do którego nale»y element x.

Rozwi¡zanie: Sijako zwykªe kopce, dodatków utrzymujemy sªownik par (x, numerzbioru)

Zadanie 3.27

Zaprojektuj struktur¦ danych umo»liwiaj¡c¡ wykonywanie w czasie O(log n) nast¦puj¡cych operacji na ci¡gu S:

• construct(S):: utworzenie ci¡gu pustego S,

• insert(S, i, x):: wstawienie x na i-te miejsce w ci¡gu S, tzn. Si= xpod warunkiem, »e i ≤ |S| + 1,

• sum(S, i, j):: obliczenie sumy Pjk=iSk,

Rozwi¡zanie: AVL z dodatkowym atrybutem suma elementów poddrzewa.

Zadanie 3.28

Rozwi¡zanie: AVL z atrybutem rozmiar poddrzewa.

Zadanie 3.29

Zaprojektuj struktur¦ danych umo»liwiaj¡c¡ wykonywanie w czasie O(log n) nast¦puj¡cych operacji na zbiorze S zawieraj¡cym przedziaªy liczb rzeczywistych [l, r]:

• empty(S):: S = ∅,

• add(S, I):: S = S ∪ {I},

• delete(S, I):: S = S − {I},

• is(S, x) :: sprawdzenie czy element x nale»y do jakiego± przedziaªu w zbioru S;

2

(3)

• intersect(S, I) :: sprawdzenie czy przedziaª I ma niepuste przeci¦cie z jakim± przedziaªem nale»¡cym do S.

Rozwi¡zanie: Utrzymujemy sªownik z parami (x, z) (gdzie x to liczba rzeczy- wista, a z +1 lub -1). Dodatkowo ka»dy w¦zeª ma dodatkowy atrybut suma oznaczaj¡cy sum¦ warto±ci z w poddrzewie. Mo»emy w takim drzewie w czasie O(log n) obliczy¢ sum(q) oznaczaj¡c¡ sum¦ wszystkich atrybutów z par (x, z), takich, »e x ≤ q.

• add(S, I) dodajemy do sªownika pary (l, +1) i (r, −1),

• delete(S, I) usuwamy ze sªownika pary (l, +1) i (r, −1),

• is(S, x) je±li sªownik zawiera pary (x, +1) lub (x, −1) to zwracamy true, wpp. obliczamy sum(x) i je±li suma jest > 0 to zwracamy true, je±li sum(x) ≤ 0, to zwracamy false.

• intersect(S, I), je±li is(S, l) lub is(S, r) to zwracamy true, je±li istnieje w sªowniu para (x, z), t.»e l ≤ x ≤ r, to zwracamy true, wpp zwracamy f alse.

3

Cytaty

Powiązane dokumenty

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

Jeśli element e należy do kolejki q, to po skończonej liczbie usunięć kolejnych elementów minimalnych.. dotrę do tego

takie drzewo <V, T> rozpinające grafu G, że suma kosztów jego krawędzi  eT c (e) jest najmniejsza.. Mirkowska, ASD_12 Algorytmy na

Niech będzie tekst 100000 znakowy, w którym występują tylko litery a,b,c,d,e,f i a-45tys razy, b-13tys., c-12tys.,.. d-16tys., e -

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