ALGORYTMY I STRUKTURY DANYCH

advertisement
ALGORYTMY I STRUKTURY DANYCH
WEIT UZ
PYTANIA EGZAMINACYJNE - TERMIN 0
2 LUTY 2011
imię i nazwisko, grupa : .....Ygrek Iksiński, 100 IDM.................................................
1
6
2
4
3
4
4
4
5
4

22
OCENA
BDB
1. Wyjaśnij pojęcia :
a) stos:
Liniowa struktura danych typu LIFO (last in, first out), tzn. dostępny do edycji i
do ewentualnego usunięcia jest tylko ostatnio dodany element. Zdefiniowane
są tylko dwie procedury : dodania elementu na wierzch stosu i usunięcia
elementu z wierzchu stosu.
b) B-drzewo
B-drzewo rzędu m jest strukturą składającą się z węzłów mogących zawierać
więcej niż jeden klucz. Dowolny węzeł, poza korzeniem, zawiera co najmniej
m≤n≤2m kluczy. Klucze w węźle są posortowane rosnąco. Węzeł o n kluczach
może posiadać n+1 potomków. Klucze i-tego potomka (i=0,1,..,n) są większe
od i-tego klucza rodzica, a mniejsze od (i+1)-szego klucza rodzica. Struktura
B-drzewa jest stosowana w organizacji pamięci zewnętrznych komputerów.
c) drzewo AVL:
Drzewo AVL jest zmodyfikowaną wersją drzewa przeszukiwań binarnych (BST).
W opisie węzła dodano dodatkowy parametr bl=hl-hr, zwany balansem, gdzie hl
i hr są wysokościami odpowiednio lewego i prawego poddrzewa danego
elementu. Procedury dodania i usunięcia elementu zdefiniowane są w ten
sposób, aby balans dowolnego elementu |bl|≤1.
2. Napisz procedurę szukajmax(root) szukającą elementu o największym kluczu w
drzewie czerwono-czarnym o korzeniu wskazanym przez root.
Struktura ułożenia kluczy w drzewie czerwono-czarnym jest identyczna jak w
drzewie przeszukiwań binarnych (BST). A zatem największy element znajduje się
w skrajnie prawym elemencie drzewa. Zatem procedura wygląda tak:
function x=maxBST(root)
x=root
while x!=null
do x=r[x] % x staje się prawym potomkiem x
return x
3. Załóżmy, że poniższa tabela przedstawia tekst i wzorzec przystawiony do jego
początku:
B
C
B
B
C
D
B
D
C
A
C
B
A
D
B
B
C
B
B
C
B
O ile pozycji w prawo zostanie przesunięty wzorzec po stwierdzeniu niezgodności,
jeżeli użyjemy metody:
a) Naiwnej (brute-and-force) : ..1..(w tej metodzie zawsze przesuwamy się o 1)
b) Knuta-Morrisa-Pratta
: ..3..(niezgodność jest na 6 pozycji, w zgodnej części wzorca
c)
d)
BCBBC maksymalny prefiks zgodny z sufiksem jest BC, a zatem pierwsze BC musi się pokryć z
końcowym BC, czyli przesuwamy o 3 pozycje)
Rabina-Karpa
: ..1..( lub - ; w tej przekodowanie polega na usunięciu kodu
pierwszego znaku i dodaniu kodu znaku ostatniego, czyli zawsze przesuwamy się o 1)
Boyera-Moore’a
: ..6..(symbol D nie występuje we wzorcu, zatem przesuwamy
o całą długość wzorca, czyli o 6 pozycji).
4. Poniższą tablicę:
5
3
8
4
7
6
Przekształć do postaci stogu (kopca) zgodnie z pierwszym etapem sortowania stogowego.
Patrzymy na tablicę, jako zapis drzewa binarnego, w którym i-ty element posiada
ewentualnych potomków na pozycjach 2i oraz 2i+1. Przetwarzanie powyższego
drzewa zaczynamy od ostatniego elementu, który ma jeszcze potomków i iteracje
będą szły do pierwszego elementu. Tym ostatnim rodzicem jest element na 3 pozycji
o wartości 8, jego potomek jest na pozycji 6 o wartości 6. Ponieważ 8>6, to nic nie
robimy. Przechodzimy do pozycji 2 o wartości 3, potomkowie są na pozycji 4 i 5 (o
wartościach odpowiednio 4 i 7). Wybieramy większego z potomków (pozycja 5 o
wartości 7. Ponieważ 3<7 następuje zamiana elementów z pozycji 2 i 5. Ponieważ
pozycja 5 nie ma już potomków przechodzimy do kolejnej iteracji, tzn. do pozycji 1.
Pozycja 1 (wartość 5) posiada potomków na pozycjach 2 i 3 (o wartościach
odpowiednio 7 i 8) wybieramy większego z potomków (pozycja 3 – wartość 8).
Ponieważ 5<8 zamieniamy elementy pozycji 1 i 3. Pozycja 3 posiada potomka na
pozycji 6 o wartości 6. Ponieważ 5<6 następuje zamiana elementów pozycji 3 i 6.
Ponieważ pozycja 6 nie ma już potomków, to koniec procedury. Ostateczna postać
tablicy jako pierwszego stogu jest następująca:
8
7
6
4
3
5
5. W poniższym dwukopcu usuwamy korzeń, jak będzie wyglądał dwukopiec po
zakończeniu tej operacji
9
8
7
5
2
6
4
5
3
1
0
Usunięcie korzenia powoduje przesunięcie ostatniego elementu (dolny rząd skrajnie
prawy) tzn. o wartości 1 na pozycję korzenia. Zaburzamy w ten sposób strukturę
dwukopca.
1
8
5
4
5
7
2
6
3
0
Przystępujemy do porządkowania. Potomkowie korzenia (1) mają wartości (8) i (7),
wybieramy większy, ponieważ jest większy od (1) zamieniamy miejscami, czyli
struktura wygląda tak
8
1
5
4
5
7
2
6
3
0
Teraz potomkami (1) są (5) i (6), większe jest (6), które jest większe od (1),
zamieniamy miejscami
8
6
5
4
5
7
2
1
3
0
Teraz potomkami (1) są (3) i (0), większe jest (3), które jest większe od (1),
zamieniamy miejscami
8
6
5
4
5
7
2
3
1
I tak powinna wyglądać ostateczna odpowiedź.
0
Download