KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 2.
Algorytm wyszukiwania elementu w nieposortowanej tablicy jednowymiarowej ma złożoność obliczeniową
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W nieposortowanej tablicy, aby znaleźć element, w typowym (najgorszym) przypadku trzeba sprawdzić kolejne pozycje aż do trafienia lub końca danych. Liczba porównań rośnie proporcjonalnie do n, więc złożoność czasowa jest liniowa: O(n).

Pełne wyjaśnienie:

Wyszukiwanie elementu w nieposortowanej tablicy jednowymiarowej najczęściej realizuje się jako wyszukiwanie liniowe (sekwencyjne): porównujemy szukany klucz z kolejnymi elementami tablicy, idąc od początku do końca.

W takiej sytuacji liczba wykonanych porównań zależy od tego, gdzie znajduje się szukany element (albo czy w ogóle istnieje):

  • najgorszy przypadek: element jest na końcu albo go nie ma – wykonujemy około n porównań, czyli O(n);
  • średni przypadek: statystycznie również proporcjonalnie do n, więc nadal O(n);
  • najlepszy przypadek: element jest na pierwszej pozycji – wtedy może wyjść O(1), ale to nie opisuje typowej gwarancji dla nieposortowanych danych.

Dlatego odpowiedź "liniową, O(n)" jest właściwa jako standardowa charakterystyka kosztu wyszukiwania w nieposortowanej tablicy.

Pozostałe odpowiedzi są błędne, bo:

  • "stałą, O(1)" dotyczy tylko najlepszego przypadku (trafienie od razu) albo innych struktur danych (np. tablic haszujących w sprzyjających założeniach), a nie ogólnego wyszukiwania w nieposortowanej tablicy;
  • "kwadratową, O(n2)" pojawia się zwykle przy zagnieżdżonych pętlach (np. porównywanie każdej pary elementów), a nie przy pojedynczym przejściu po tablicy;
  • "silnia, O(n!)" jest typowa dla algorytmów przeglądu wszystkich permutacji (np. brutalne rozwiązania niektórych problemów kombinatorycznych) i nie ma związku z prostym wyszukiwaniem jednego elementu.

Wskazówka egzaminacyjna: gdy widzisz "nieposortowana tablica" i "szukamy elementu", domyślnie myśl o jednym przejściu pętlą po danych (jedna pętla) → O(n). Gdy pojawiają się dwie pętle zagnieżdżone → często O(n2).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
O(n) oznacza, że czas działania rośnie proporcjonalnie do liczby elementów n. Przy wyszukiwaniu w nieposortowanej tablicy zwykle trzeba porównać kolejne wartości, więc im większa tablica, tym średnio więcej porównań i dłuższy czas.
Bez porządku nie da się "przeskoczyć" do właściwej części danych na podstawie porównań. Trzeba sprawdzać element po elemencie, aż do znalezienia wyniku lub końca tablicy. To daje liczbę kroków wprost zależną od n, czyli O(n).
O(1) pojawia się w najlepszym przypadku wyszukiwania liniowego (szukany element jest pierwszy) albo gdy użyjesz innej struktury danych, np. mapy/haszowania, gdzie dostęp po kluczu bywa stały w ujęciu średnim. Dla nieposortowanej tablicy nie jest to gwarancja.
Najlepszy przypadek: trafienie od razu (często O(1)). Średni: element zwykle jest gdzieś w środku, więc porównań jest proporcjonalnie do n (O(n)). Najgorszy: element na końcu lub brak elementu, co wymusza sprawdzenie całej tablicy (O(n)).
Tak, po posortowaniu możesz użyć wyszukiwania binarnego, które ma O(log n). Trzeba jednak pamiętać o koszcie sortowania (np. O(n log n)). Opłaca się to, gdy wykonujesz wiele wyszukiwań na tych samych danych, a sortujesz rzadko.
Najprościej: jedna pętla przechodząca po n elementach zwykle daje O(n). Dwie pętle zagnieżdżone, gdzie każda przechodzi po n, często dają O(n2). Dla wyszukiwania liniowego typowo jest jedna pętla i warunek zakończenia po znalezieniu.
O(n!) dotyczy algorytmów, które muszą rozważyć wszystkie permutacje lub bardzo wiele kombinacji (problemy kombinatoryczne). Wyszukiwanie jednego elementu w tablicy nie wymaga generowania permutacji, tylko sprawdzania kolejnych wartości, więc nie może mieć tak ekstremalnej złożoności.
Częste pomyłki to wybór O(1) bez doprecyzowania przypadku (mylenie najlepszego z najgorszym), przenoszenie skojarzeń z wyszukiwaniem binarnym na dane nieposortowane oraz mylenie jednej pętli (O(n)) z dwiema zagnieżdżonymi (O(n2)).
To np. przeszukiwanie tablicy obiektów w JavaScript metodą pętli lub funkcjami typu find: sprawdzasz kolejne rekordy, aż znajdziesz pasujący. Dla małych danych jest OK, ale przy większych zbiorach lepiej używać indeksowania w bazie lub struktur mapujących.
Ćwicz rozpoznawanie złożoności z prostych fragmentów kodu: jedna pętla, pętle zagnieżdżone, dzielenie problemu na połowy (log n). Zapamiętaj też klasyczne przykłady: wyszukiwanie liniowe O(n), binarne O(log n), sortowania O(n log n) i proste sortowania O(n2).
info

To pytanie poprawnie rozwiązuje 65% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że w nieposortowanej tablicy, aby znaleźć element, w typowym (najgorszym) przypadku trzeba sprawdzić kolejne pozycje aż do trafienia lub końca danych.

Źródła:

  • Wikipedia: Linear search — https://en.wikipedia.org/wiki/Linear_search (dostęp: 2026-03-01)
  • Wikipedia: Big O notation — https://en.wikipedia.org/wiki/Big_O_notation (dostęp: 2026-03-01)
  • CP-Algorithms: Linear Search — https://cp-algorithms.com/others/linear_search.html (dostęp: 2026-03-01)

Materiały:

  • materiały kursowe z podstaw algorytmiki (notacja O, przykłady pętli i iteracji)
  • dokumentacja/artykuły o strukturach danych: tablice, listy, haszowanie
  • zadania treningowe: rozpoznawanie złożoności na podstawie pseudokodu

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego