Kolokwium
Zakres materiału obowiązującego na kolokwium
1.1 Zakres materiału
- podstawowe operacje na tablicy/wektorze i ich złożoność:
- dostęp,
- wstawianie elementu (na końcu/w środku),
- usuwanie elementu (z końca/ze środka),
- wyszukiwanie elementu o określonej wartości
- różnica między
std::vector::size()
astd::vector::capacity()
, - wykorzystanie iteratorów
1.2 Zakres materiału
1.2 Materiały pomocnicze
- podstawowe operacje na liście i ich złożoność:
- dostęp,
- wstawianie elementu,
- usuwanie elementu,
- wyszukiwanie elementu o określonej wartości
- wyszukiwanie ze strażnikiem
Ogólne:
Wykorzystanie strażnika:
Wizualizacje:
1.2 Zadania:
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
Dany jest następujący szkielet klasy listy jednokierunkowej:
struct Node {
Node* next;
int value;
};
class LinkedList {
public:
int length;
Node* head;
LinkedList();
void erase_after(int pos); // usuwa elem. za pozycją pos
void insert_after(int pos, int value); // wstawia elem. za pozycją pos
void pop_front(); // usuwa pierwszy element
void push_front(int value); // wstawia element na początek listy
};
Zaimplementuj brakujące metody.
Zaimplementuj metodę, która dla listy jednokierunkowej zwróci trzeci element od końca. Załóż, że długość listy nie jest znana.
Zaimplementuj metodę, która zwróci środkowy element listy jednokierunkowej. Załóż, że długość listy nie jest znana.
Zaproponuj sposób odwracania listy jednokierunkowej w jednym przejściu bez tworzenia kopii wszystkich elementów.
Zaproponuj sposób usuwania węzła mając tylko odwołanie do niego. Załóż, że nie jest to ostatni węzeł listy.
Zaimplementuj uproszczony iterator (tylko operacje
->
i ++
) po elementach listy. Jak wyglądałby taki iterator, gdyby miał zwracać najpierw elementy na rosnących pozycjach nieparzystych listy, a następnie na parzystych?1.3 Zakres materiału
1.3 Materiały pomocnicze
- pojęcie abstrakcyjnego typu danych (abstract data type, ADT),
- kolejka i stos jako przykłady ADT,
- implementacja funkcjonalności kolejki i stosu na bazie listy dwukierunkowej
1.4 Zakres materiału
1.4 Materiały pomocnicze
- drzewo binarne, definicja, podstawowe własności,
- binarne drzewo poszukiwań (binary search tree, BST):
- podstawowe operacje i ich złożoność:
- dostęp,
- wyszukiwanie elementu,
- wstawianie elementu,
- usuwanie elementu
- przechodzenie po węzłach drzewa:
- in-order,
- pre-order,
- post-order
- implementacja iteratora dla drzewa
Ogólne:
Przechodzenie drzewa:
Wizualizacje:
1.4 Zadania
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
Narysuj binarne drzewo poszukiwań utworzone przez wstawienie w kolejności elementów:
31, 72, 23, 44, 85, 106, 17, 28, 9, 30, 41
Zaimplementuj metody wstawiania i wyszukiwania węzła w drzewie BST.
Zaimplementuj rekursywne przechodzenie po węzłach drzewa w kolejności "in-order".
Zaimplementuj uproszczony iterator (tylko operacje
->
i ++
), który będzie przechodził węzły drzewa w kolejności "in-order".Zaimplementuj w klasie drzewa BST funkcjonalność usuwania węzła o zadanej wartości.
Przykładowe implementacje omawianych algorytmów sortowania dostępne są w repozytorium z materiałami do przedmiotu.
2.1 Zakres materiału
2.1 Materiały pomocnicze
Algorytmy:
- sortowanie przez wybieranie (selection sort),
- sortowanie przez wstawianie (insertion sort),
- sortowanie bąbelkowe (bubble sort),
- sortowanie szybkie (quicksort),
- sortowanie przez scalanie (merge sort),
- sortowanie przez kopcowanie (heapsort),
- sortowanie kubełkowe (bucket sort)
Dla przedstawionych algorytmów:
- implementacja,
- złożoność czasowa (najlepsza, średnia, najgorsza),
- złożoność pamięciowa,
- stabilność
Ogólne:
Algorytmy:
Wizualizacje:
3.1 Zakres materiału
3.1 Materiały pomocnicze
- drzewa BST zrównoważone i niezrównoważone,
- rotacje drzew,
- drzewa splay:
- implementacja i złożoność obliczeniowa:
- operacja splay,
- wyszukiwanie elementu,
- wstawianie elementu,
- usuwanie elementu,
- zastosowania drzewa splay, zalety i wady
- drzewa AVL:
- wysokość, współczynnik wyważenia,
- operacje równoważenia drzewa AVL,
- implementacja i złożoność obliczeniowa:
- wyszukiwanie elementu,
- wstawianie elementu,
- usuwanie elementu
Zrównoważenie drzewa BST:
Rotacje:
Drzewa splay:
Drzewa AVL:
Wizualizacje:
3.1 Zadania:
3.1.1
3.1.2
3.1.3
Stwórz dwa drzewa BST przez wstawianie w kolejności następujących wartości:
A: 40, 20, 60, 10, 30, 50, 70
B: 10, 20, 30, 40, 50, 60, 70
Porównaj złożoność podstawowych operacji dla obydwu drzew.
Następnie dla drzewa niezrównoważonego B wykonaj kolejno operacje rotacji:
L(40)
L(30)
L(20)
L(10)
L(20)
Zapis
L(R)
oznacza rotację lewą, dla której korzeniem jest węzeł o wartości R
.Dane jest drzewo splay o takiej samej strukturze jak drzewo A z zadania 1.
Wykonaj w kolejności następujące operacje:
- znajdź element o wartości
30
, - znajdź element o wartości
50
, - wstaw element o wartości
25
, - wstaw element o wartości
22
, - usuń element o wartości
50
, - usuń element o wartości
25
.
Stwórz drzewo AVL przez wstawianie kolejno wartości:
10, 20, 30, 40, 50, 60, 70
Na stworzonym drzewie przeprowadź operacje:
- wstaw element o wartości
55
, - wstaw element o wartości
52
, - usuń element o wartości
52
, - usuń element o wartości
70
.
4.1 Zakres materiału
4.1 Materiały pomocnicze
- kolejka priorytetowa (priority queue, ADT),
- kopiec binarny:
- własność kopca min-heap, max-heap,
- reprezentacja tablicowa kopca (implicit data structure),
- implementacja i złożoność obliczeniowa operacji:
- dostęp do najmniejszego elementu,
- wstawianie nowego elementu,
- usuwanie najmniejszego elementu,
- budowa kopca:
- metoda Williamsa (sukcesywne wstawianie elementów),
- metoda Floyda (przywracanie własności kopca dla tablicy)
- kopce d-arne:
- 3-heap (ternary heap) i 4-heap (quaternary heap),
- zalety i wady zastosowania arności wyższego rzędu,
- kopiec dwumianowy:
- kopiec dwumianowy jako przykład kopca złączalnego (mergeable heap),
- własności kopca dwumianowego,
- implementacja i złożoność obliczeniowa operacji:
- dostęp do najmniejszego elementu,
- wstawianie nowego elementu,
- usuwanie najmniejszego elementu,
- scalanie kopców
- kopiec Fibonacciego:
- implementacja i złożoność obliczeniowa operacji:
- dostęp do najmniejszego elementu,
- wstawianie nowego elementu,
- usuwanie najmniejszego elementu,
- scalanie kopców
Ogólne:
Kopiec binarny:
Kopce d-arne:
Kopiec dwumianowy:
Kopiec Fibonacciego:
Wizualizacje:
4.1 Zadania:
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.1.6
4.1.7
Zapisz w reprezentacji tablicowej drzewo binarne następującej postaci:

