Zadanie 1 – stos (5 pkt) Dla struktury danych typu stos elementów

advertisement
Zadanie 1 – stos (5 pkt)
Dla struktury danych typu stos elementów typu int zbadaj złożoność obliczeniową
następujących operacji:
1. Dodanie elementu na szczyt stosu (1 pkt).
2. Usunięcie elementu ze szczytu stosu (1 pkt).
3. Usunięcie elementu ze spodu stosu (1 pkt).
4. Wyszukanie czy element o zadanej wartości znajduje się na stosie (1 pkt).
Uwagi:
• złożoność należy badać w zależności od rozmiaru stosu przed rozpoczęciem
danej operacji,
• wyniki pomiaru składające się z samych zer (lub ogólniej – z wartości
mniejszych niż rozdzielczość pomiaru czasu) nie są miarodajne, gdyż równie
dobrze mogą oznaczać złożoność liniową, a nie stałą. Należy stosować takie
rozmiary stosu lub takie "skalowanie" pomiaru, by uzyskać "niezerowe"
wyniki. Przykład skalowania znajduje się na stronie przy okazji poprzedniego
laboratorium,
• dozwolone są tylko operacje typowe dla stosu: sprawdzenie rozmiaru stosu
(operacje empty oraz size), dodanie/usunięcie elementu na/z szczytu stosu
(pop_back/push_back) oraz uzyskanie dostępu do elementu na szczycie
stosu (back).
• w punkcie 3 dozwolone jest tymczasowe zdjęcie innych elementów ze stosu,
ale po zakończeniu całej operacji pozostałe elementy poza usuwanym mają
pozostać na stosie,
• analogicznie w przypadku punktu 4: procedura ma zwracać informację czy
dany element jest na stosie, ale po jej zakończeniu stos ma posiadać dokładnie
te same elementy co przed rozpoczęciem procedury,
• w przypadku punktu 4 w celu uzyskania miarodajnych wyników wyszukiwany
element powinien być zawsze celowy umieszczony w określonej części stosu
(najlepiej na końcu),
• za własną implementację stosu jest dodatkowy punkt.
Zadanie 2 – binarne drzewo poszukiwań (4 pkt)
Zaimplementuj strukturę danych typu binarne drzewo poszukiwań (BST), na której
będzie można wykonać operacje dodawania elementu o zadanej wartości (1 pkt),
wyszukiwanie elementu o zadanej wartości (1 pkt) oraz usuwania elementu o zadanej
wartości (1 pkt). Dokonać analizy złożoności obliczeniowej jednej z powyższych
operacji (1 pkt).
Uwagi:
• każdą operację należy przeprowadzać zaczynając od korzenia drzewa tzn.
zabronione jest przechowywanie wskaźników do innych elementów niż korzeń
przed rozpoczęciem operacji,
• wyszukiwanie ma zwracać wskaźnik na element o zadanej wartości (jeśli taki
element jest w drzewie) lub pusty wskaźnik (jeśli nie ma takiego elementu),
• analiza złożoności obliczeniowej ma być miarodajna. Przykładowo, aby
zmierzyć złożoność operacji dodawania elementu należy przygotować
możliwie zrównoważone drzewo, a następnie dodać element o kluczu
większym niż wszystkie elementy w drzewie (zostanie wtedy zawsze dodany
blisko "prawego dolnego" rogu drzewa).
Zadanie 3 – kopiec binarny (4 pkt)
Zaimplementuj strukturę danych typu kopiec binarny, na której będzie można
wykonać operacje dodawania elementu o zadanej wartości (1 pkt) oraz usuwania
elementu-korzenia (1 pkt). Napisać funkcję budującą kopiec na podstawie zadanych
danych (listy, tablicy lub podawanych z klawiatury) (1 pkt). Dokonać analizy
złożoności obliczeniowej jednej z powyższych operacji (1 pkt). Przyjmujemy, że
kopiec jest malejący tzn. korzeń przechowuje element największy.
Punkty
<5
5
6
7–8
9–10
11–12
13
Ocena
2.0
3.0
3.5
4.0
4.5
5.0
5.5
Download