Struktury danych: pytania do ćwiczeń z wyjaśnieniami
Darmowe pytania testowe z tematu Struktury danych z podpowiedziami i wyjaśnieniami, na trzech poziomach: kluczowe pojęcia i fakty, stosowanie pojęć, przypadki i analiza.
Darmowe zadanieŁatwy
Na czym polega własność kopca maksymalnego (max-heap)?
Struktura danych to sposób organizowania danych w pamięci tak, aby pewne operacje były szybkie: znalezienie elementu, dodanie go, usunięcie.
Żadna struktura nie jest szybka we wszystkim. Wybór jednej oznacza wybór, które operacje mają być tanie. Ich koszty zapisuje się w notacji dużego O, gdzie n to liczba elementów.
Dwa podstawowe elementy składowe to tablica i lista wiązana.
Tablica przechowuje elementy w jednym bloku pamięci, jeden po drugim. Komputer może obliczyć, gdzie jest element i, więc odczyt a[i] zajmuje O(1). Wstawienie na początku oznacza przesunięcie każdego elementu: O(n).
Lista wiązana przechowuje każdy element w węźle ze wskaźnikiem na następny węzeł. Ostatni wskaźnik jest pusty (null). Wstawienie na początku (głowie, h) zmienia tylko jeden wskaźnik: O(1). Ale aby dotrzeć do elementu i, trzeba przejść i wskaźników: O(n).
Lista dwukierunkowa ma też wskaźnik na poprzedni węzeł, więc można przechodzić w obie strony.
Samosprawdzenie Która operacja jest O(1) dla tablicy, ale O(n) dla listy jednokierunkowej?
Odczyt elementu o indeksie i
Odwiedzenie każdego elementu raz
Wstawienie nowego elementu na początku
Zliczanie elementów jeden po drugim
Odpowiedź: Odczyt elementu o indeksie i. Tablica oblicza adres elementu i bezpośrednio. Lista wiązana musi przejść i wskaźników od głowy. Wstawianie na początku to przypadek odwrotny: tanie dla listy, drogie dla tablicy.
2Stosy i kolejki
Stos jest jak stos talerzy: dodajesz i zdejmujesz tylko na górze. Ostatni element, który wszedł, wychodzi pierwszy: LIFO.
push kładzie element na wierzchu, pop zdejmuje wierzchni element, peek odczytuje wierzch bez zdejmowania. Wszystkie są O(1).
Zastosowania: funkcja cofania w edytorze, stos wywołań programu, sprawdzanie, czy nawiasy są zbilansowane, przeszukiwanie w głąb.
Kolejka jest jak kolejka do kasy: dołączasz na końcu i odchodzisz z początku. Pierwszy element, który wszedł, wychodzi pierwszy: FIFO.
enqueue dodaje na końcu, dequeue usuwa z początku. Obie są O(1).
Zastosowania: zadania drukowania, wiadomości czekające na obsłużenie, przeszukiwanie wszerz.
Deque (kolejka dwustronna) pozwala dodawać i usuwać na obu końcach. Kolejka priorytetowa zawsze najpierw usuwa element o najwyższym priorytecie; zwykle jest zbudowana jako kopiec.
Samosprawdzenie Która struktura danych najlepiej pasuje do przycisku „cofnij” w edytorze tekstu?
Graf
Kolejka
Stos
Tablica mieszająca
Odpowiedź: Stos. Cofanie musi odwracać najpierw ostatnią czynność: ostatni wchodzi, pierwszy wychodzi. Kolejka cofałaby najpierw najstarszą czynność.
3Drzewa, kopce, tablice mieszające i grafy
Drzewo ma jeden węzeł na szczycie, korzeń. Każdy inny węzeł ma dokładnie jednego rodzica. Węzły bez dzieci to liście. Drzewo z n węzłami ma n − 1 krawędzi.
W drzewie binarnym każdy węzeł ma co najwyżej dwoje dzieci. Binarne drzewo poszukiwań (BST) dodaje regułę: klucze w lewym poddrzewie są mniejsze od węzła, a klucze w prawym poddrzewie większe.
Przeszukiwanie BST idzie jedną ścieżką w dół, więc kosztuje O(wysokość). Drzewo zrównoważone (AVL, czerwono-czarne) utrzymuje wysokość blisko log₂ n. Klucze wstawiane w kolejności rosnącej tworzą łańcuch o wysokości n.
Kopiec to drzewo binarne, w którym każdy rodzic jest mniejszy od swoich dzieci (kopiec minimalny) albo większy (kopiec maksymalny). Minimum lub maksimum jest w korzeniu, a wstawianie i usuwanie kosztują O(log n).
Tablica mieszająca przechowuje pary klucz–wartość. Funkcja skrótu zamienia klucz na indeks, więc wstawianie i wyszukiwanie zajmują średnio O(1). Dwa klucze o tym samym indeksie to kolizja, rozwiązywana przez łańcuchowanie (lista na każde miejsce) lub adresowanie otwarte (próba innego miejsca).
Graf ma wierzchołki połączone krawędziami, które mogą mieć kierunek lub wagę. Przechowuje się go jako macierz sąsiedztwa, pamięć O(V²), albo jako listy sąsiedztwa, O(V + E).
Samosprawdzenie Klucze 50, 30, 70, 20 i 40 są wstawiane w tej kolejności do pustego binarnego drzewa poszukiwań. Jakie jest lewe dziecko węzła 30?
20
40
70
Nie ma lewego dziecka
Odpowiedź: 20. 20 jest mniejsze od 50, więc idzie w lewo do 30. Jest też mniejsze od 30, więc znów idzie w lewo. 40 jest większe od 30 i zostaje jego prawym dzieckiem.
4Metoda krok po kroku
Pytania często opisują zadanie i pytają, jaka struktura pasuje, albo pytają, jak wygląda struktura po kilku operacjach.
Znajdź operację, która musi być szybka: dostęp według pozycji, według klucza, najnowszy element, najstarszy element, najmniejszy element albo zakres.
Dopasuj do struktury: indeks → tablica, klucz → tablica mieszająca, najnowszy → stos, najstarszy → kolejka, najmniejszy lub największy → kopiec, kolejność posortowana lub zakresy → zrównoważone drzewo poszukiwań.
Sprawdź w notacji dużego O koszt pozostałych operacji, których potrzebuje zadanie.
W zadaniu typu „śledzenie” wykonuj operacje po kolei i zapisuj stan po każdej z nich.
Sprawdź stan końcowy z regułą struktury: LIFO, FIFO, porządkiem BST lub porządkiem kopca.
5Przykład krok po kroku
Przejdź przez każdy krok. Spróbuj przewidzieć następny, zanim go odsłonisz.
Przykład krok po kroku
Klucze 50, 30, 70, 20, 40 i 60 są wstawiane w tej kolejności do pustego binarnego drzewa poszukiwań. Jaki jest przemarsz w porządku inorder i ile porównań wymaga wyszukanie 60?
1
Wstaw korzeń
Pierwszy klucz, 50, staje się korzeniem.
2
Wstaw 30 i 70
30 jest mniejsze od 50, więc idzie w lewo. 70 jest większe od 50, więc idzie w prawo.
3
Wstaw 20, 40 i 60
20: mniejsze od 50, mniejsze od 30, więc na lewo od 30. 40: mniejsze od 50, większe od 30, więc na prawo od 30. 60: większe od 50, mniejsze od 70, więc na lewo od 70.
4
Przejdź drzewo w porządku inorder
Przemarsz inorder odwiedza lewe poddrzewo, potem węzeł, potem prawe poddrzewo.
Daje to 20, 30, 40, 50, 60, 70: klucze w kolejności rosnącej, jak zawsze dla BST.
5
Wyszukaj 60
Porównaj z 50: większe, idź w prawo. Porównaj z 70: mniejsze, idź w lewo. Porównaj z 60: znaleziono.
Wyszukiwanie wymaga 3 porównań, po jednym na poziom.
Mylenie LIFO z FIFO. Stos zwraca najnowszy element, kolejka najstarszy.
Myślenie, że lista wiązana daje szybki dostęp według indeksu. Musi ona iść od głowy.
Zakładanie, że BST zawsze jest O(log n). Tylko drzewo zrównoważone takie jest; wstawianie posortowane daje O(n).
Zapominanie o kolizjach w tablicy mieszającej. O(1) to średnia, a nie przypadek pesymistyczny.
Mylenie przemarszów. Preorder: węzeł najpierw. Inorder: węzeł w środku. Postorder: węzeł na końcu.
Użycie macierzy sąsiedztwa dla dużego rzadkiego grafu. Marnuje ona pamięć O(V²).
Samosprawdzenie Dodajesz do pustej kolejki 1, 2 i 3 (enqueue), w tej kolejności. Który element zwraca pierwsze zdjęcie z kolejki (dequeue)?
1, 2 i 3 razem
1
2
3
Odpowiedź: 1. Kolejka działa według zasady pierwszy wchodzi, pierwszy wychodzi, więc 1 wychodzi pierwsza. 3 byłoby odpowiedzią dla stosu (pop), który zwraca najnowszy element.
7Jak wyglądają zadania egzaminacyjne
Łatwe: pojęcia i fakty. LIFO i FIFO, czym jest węzeł, korzeń lub liść, reguła BST, co robi funkcja skrótu.
Średnie: stosowanie pojęć. Która struktura pasuje do zadania, wynik operacji push i pop lub wstawień do BST, przemarsze drzew, tablica mieszająca z próbkowaniem liniowym, koszty w notacji dużego O.
Trudne: przypadki i analiza. Drzewa zrównoważone, kopce w tablicach, B-drzewa, drzewa trie, union-find, filtry Blooma i projekty takie jak pamięć podręczna LRU.
Dla kopca przechowywanego w tablicy od indeksu 0 dzieci indeksu i znajdują się pod 2i + 1 i 2i + 2, a jego rodzic pod ⌊(i − 1) / 2⌋.
Jaka jest główna różnica między tablicą statyczną a tablicą dynamiczną?
ATablica statyczna ma wolniejszy dostęp po indeksie
BTablica dynamiczna może rosnąć, przenosząc się do większego bloku pamięci
CTablica dynamiczna przechowuje elementy w połączonych węzłach, by mogła rosnąć po jednym elemencie
DTablica statyczna może przechowywać tylko liczby
Pokaż podpowiedzi
Listy w Pythonie i ArrayList w Javie są przykładami jednej z nich.
Dwie błędne odpowiedzi są teraz skreślone. Jedna z dwóch pozostałych jest poprawna.
Pokaż odpowiedź i wyjaśnienie
Dlaczego to jest odpowiedź
Tablica statyczna ma stały rozmiar; tablica dynamiczna, gdy się zapełni, alokuje większą tablicę i kopiuje do niej elementy.
Odpowiedź
B · Tablica dynamiczna może rosnąć, przenosząc się do większego bloku pamięci
Przykład 2Średni
Jak działa extract-min w binarnym kopcu minimalnym?
AUsuwa się ostatni element tablicy
BPrzenosi się ostatni element do korzenia i przesuwa go w dół
CUsuwa się korzeń i przesuwa wszystkie elementy o jedno miejsce w lewo
DPrzeszukuje się wszystkie liście w poszukiwaniu nowego minimum
Pokaż podpowiedzi
Zachowaj zupełność drzewa, a potem napraw porządek.
Dwie błędne odpowiedzi są teraz skreślone. Jedna z dwóch pozostałych jest poprawna.
Pokaż odpowiedź i wyjaśnienie
Dlaczego to jest odpowiedź
Ostatni element wypełnia lukę w korzeniu i jest zamieniany z mniejszym dzieckiem, dopóki nie zostanie spełniona własność kopca, co zajmuje O(log n).
Odpowiedź
B · Przenosi się ostatni element do korzenia i przesuwa go w dół
Przykład 3Trudny
Jaki jest pesymistyczny koszt pojedynczej operacji find w strukturze union-find z n elementami bez łączenia według rangi (union by rank) i bez kompresji ścieżek?
AO(1)
BO(α(n))
CO(log n)
DO(n)
Pokaż podpowiedzi
Drzewa mogą się zdegenerować.
Dwie błędne odpowiedzi są teraz skreślone. Jedna z dwóch pozostałych jest poprawna.
Pokaż odpowiedź i wyjaśnienie
Dlaczego to jest odpowiedź
Naiwne łączenie może połączyć drzewa w długi łańcuch, więc find może przejść n − 1 wskaźników do rodziców; obie heurystyki sprowadzają koszt niemal do stałego.
Odpowiedź
D · O(n)
Pytania i odpowiedzi
Struktury danych: co to jest?
Żadna struktura nie jest szybka we wszystkim. Wybór jednej oznacza wybór, które operacje mają być tanie. Ich koszty zapisuje się w notacji dużego O, gdzie n to liczba elementów.
Dwa podstawowe elementy składowe to tablica i lista wiązana.
Struktury danych: jak się tego nauczyć krok po kroku?
Czym jest struktura danych
Stosy i kolejki
Drzewa, kopce, tablice mieszające i grafy
Metoda krok po kroku
Przykład krok po kroku
Typowe błędy
Jak wyglądają zadania egzaminacyjne
Struktury danych: co ćwiczysz?
Łatwy: kluczowe pojęcia i fakty
Średni: stosowanie pojęć
Trudny: przypadki i analiza
Każde pytanie ma cztery odpowiedzi i tylko jedna jest poprawna. Utknąłeś? Najpierw otwórz małą podpowiedź, a pełne wyjaśnienie dopiero wtedy, gdy go potrzebujesz.
Jak wygląda ćwiczenie
Każde pytanie ma cztery odpowiedzi i tylko jedna jest poprawna.
Utknąłeś? Najpierw otwórz małą podpowiedź, a pełne wyjaśnienie dopiero wtedy, gdy go potrzebujesz.
Twoje postępy, błędy i zapisane zadania są zachowywane, więc możesz je powtórzyć przed egzaminem.