Dla zapisu tablicowego:
[95, 80, 85, 40, 70, 90, 50, 30, 10, 20]
narysuj zupełne drzewo binarne. Czy drzewo to przedstawia kopiec typu max-heap?
Do pustego kopca binarnego max-heap wstaw w kolejności elementy o wartościach klucza:
43, 24, 11, 47, 13, 67, 59, 95, 29, 17, 54, 40
Następnie trzykrotnie wykonaj operację usunięcia największego elementu z kopca.
Zilustruj stan kopca po każdym kroku.
Z podanej tablicy stwórz kopiec binarny typu max-heap metodą Floyda (przywracanie własności kopca kolejnym poddrzewom):
[2, 7, 26, 25, 19, 17, 1, 90, 3, 36]
Zlicz ilość wykonanych operacji, porównaj z metodą tworzenia kopca przez wstawianie.
Do pustego kopca 3-arnego (ternary heap) typu max-heap wstaw w kolejności elementy o wartościach klucza:
43, 24, 11, 47, 13, 67, 59, 95, 29, 17, 54, 40
Następnie trzykrotnie wykonaj operację usunięcia największego elementu z kopca.
Zilustruj stan kopca po każdym kroku.
Do pustego kopca dwumianowego typu min-heap wstaw w kolejności elementy o wartościach klucza:
43, 24, 11, 47, 13, 67, 59, 95, 29, 17, 54, 40
Następnie trzykrotnie wykonaj operację usunięcia najmniejszego elementu z kopca.
Zilustruj stan kopca po każdym kroku.
Do pustego kopca Fibonacciego typu min-heap wstaw w kolejności elementy o wartościach klucza:
43, 24, 11, 47, 13, 67, 59, 95, 29, 17, 54, 40
Następnie trzykrotnie wykonaj operację usunięcia najmniejszego elementu z kopca.
Zilustruj stan kopca po każdym kroku.
Porównaj stany przejściowe kopca stworzonego na bazie poniższego ciągu operacji:
push(43)
,push(24)
,push(11)
,push(47)
,pop()
,push(13)
,push(67)
,pop()
,push(59)
,push(95)
,pop()
,push(29)
,push(17)
,pop()
,push(54)
,pop()
,push(40)
.
Last modified 3yr ago