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)?

Następne zadanie →

Co ćwiczysz

  1. Łatwykluczowe pojęcia i fakty
  2. Średnistosowanie pojęć
  3. Trudnyprzypadki i analiza

Naucz się tematu Struktury danych od zera

Wcześniej: Algorytmy i złożoność

1Czym jest struktura danych

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.

a7[0]3[1]9[2]4[3]7394∅h

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?
  1. Odczyt elementu o indeksie i
  2. Odwiedzenie każdego elementu raz
  3. Wstawienie nowego elementu na początku
  4. 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?
  1. Graf
  2. Kolejka
  3. Stos
  4. 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?
  1. 20
  2. 40
  3. 70
  4. 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.

  1. Znajdź operację, która musi być szybka: dostęp według pozycji, według klucza, najnowszy element, najstarszy element, najmniejszy element albo zakres.
  2. 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ń.
  3. Sprawdź w notacji dużego O koszt pozostałych operacji, których potrzebuje zadanie.
  4. W zadaniu typu „śledzenie” wykonuj operacje po kolei i zapisuj stan po każdej z nich.
  5. 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.

503070
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.

503070204060
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.

503070204060

Wyszukiwanie wymaga 3 porównań, po jednym na poziom.

Odpowiedź

Inorder: 20, 30, 40, 50, 60, 70. Wyszukanie 60 wymaga 3 porównań.

6Typowe błędy

  • 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. 1, 2 i 3 razem
  2. 1
  3. 2
  4. 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⌋.

Ucz się krok po kroku w aplikacjiUcz się krok po kroku w aplikacji

Przykładowe pytania

Przykład 1Łatwy

Jaka jest główna różnica między tablicą statyczną a tablicą dynamiczną?

  1. ATablica statyczna ma wolniejszy dostęp po indeksie
  2. BTablica dynamiczna może rosnąć, przenosząc się do większego bloku pamięci
  3. CTablica dynamiczna przechowuje elementy w połączonych węzłach, by mogła rosnąć po jednym elemencie
  4. DTablica statyczna może przechowywać tylko liczby
Pokaż podpowiedzi
  1. Listy w Pythonie i ArrayList w Javie są przykładami jednej z nich.
  2. 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?

  1. AUsuwa się ostatni element tablicy
  2. BPrzenosi się ostatni element do korzenia i przesuwa go w dół
  3. CUsuwa się korzeń i przesuwa wszystkie elementy o jedno miejsce w lewo
  4. DPrzeszukuje się wszystkie liście w poszukiwaniu nowego minimum
Pokaż podpowiedzi
  1. Zachowaj zupełność drzewa, a potem napraw porządek.
  2. 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?

  1. AO(1)
  2. BO(α(n))
  3. CO(log n)
  4. DO(n)
Pokaż podpowiedzi
  1. Drzewa mogą się zdegenerować.
  2. 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?
  1. Czym jest struktura danych
  2. Stosy i kolejki
  3. Drzewa, kopce, tablice mieszające i grafy
  4. Metoda krok po kroku
  5. Przykład krok po kroku
  6. Typowe błędy
  7. 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.

Tematy przed tym i po nim

Najpierw naucz się

Przedmioty z tym tematem

Więcej tematów: Informatyka

Karta pracy do druku