Programista ma za zadanie zaimplementować funkcję, która będzie często wyszukiwać elementy w dużej, posortowanej kolekcji danych. Który algorytm wyszukiwania zapewni najlepszą średnią wydajność (najniższą złożoność czasową)?
Programista ma za zadanie zaimplementować funkcję, która będzie często wyszukiwać elementy w dużej, posortowanej kolekcji danych. Który algorytm wyszukiwania zapewni najlepszą średnią wydajność (najniższą złożoność czasową)?
Wyjaśnienie i uzasadnienie dydaktyczne
Poprawna odpowiedź: B
Uzasadnienie i szersze wyjaśnienie:
Kluczową informacją w pytaniu jest to, że kolekcja danych jest posortowana. Ta cecha umożliwia zastosowanie znacznie wydajniejszych algorytmów niż proste przeszukiwanie liniowe.
- Wyszukiwanie binarne to algorytm, który działa na zasadzie „dziel i zwyciężaj”. W każdym kroku porównuje szukany element z elementem środkowym w kolekcji. Jeśli szukany element jest mniejszy, odrzuca prawą połowę kolekcji; jeśli jest większy, odrzuca lewą. Dzięki temu w każdym kroku liczba elementów do przeszukania zmniejsza się o połowę. Złożoność czasowa tego algorytmu to O(log n), co jest niezwykle wydajne dla dużych zbiorów danych.
Dlaczego pozostałe odpowiedzi są nieprawidłowe?
- A. Wyszukiwanie liniowe (sekwencyjne): Sprawdza każdy element po kolei. Jego złożoność to O(n). Dla dużej kolekcji jest to bardzo wolne i nie wykorzystuje faktu, że dane są posortowane.
- C. Wyszukiwanie z wartownikiem: Jest to jedynie niewielka optymalizacja wyszukiwania liniowego. Jego złożoność wciąż wynosi O(n).
- D. Wyszukiwanie interpolacyjne: Jest to wariant wyszukiwania binarnego, który może być jeszcze szybszy (średnia złożoność O(log log n)) pod warunkiem, że dane są równomiernie rozłożone. Jednak wyszukiwanie binarne ma lepszą gwarantowaną wydajność w najgorszym przypadku (O(log n) vs O(n) dla interpolacyjnego) i jest standardowym, najlepszym wyborem dla ogólnych, posortowanych danych.
Chcesz poćwiczyć całą kwalifikację INF.04?
Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.
Pojęcia z tego pytania
- Wyszukiwanie liniowe i z wartownikiem (Linear Search)Podstawowy algorytm przeszukiwania tablicy sprawdzający elementy kolejno od początku do końca o złożoności O(n), nie wymagający posortowania danych.
- Wyszukiwanie binarne (Binary Search)Algorytm wyszukiwania w posortowanej tablicy o złożoności O(log n), porównujący szukaną wartość ze środkowym elementem i odrzucający połowę zbioru.
- Paradygmat Dziel i Zwyciężaj (Divide and Conquer)Wiodąca technika projektowania algorytmów polegająca na rekurencyjnym podziale problemu na mniejsze podproblemy tego samego typu, ich rozwiązaniu i scaleniu wyników.
Podobne pytania z działu „Algorytmy sortowania i wyszukiwania”
Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 23 pytań z tego działu.
- #93
Aby zaprojektować zestaw danych do zainicjowania algorytmu sortowania bąbelkowego tablicy, należy zastosować przynajmniej typy:
- #103
Metoda poszukiwań w tablicach posortowanych, która polega na podzieleniu tablicy na kilka bloków i wyszukaniu liniowym tylko w tym bloku, w którym docelowy element może się znajdować, w języku angielskim nosi nazwę
- #129
Który z wymienionych algorytmów działających na tablicy jednowymiarowej ma złożoność obliczeniową O(n2)?
- #143
Strategia budowania algorytmu poprzez podział na dwa lub więcej mniejszych podproblemów tak długo, aż fragmentu staną się proste do bezpośredniego rozwiązania jest metodą:
- #144
Z tabeli przedstawiającej złożoność obliczeniową algorytmów sortowania na dowolnym, dużym, zbiorze wejściowym (ponad 100 elementów) wynika, że najszybszą metodą jest algorytm sortowania: